【问题标题】:Finding minima and maxima of function in MATLAB在 MATLAB 中查找函数的最小值和最大值
【发布时间】:2020-11-22 21:28:04
【问题描述】:

我正在尝试找到函数的局部最小值和最大值,但我正在苦苦挣扎。我们可以看到它应该有 1 个最小值和 4 个最大值,但我做错了,我不知道如何继续。

感谢您的帮助!

 %1
figure;
[x,y] = meshgrid(-3:0.01 : 3 );
z=x.*sin(x)+y.*sin(y);
mesh(x,y,z);
xlabel("x");
ylabel("y");
zlabel("z");
title(" Graph  f(x,y) = x*sin(x)+y*sin(y)");

%2 trying to find minima and maxima of funtion
fun=@(x)x(1).*sin(x(1))+x(2).*sin(x(2));

x0 = [-1,-1];
[x,fval,exitflag,output]=fminsearch(fun,x0);
%locmax=findpeaks(z);

%mask = imregionalmax(z);

【问题讨论】:

    标签: matlab graph


    【解决方案1】:

    您的代码看起来非常适合查找最小值。当我运行它时,我发现 [0, 0] 附近的最小值(精度为 ~1e-4)。为了找到最大值,您可能想要反转您的函数

    x0 = [-1, -1];
    fun=@(x) -x(1).*sin(x(1))-x(2).*sin(x(2));
    [x,fval,exitflag,output]=fminsearch(fun,x0)
    

    有了这个修改后的函数和起始条件,我在[-2, -2]找到了最大值:

    x =
    
       -2.0287   -2.0288
    
    
    fval =
    
       -3.6394
    
    
    exitflag =
    
         1
    

    对于fminsearch,如果您想找到所有局部最小值和最大值,则需要提供多个起始猜测。试试[1, 1], [1, -1], [-1, 1], [-1, -1]

    【讨论】:

    • "...试试 [1, 1], [1, -1], [-1, 1], [-1, -1] "为什么我需要所有这些组合?我的意思是如果我绘制一个图,我会看到它有 1 个局部最小值和 4 个局部最大值。有必要精确吗?无论如何感谢您的帮助。
    • @BlackSwan_22: fminsearch 在当时找到一个局部最小值,它找到哪一个取决于初始化。您可以使用findpeaks(z) 的输出找到好的起点。
    • @CrisLuengo 是的,我明白了.. 我对所有组合 [1, 1], [1, -1], [-1, 1], [-1, -1] 都做到了最大值和最小值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2018-05-03
    • 2012-09-16
    • 2021-09-15
    相关资源
    最近更新 更多