声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2165|回复: 9

[工具箱] matlab解非线性最小二乘问题

[复制链接]
发表于 2010-12-3 18:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我有如下方程,需用非线性最小二乘求解最优解,我用的是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 =[f1;f2;f3;f4;f5];
主程序如下:
a0 =[1.0077   -0.3031   -0.9806   -0.0841    0.1289]
options = optimset('Display','iter','MaxFunEvals',3000,'MaxIter',1000,'TolFun',1e-20);
[a,resnorm,RESIDUAL] = 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
回复
分享到:

使用道具 举报

发表于 2010-12-4 08:58 | 显示全部楼层
两种可能
一、不知道你说的最优解是从哪里得来的?可信度怎么样?
二、非线性规划一般来说都只能找到局部最优解,所以计算的到的是局部最优解,这个一般需要调整优化参数的控制范围以及初始值来实现
发表于 2010-12-4 23:50 | 显示全部楼层
试试1stOpt,优化拟合功能非常强劲,比Matlab的优化拟合函数好用的多。
 楼主| 发表于 2010-12-7 08:57 | 显示全部楼层
回复 2 # happy 的帖子

这是从别人那里找来的,经过验证,解事最优解,我需要用这种方法解决别的问题,先那这个试试效果
 楼主| 发表于 2010-12-7 08:58 | 显示全部楼层
回复 3 # dingd 的帖子

谢谢,这个软件试过,没有高版本的,解决不了复杂的非线性问题,
发表于 2010-12-7 09:32 | 显示全部楼层
本帖最后由 rocwoods 于 2010-12-7 09:35 编辑

楼主,是你亲自试过那个所谓的最优解吗?你怎么试的,结果如何?还有MATLAB的结果你没有验证一下,就这么肯定不对?

  1. >> a00 = [-0.0123 -0.5313 -0.0275 0.0032 0.0025];%你给的所谓最优解
  2. >> sum(fun12(a00).^2)
  3. ans =
  4.    10.9704
  5. >> sum(fun12(a).^2) %MATLAB解出的解
  6. ans =
  7.   3.6793e-023
复制代码

评分

2

查看全部评分

发表于 2010-12-7 10:47 | 显示全部楼层
现在我们已经不是中小学生,有自己的判别能力,这样明显的笑话问题,lz以后还是要慎重一些啊
发表于 2010-12-7 15:46 | 显示全部楼层
没错, 这小地方的判别, 时常被忽略掉:@L
以后真的不可不慎重些
谢谢roc的小心谨慎
 楼主| 发表于 2010-12-7 22:31 | 显示全部楼层
回复 6 # rocwoods 的帖子

谢谢,我求解的是一个最大熵模型,是用来模拟概率分布的,我求解的例子是服从正态分布的,用给出的解的模拟效果非常好
发表于 2010-12-8 09:10 | 显示全部楼层
本帖最后由 rocwoods 于 2010-12-8 09:11 编辑

你给出的最优解带入你的目标函数,各分量的平方和为10.9704,而MATLAB得到解带入你给出的目标函数,各分量平方和为3.6793*10^-23,根据非线性最小二乘的定义,孰优孰劣一目了然。如果你非说“用给出的解的模拟效果非常好 ”,在认为你给出的解是正确的情况下,只能认为你的目标函数列错了,再仔细检查检查。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-9 11:05 , Processed in 0.166764 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表