我正在尝试使用 Octave 的 fminsearch 函数,我以前在 MATLAB 中使用过该函数。该功能似乎没有充分记录(至少对我而言),而且我不知道如何设置选项以使其实际上最小化。
我尝试使用此消息末尾的代码拟合一个非常简单的指数函数。我想要以下内容:
我希望函数将 x 和 y 值作为输入,就像 MATLAB 所做的那样。此外,我希望对选项进行一些控制,以确保它实际上最小化(即最小化!)。
当然,最后我想拟合比指数更复杂的函数,但我希望至少能够拟合指数。
我对 fminsearch 有几个问题:
我尝试将 x 值和 y 值交给函数,但是像这样的 matlab 风格的东西:
[xx,fval]=fminsearch(@exponential,[1000 1],x,y);
或者
[xx,fval]=fminsearch(@exponential,[33000 1],options,x,y)
产生错误:
错误:options(6) 不对应于已知算法
错误:调用自:
错误:/opt/local/share/octave/packages/optim-1.0.6/fmins.m 第 72 行第 16 列
错误:/opt/ local/share/octave/packages/optim-1.0.6/fminsearch.m 第 29 行第 4 列或者,分别(对于上面的第二种情况):
错误:第 4 行第 3 列附近的“x”未定义
错误:调用自:
错误:/Users/paul/exponential.m 第 4 行第 2 列
错误:/opt/local/share/octave/packages/optim-1.0.6 /nmsmax.m 第 63 行第 6 列
错误:/opt/local/share/octave/packages/optim-1.0.6/fmins.m 第 77 行第 9 列
错误:/opt/local/share/octave/packages /optim-1.0.6/fminsearch.m 第 29 行第 4 列显然,参数的顺序与
fminsearch
MATLAB 中的不同。那么,这个顺序如何??
我怎样才能使fminsearch
取值和选项?我找到了解决函数不接受值问题的解决方法:我将 x 和 y 值定义为全局值。不优雅,但至少函数中的值可用。
尽管如此,fminsearch
并没有正确地最小化。
如下所示:这是功能:
function f=exponential(coeff) global x global y X=x; Y=y; a= coeff(1); b= coeff(2); Y_fun = a .* exp(-X.*b); DIFF = Y_fun - Y; SQ_DIFF = DIFF.^2; f=sum(SQ_DIFF); end
这是代码:
global x global y x=[0:1:200]; y=4930*exp(-0.0454*x); options(10)=10000000; [cc,fval]=fminsearch(@exponential,[5000 0.01])
这是输出:
抄送 =
4930.0 5184.6
fval = 2.5571e+08
为什么
fminsearch
找不到解决方案?