24小时热门版块排行榜    

查看: 3765  |  回复: 7
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

zoe070721

银虫 (小有名气)

[求助] 用lsqnonlin拟合已知活度系数模型,残差大,无法获得最优解,请大神看看代码的问题! 已有2人参与

求助各位大神!!!
       小虫妹在拟合已知NRTL模型时(如图片),用matlab中最小二乘法来拟合实验数据,以求得模型中的两个参数△g12,△g21,目标方程设为OF。
编入的代码如下,运行之后,输出如下,感觉残差值比较大,拟合值好像是局部最优解,而不是全局最优; 改变初始值,对参数值的影响也很大,
初始值的设置也是个难题。
       请大神看看,问题该如何解决???

       另求版内大神是否有高版本1stOp能否代跑一下,给出个初值或者最优解,小虫妹不胜感激,可追加金币!!!

function OF=ObjFunBinary(x)   %目标函数
format long
T=[278.15,283.15,288.15,293.15,298.15,303.15,308.15,313.15,318.15];
x1=[0.01217,0.01457,0.01704,0.02085,0.02337,0.02707,0.03041,0.03377,0.03766];

x2=1-x1;
R=8.3145;
H=19.76;
Tm=454.8;
gamma_exp=exp(H/R*(1/Tm-1./T))./x1;
a=x(1);g1=x(2);g2=x(3);%x(1)根据文献一般取0.2、0.3或者0.47
t12=g1./(R*T);
t21=g2./(R*T);
G12=exp(-a.*t12);
G21=exp(-a.*t21);
lngama1=x2.^2.*(t21.*G21.^2./(x1+x2.*G21).^2+t12.*G12./(x2+x1.*G12).^2);
gamma_cal=exp(lngama1);
OF=gamma_cal-gamma_exp;

beta0 = [0.31 2000 8000];  %参数初始值
options.Algorithm = 'levenberg-marquardt';
[beta,resnorm,residual,exitflag,output]=lsqnonlin(@ObjFunBinarynew,beta0,[],[],options)


输出的结果是

Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.

<stopping criteria details>


beta =

   1.0e+04 *

   0.000044925534703   1.158249518250641   1.085523151964263


resnorm =

   3.233501964174955


residual =

  Columns 1 through 7

  -0.835682305165847   0.375853525304237   0.641305366330478   0.765737066136275   0.366439803004162   0.007880991932048  -0.337551041065019

  Columns 8 through 9

  -0.624403280363090  -0.870680738315109


exitflag =

     3


output =

       iterations: 37
        funcCount: 168
         stepsize: 23.651354916984875
     cgiterations: []
    firstorderopt: 0.093957635054323
        algorithm: 'levenberg-marquardt'
          message: 'Local minimum possible.

lsqnonlin stopped because the final change in the sum of squares relative to
its initial value...'

用lsqnonlin拟合已知活度系数模型,残差大,无法获得最优解,请大神看看代码的问题!
1305562_1333620757_902.jpg
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zoe070721

银虫 (小有名气)

自己顶一下,求大神帮帮忙
4楼2017-06-06 10:04:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 8 个回答

cxsysss

银虫 (小有名气)

我使用过isqnonlin这个函数,不过没用过1stop,可以尝试一下,如果你时间不是很急的话

发自小木虫Android客户端
珍惜时间
2楼2017-06-05 08:52:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zoe070721

银虫 (小有名气)

引用回帖:
2楼: Originally posted by cxsysss at 2017-06-05 08:52:39
我使用过isqnonlin这个函数,不过没用过1stop,可以尝试一下,如果你时间不是很急的话

非常感谢,可以试一下
3楼2017-06-05 09:12:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yz457694

铁杆木虫 (正式写手)

试着调options,也可以自己构造目标函数(最小二乘),然后用单纯形法实现,参考matlab里面的fminsearch函数帮助

发自小木虫Android客户端

» 本帖已获得的红花(最新10朵)

5楼2017-06-12 12:58:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见