编写一个MATLAB函数,查找输入一维数组A的所有极大值(三种极大值:第一个数大于后一个数,中间数大于前后的数,最后一个数大于前一个数),将查找到的所有极大值的位置和数保存到输出数组B中。允许使用多种方法实现,但至少有一种方法必须使用while循环和if语句。
function B=func(A)
if length(A)<2;
B=A;
else
B=[];
i=2;
if A(2)>A(1)
B(end+1)=A(2);
end
while i<length(A)-1
if A(i)>A(i-1) && A(i)>A(i+1)
B(end+1)=A(i)
end
i=i+1
end
if A(length(A))>A(length(A)-1)
B(end+1)=A(length(A))
end
end
end
楼上说的对!
帮一楼的同学完善一下,一楼多输出了一个数,问题不大,分数可以都留给一楼
%% 极大值查找示例
% date:2022-4-27 23:43:02
% author:C.S
clear all;
close all;
clc;
M = -100 + 200*rand(1,10);%随机产生一个1列10行的数组,也可以生成其他维数,根据题主需要
N = func(M);
function B=func(A)
if length(A)<2
B = A;
else
B = [];
i=2;
while i<length(A)-1
if A(i)>A(i-1) && A(i)>A(i+1)
B(end+1) = A(i);
end
i = i + 1;
end
if A(length(A))>A(length(A)-1)
B(end+1) = A(length(A));
end
end
end