MATLAB中的局部最小值?

时间:2014-03-22 20:40:56

标签: matlab minimum

我只是想在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')

还有很多其他变种。还尝试使用匿名和内联函数定义而没有运气。

有人能指出我正确的方向吗?因为遇到这个简单的问题而感到愚蠢......任何帮助都非常感激!

2 个答案:

答案 0 :(得分:0)

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

也许如果你把你的函数作为一个离散的样本集合(从你构造它的方式看起来暗示,错误将成为一个矩阵,我想),你可以使用“min”命令:{{3 }}

希望这有帮助!

答案 1 :(得分:0)

请参阅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 =错误,x1 = 0和x2 = 10.

<强>输出:

X = 2.5000

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