24小时热门版块排行榜    

查看: 318  |  回复: 1
当前主题已经存档。

水月庵男主持

银虫 (小有名气)

[交流] 【求助】matlab非线性拟合模型参数

我是菜鸟,算个模型参数,
lny=-0.3915*[m1/2/(1+1.2*m1/2)+1.6667*ln(1+1.2m1/2)]+2*c(1)m+ 0.5*c(2) [1-(1+2*m1/2-2*m)exp(-2*m1/2)] +c(3)*m2

我写的计算程序
function f=Pitzer(c,mdata)
f=(-0.3915).*(mdata.^0.5./(1+1.2.*mdata.^0.5)+1.66667.*log(1+1.2.*mdata.^0.5))+2.*c(1).*mdata+0.5.*c(2).*(1-(1+2.*mdata.^0.5-2.*mdata).*exp(-2.*mdata.^0.5))+c(3).*mdata.^2;
mdata=[0.0855 0.0879 0.1001 0.1051 0.1273 0.1398 0.1729];
ydata=[-0.2731 -0.2640 -0.2917 -0.2837 0.3202 -0.3369 -0.3411];
c0=[1 1 1];
for i=1:100000
c=lsqcurvefit('Pitzer',c0,mdata,ydata);
c0=c;
end
c
答案应该是-0.0224 0.1749 0.0020  可是我的出来的是 107.1222 -147.8175 -365.6594
请高手指点下,可能公式表达出现了问题,非常感谢!!!

[ Last edited by sunxiao on 2009-3-9 at 08:29 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hitzhang

木虫 (正式写手)

★ ★ ★
sunxiao(金币+3,VIP+0):欢迎参与讨论,金币奖励 2-26 12:46
你要拟合的这个方程
lny=-0.3915*[m1/2/(1+1.2*m1/2)+1.6667*ln(1+1.2m1/2)]+2*c(1)m+ 0.5*c(2) [1-(1+2*m1/2-2*m)exp(-2*m1/2)] +c(3)*m2
可以看作线性回归,因为c分别是后3项前面的系数,第一项和c无关。可以这样得到c的最优解:

>> mdata=[0.0855 0.0879 0.1001 0.1051 0.1273 0.1398 0.1729]';
>> ydata=[-0.2731 -0.2640 -0.2917 -0.2837 0.3202 -0.3369 -0.3411]';
>> f=[(-0.3915).*(mdata.^0.5./(1+1.2.*mdata.^0.5)+1.66667.*log(1+1.2.*mdata.^0.5)) 2.*mdata 0.5.*(1-(1+2.*mdata.^0.5-2.*mdata).*exp(-2.*mdata.^0.5)) mdata.^2]

f =

   -0.2810    0.1710    0.1061    0.0073
   -0.2842    0.1758    0.1084    0.0077
   -0.2998    0.2002    0.1196    0.0100
   -0.3058    0.2102    0.1240    0.0110
   -0.3303    0.2546    0.1426    0.0162
   -0.3429    0.2796    0.1525    0.0195
   -0.3727    0.3458    0.1766    0.0299

>> c=f(:,2:4)\(ydata-f(:,1))

c =

  107.8023
-148.7613
-367.9816

>> 事实证明你得到的结果是正确的!是数据错了还是方程错了我就不了了~~
2楼2009-02-26 12:24:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 水月庵男主持 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见