MATLAB找出一维变量中的局部极大值和局部极小值,并进行运算

MATLAB找出一维变量中的局部极大值和局部极小值,并进行运算
如题,目前已有一维变量,需要在一维变量中找出所有的局部极大值和局部极小值,对相应的局部极大值点和局部极小值点进行运算:

img

并将运算结果返回到局部极大值点和局部极小值点对应的位置。
以此完成对整个一维数组的遍历输出结果。

这个思路应该挺容易理解,输入一个一维数组 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

提供参考实例方法:MATLAB求离散数据的极值点,链接:https://blog.csdn.net/qq848386626/article/details/90694363?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-90694363-blog-52117982.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-90694363-blog-52117982.pc_relevant_recovery_v2&utm_relevant_index=5

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^