【问题标题】:Local Minimum in MATLAB?MATLAB中的局部最小值?
【发布时间】:2014-04-30 06:26:27
【问题描述】:

我只是想在 MATLAB 中找到一个简单函数的确切最小值。我一直在尝试使用“fminbnd”等内置函数和内联函数定义,但我认为我不太清楚自己在做什么。

我的代码如下。我想找到 Error 的最小值的 x 和 y。

clear all

A = 5;
tau = linspace(1,4,500); %Array of many tau values between 1 and 4
E1 = qfunc(((-tau) + 5) /(sqrt(2.5)));
E0 = qfunc((tau)/(sqrt(2.5))); 
Error = 0.5*E0 + 0.5*E1;

figure
subplot (311), plot(tau, E0);
xlabel('Threshold (Tau)'), ylabel('E0')
title('Error vs. Threshold (E0, 1 <= T <= 4)')
subplot (312), plot(tau, E1);
xlabel('Threshold (Tau)'), ylabel('E1')
title('Error vs. Threshold (E1, 1 <= T <= 4)')
subplot (313), plot(tau, Error);
xlabel('Threshold (Tau)'), ylabel('Pr[Error]');
title('Error vs. Threshold (Pr[Error], 1 <= T <= 4)')

我的意思是,我可以在绘制函数以接近时使用光标(虽然不在它发生的点(阈值 = 2.5),但必须有一种方法可以将数字打印到窗口。到目前为止,我已经尝试过:

fminbnd('Error', 'E0', 'E1')

还有许多其他变体。还尝试使用匿名和内联函数定义,但没有成功。

谁能指出我正确的方向?被这个简单的问题困住感到很愚蠢......非常感谢任何帮助!

【问题讨论】:

    标签: matlab minimum


    【解决方案1】:

    fminbnd

    你应该试试这样的:

    Error =@(tau) 0.5*qfunc(((-tau) + 5) /(sqrt(2.5))) + 0.5*qfunc((tau)/(sqrt(2.5)));
    x = fminbnd(Error,0,10)
    

    fminbnd(f,x1,x2) 的第一个参数是函数,其他参数是边界。我做了 f=Error,x1=0 和 x2=10。

    输出:

    x=2.5000

    另一种方法是将错误函数保存在 .m 文件中。请参阅上面的网页。

    【讨论】:

      【解决方案2】:

      我不明白您为什么使用 E0 和 E1 作为应找到最小值的范围的限制。还是我误解了您的代码中的某些内容?

      也许如果你的函数是一个离散的样本集合(正如你构造它的方式所暗示的那样,我认为错误将是一个矩阵),你可以使用“min”命令:http://www.mathworks.es/es/help/matlab/ref/min.html

      希望这有帮助!

      【讨论】:

        猜你喜欢
        • 2017-06-08
        • 1970-01-01
        • 2017-01-04
        • 2014-12-15
        • 2019-04-17
        • 2018-01-11
        • 1970-01-01
        • 2014-07-03
        • 1970-01-01
        相关资源
        最近更新 更多