MATLAB找出一维变量中的局部极大值和局部极小值,并进行运算
如题,目前已有一维变量,需要在一维变量中找出所有的局部极大值和局部极小值,对相应的局部极大值点和局部极小值点进行运算:
并将运算结果返回到局部极大值点和局部极小值点对应的位置。
以此完成对整个一维数组的遍历输出结果。
这个思路应该挺容易理解,输入一个一维数组 y,遍历整个数组,寻找局部极大值点和局部极小值点,然后存入 Max和 Min 数组中。最后,对 Max和 Min 数组中的数按照题目要求进行计算,并返回结果。
y = input('请输入一位数组: ');
% 定义局部极大值点数组
MAX = [];
% 定义局部极小值点数组
Min = [];
% 遍历整个一维数组
for i = 2:length(y)-1
if y(i) > y(i-1) && y(i) > y(i+1)
Max = [Max, i];
end
if y(i) < y(i-1) && y(i) < y(i+1)
Min = [Min, i];
end
end
% 计算并返回结果
for i = 1:length(Max)
y(Max(i)) = sqrt(y(Max(i)) * y(Max(i) - 1));
end
for i = 1:length(Min)
y(Min(i)) = sqrt(y(Min(i)) * y(Min(i) - 1));
end
disp(y)
该回答引用ChatGPT
请参考下面的解决方案,如果有帮助,还请点击 采纳,感谢支持!
、、、、、、、、、、、、、、、
方案1
代码如下:
function result = find_local_extrema(y)
extrema = [];
for i = 2:(length(y) - 1)
if (y(i) > y(i - 1) && y(i) > y(i + 1)) || (y(i) < y(i - 1) && y(i) < y(i + 1))
extrema = [extrema, i];
end
end
result = y;
for i = 1:length(extrema)
result(extrema(i)) = result(extrema(i)) * y(extrema(i) - 1);
end
end
使用方法:
y = [1, 2, 3, 4, 3, 2, 1];
result = find_local_extrema(y);
其中,y 是输入的一维数组,result 是输出的结果数组。
matlab对一维函数求极值可以使用findpeaks方法:
clc; clear;% 清屏清空变量
figure('Color', 'w');% 背景:白色
Data = [1 -2 3 -4 5 -6 7 8 5 4 1 2 -3 -1 -5 9 7 -6 5];
plot(Data, '-s', 'LineWidth',2);% 画曲线,线宽为2
grid on;% 画网格线
[Pks, Locs] = findpeaks(Data);% 极大值Pks, 对应下标Locs
[Pks2, Locs2] = findpeaks(-Data);
Pks2 = -Pks2;% 极小值Pks2, 对应下标Locs2
不知道你这个问题是否已经解决, 如果还没有解决的话: