我正在尝试使用Octave的fminsearch函数,这是我以前在MATLAB中使用过的。这个函数似乎没有足够的文档(至少对我来说),而且我不知道如何设置选项,使其实际上最小化。
我试着用这条消息末尾的代码拟合一个非常简单的指数函数。我想要以下几点:
我想要函数以x和y值作为输入,就像MATLAB所做的那样。此外,我希望对这些选项进行一些控制,以确保它实际上最小化(即最小化!)。
当然,最后,我想要拟合比指数更复杂的函数,但我想至少能够拟合指数。
我对fminsearch有几个问题:
或分别(针对上述第二种情况):
错误:在第4行第3列附近未定义的“X”
错误:从以下位置调用:
错误:/Users/paul/指数.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
接受值和选项?
fminsearch
并不能正确地最小化。
如下所示:下面是函数:
函数f=exponential(coeff)全局x全局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);结束
以下是代码:
全局x全局y x=0:1:200;y=4930*exp(-0.0454*x);选项(10)=10000000;cc,fval=fminsearch(@指数,50000.01)
这是输出:
cc =4930.0 5184.6
fval = 2.5571e+08为什么fminsearch
找不到解决方案?
发布于 2012-10-23 04:17:40
无论选项是什么,优化函数fminsearch
总是试图找到最小值。所以如果你发现它没有找到最小值,那是因为它没有找到最小值。
根据您提供的代码,我无法确定哪里出了问题。全球问题的解决方案应该是有效的,而且在这里确实有效,所以你这边的其他东西肯定出问题了。(注:我使用的是MATLAB,而不是八度,所以这两个函数可能略有不同.)
不管怎样,为什么不这样做呢?
function f = exponential(coeff)
x = 0:1:200;
y = 4930*exp(-0.0454*x);
a = coeff(1);
b = coeff(2);
Y_fun = a .* exp(-x.*b);
f = sum((Y_fun-y).^2);
end
或者,如果必须将x
和y
作为外部参数传递,
x = [0:1:200];
y = 4930*exp(-0.0454*x);
[cc,fval] = fminsearch(@(c)exponential(c,x,y),[5000 0.01])
function f = exponential(coeff,x,y)
a = coeff(1);
b = coeff(2);
Y_fun = a .* exp(-x.*b);
f = sum((Y_fun-y).^2);
end
发布于 2013-06-04 09:55:00
在八度锻造包"optim“中有一个fminsearch实现。您可以在它的实现文件中看到,第三个参数总是一个选项向量,第四个参数总是一个梯度向量,所以您的调用,x,y将无法工作。
您还可以在实现中看到它调用fmins实现。
该fmins实现的文档声明:
if options(6)==0 && options(5)==0 - regular simplex
if options(6)==0 && options(5)==1 - right-angled simplex
Comment: the default is set to "right-angled simplex".
this works better for me on a broad range of problems,
although the default in nmsmax is "regular simplex"
我最近遇到的一个问题可以用matlab的fminsearch来解决,但不能用这个八度伪造实现来解决。我必须指定一个选项向量0 1e-3 0 0 0,才能让它使用常规单纯形而不是“直角单纯形”。如果你的系数在尺度上有很大的不同,那么八度默认就没有意义了。
https://stackoverflow.com/questions/13019540
复制相似问题