벡터에서 그림 1과 같이 간격 1에서 최대 값과 간격 2에서 벡터의 값과 위치를 찾고 싶습니다. 간격 1과 2의 경계가 주어집니다.벡터 간격으로 최대 찾기
NEW VERSION - 데니스 Jaheruddin 제안 및 함수로 기록 된대로
더 재사용 가능한 코드는 하나의 간격을 사용합니다.
function test
%% Test data
x=0:0.1:10-0.1;
x_total=0:0.1:20-0.1;
y=-(x-5.8).^2+25;
y_total=[y,y+10];
figure(1);
plot(x_total,y_total); grid on;
interval=[12,18];
[maxValue,maxValuePositon] = findMaxInInterval(x_total,y_total,interval)
[maxValue,maxValuePositon] = findMaxInInterval2(x_total,y_total,interval)
end
%% Algorithm
function [maxValue,maxValuePositon] = findMaxInInterval(x,y,interval)
index = x>=interval(1) & x <= interval(2);
offset = find(index == 1,1,'first') -1;
[maxValue,indexMax] = max(y(index));
maxValuePositon = x(indexMax+offset);
end
%% Algorithm - Alternative
function [maxValue,maxValuePositon] = findMaxInInterval2(x,y,interval)
index = x>=interval(1) & x <= interval(2);
y_temp = y(index);
x_temp = x(index);
[maxValue,indexMax] = max(y_temp);
maxValuePositon = x_temp(indexMax);
end
이것은 내가 해결책을 가지고 이전 버전
하지만 내 코드는 나에게 꽤 복잡한 것 같다. 누군가의 솔루션을 더 똑 바르게 (또는 단순히 올바른 MATLAB 함수?) 가지고 있습니까? 당신은 또한 당신에게 몇 가지 편리한 추가 옵션을 제공하는 findpeaks
을 사용할 수 있습니다신호 처리 도구 상자가있는 경우
%Generate test function
x=0:0.1:10-0.1;
x_total=0:0.1:20-0.1;
y=-(x-5).^2+25;
y_total=[y,y+10];
figure(1);
plot(x_total,y_total); grid on;
interval1=[2,8];
interval2=[12,18];
%Algorithm
index1 = x_total>=interval1(1) & x_total <= interval1(2);
index2 = x_total>=interval2(1) & x_total <= interval2(2);
offset1 = find(index1 == 1,1,'first') -1;
offset2 = find(index2 == 1,1,'first') -1;
disp('Maximum 1 and 2:');
[max1,indexMax1] = max(y_total(index1))
[max2,indexMax2] = max(y_total(index2))
disp('Position of Maximum 1 and 2:');
x_total(indexMax1+offset1)
x_total(indexMax2+offset2)
그 기능이 나에게 좋아 보인다합니다. 나는 당신이 그것을 더 간단하게 만들 수 있을지 의심 스럽다. – bdecaf
괜찮아 보이지만, 2 개 이상의 간격 동안이 작업을 수행하려면 확실히 간격마다 코드 중복을 방지하고 싶을 것입니다. –