I 큰 데이터를 그래프 화하면 해당 설정에 기초하여이 세 가지 벡터로 설정 데이터를 분할하는 방법, 세 피크 죄의 그래프 (X) +1을 닮았다. 나는 각 피크 아래에 통합하고 세 가지 영역을 얻고 싶습니다. 나는 첨두 치의 좌표 위치를 모른다. 나는 파장을 안다고 가정 할 수 없다. 그래서 세 개의 피크를 찾아서 세 개의 해당 벡터로 데이터를 분리해야합니다. 어떤 도움이라도 대단히 감사하겠습니다.는 피크
Q
는 피크
0
A
답변
0
당신은 당신이 findpeaks
기능을 사용하여 원하는 것을 수행 할 수 있습니다. 다음 예를 보자 자신의 인덱스를 우리의 데이터 세트의 피크를 찾아 검색하는 그런
x = linspace(0, 5*pi); % x data.
y = sin(x) + 1; % y data.
우리가 findpeaks
를 사용 (locs
) :
>> [~, locs] = findpeaks(y)
locs =
11 51 90
우리는 두 벡터 x
및 데이터의 y
를 생성 [x(11), y(11)]
, [x(51), y(51)]
및 [x(90), y(90)]
:
우리는 함수 좌표 3 개 피크를 발견 한 것을 알 수있다. 우리는 우리의 데이터 집합을 아주 나눌 수
>> findpeaks(y)
:
출력 인수없이 findpeaks
를 호출하여 우리는 종종 시각적 인 확인을 위해 유용 중첩 피크 값으로 데이터의 플롯을 얻을 수 있습니다 쉽게 다음 for
루프 및 cell array에 다른 서브 세트를 저장 :
n = numel(locs);
for i = 1:n + 1
if i == 1
x_cell{i} = x(1:locs(i));
y_cell{i} = y(1:locs(i));
elseif i <= n
x_cell{i} = x(locs(i-1):locs(i));
y_cell{i} = y(locs(i-1):locs(i));
else
x_cell{i} = x(locs(i-1):end);
y_cell{i} = y(locs(i-1):end);
end
end
,536,913 63,210
이 우리를 줄 것이다 :
K>> x_cell
x_cell =
1×4 cell array
[1×11 double] [1×41 double] [1×40 double] [1×11 double]
및
K>> y_cell
y_cell =
1×4 cell array
[1×11 double] [1×41 double] [1×40 double] [1×11 double]
그래서 우리는 성공적으로 우리의 데이터 집합을 분할했다. 각 셀에는 원본 데이터 집합의 하위 집합이 포함됩니다.
이제 우리는 각각의 부분 집합의 수치 적분 찾기 위해 for
루프 내에서 trapz
를 사용할 수 있습니다
>> A
A =
2.6004 6.4099 6.0931 2.6004
마지막으로 나는 음모 좋은 것이라고 생각 :
k = numel(y_cell);
for i = 1:k
A(i) = trapz(x_cell{i}, y_cell{i});
end
을이 결과는
hold on;
for i = 1:k
area(x_cell{i}, y_cell{i}, 'FaceColor', i/k*[1, 1, 1]);
end
hold off; axis tight;
grid on; box on;
01,235,164 : 다른 영역들은 서로
area
함수 및 루프를 사용
for
서로 다른 지역여기에 명확하게 볼 수 있습니다 :
당신은 당신의 궁극적 인 목표는 무엇인가 명확히 할 수 있습니까? * "각 피크 아래에 통합되어 3 개의 다른 영역을 얻습니다"* 또는 * "데이터를 3 개의 해당 벡터로 분리"*? – codeaviator
제 목표는 세 가지 영역을 얻는 것입니다.데이터 세트는 처음에는 거대한 하나의 벡터에 포함되어 있으며이를 세 개의 다른 벡터로 분리하여 trapz을 사용하려고했습니다. – Samar