matlab解非线性最小二乘问题
我有如下方程,需用非线性最小二乘求解最优解,我用的是lsqnonlin,但是不管怎么迭代,都得不到最优解,运行结果在最下面。(最优解为:-0.0123,-0.5313,-0.0275,0.0032,0.0025)谁能帮我看看问题出在哪了吗?function f = fun12(a);
fa1 =@(x)x.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
fa2 =@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
FA1 =quadl(fa1,-3,3);
FA2 =0.0472*quadl(fa2,-3,3)
f1 =1-FA1/FA2;
fb1 =@(x)x.^2.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
fb2 =@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
FB1 =quadl(fb1,-3,3);
FB2 =0.9442*quadl(fb2,-3,3)
f2 =1-FB1/FB2;
fc1 =@(x)x.^3.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
fc2 =@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
FC1 =quadl(fc1,-3,3);
FC2 =(-0.1419)*quadl(fc2,-3,3);
f3 =1-FC1/FC2;
fd1=@(x)x.^4.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
fd2 =@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
FD1 =quadl(fd1,-3,3);
FD2 = 2.5563*quadl(fd2,-3,3)
f4 =1-FD1/FD2;
fe1=@(x)x.^5.*exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
fe2 =@(x)exp(a(1).*x+a(2).*x.^2+a(3).*x.^3+a(4).*x.^4+a(5).*x.^5);
FE1 =quadl(fe1,-3,3);
FE2 = 0.5687*quadl(fe2,-3,3)
f5 =1-FE1/FE2;
f =;
主程序如下:
a0 =
options = optimset('Display','iter','MaxFunEvals',3000,'MaxIter',1000,'TolFun',1e-20);
= lsqnonlin(@fun12,a0,[],[],options)
a =
1.2477 -0.3031 -0.9806 -0.0841 0.1289
fval =
1.0e-014 *
0.2887
0.0333
-0.4885
0.0111
0.4552
两种可能
一、不知道你说的最优解是从哪里得来的?可信度怎么样?
二、非线性规划一般来说都只能找到局部最优解,所以计算的到的是局部最优解,这个一般需要调整优化参数的控制范围以及初始值来实现 试试1stOpt,优化拟合功能非常强劲,比Matlab的优化拟合函数好用的多。 回复 2 # happy 的帖子
这是从别人那里找来的,经过验证,解事最优解,我需要用这种方法解决别的问题,先那这个试试效果 回复 3 # dingd 的帖子
谢谢,这个软件试过,没有高版本的,解决不了复杂的非线性问题, 本帖最后由 rocwoods 于 2010-12-7 09:35 编辑
楼主,是你亲自试过那个所谓的最优解吗?你怎么试的,结果如何?还有MATLAB的结果你没有验证一下,就这么肯定不对?
>> a00 = [-0.0123 -0.5313 -0.0275 0.0032 0.0025];%你给的所谓最优解
>> sum(fun12(a00).^2)
ans =
10.9704
>> sum(fun12(a).^2) %MATLAB解出的解
ans =
3.6793e-023
现在我们已经不是中小学生,有自己的判别能力,这样明显的笑话问题,lz以后还是要慎重一些啊 没错, 这小地方的判别, 时常被忽略掉:@L
以后真的不可不慎重些
谢谢roc的小心谨慎 回复 6 # rocwoods 的帖子
谢谢,我求解的是一个最大熵模型,是用来模拟概率分布的,我求解的例子是服从正态分布的,用给出的解的模拟效果非常好 本帖最后由 rocwoods 于 2010-12-8 09:11 编辑
你给出的最优解带入你的目标函数,各分量的平方和为10.9704,而MATLAB得到解带入你给出的目标函数,各分量平方和为3.6793*10^-23,根据非线性最小二乘的定义,孰优孰劣一目了然。如果你非说“用给出的解的模拟效果非常好 ”,在认为你给出的解是正确的情况下,只能认为你的目标函数列错了,再仔细检查检查。
页:
[1]