24小时热门版块排行榜    

查看: 593  |  回复: 2
当前主题已经存档。
【有奖交流】积极回复本帖子,参与交流,就有机会分得作者 identify 的 8 个金币

identify

银虫 (初入文坛)

[交流] 【求助】: MATLAB中lsqnonlin的应用

请达人给看看:
引用完24组数据后调用函数

beta0=[191.2 6392 41770 60920 -2.902 29640 -0.504 -3559 -1.692 2001];   
[beta,resnorm]=lsqnonlin(@OptObjFunc,beta0,[],[],[],Y,T,Nin,Nout,yco,yco2,yH2)

function f=OptObjFunc(beta,Y,T,Nin,Nout,yco,yco2,yH2)
global K1 K2 Kco Kco2 KH2 jco jco2 jH2 jm jH2O

然后是一系列计算
K1=beta(1)*exp(-beta(3)/(R*T));
...............
是后我写的function f是
f=[Y(1,: )-(Nin.*yco2-W.*K2.*fco2.*(fH2^3).*(1-B2)./((1+Kco.*fco+Kco2.*fco2+KH2.*fH2)^4))./Nout;
     Y(2,: )-W.*(K2.*fco2.*(fH2^3).*(1-B2)./((1+Kco.*fco+Kco2.*fco2+KH2.*fH2)^4)+K1.*fco.*(fH2^2).*(1-B1)./((1+Kco.*fco+Kco2.*fco2+KH2.*fH2)^3))./Nout];

运行时提示的错误是
??? Error using ==> optim\private\lsqncommon
User supplied function ==> OptObjFunc
failed with the following error:

Error using ==> mrdivide
Matrix dimensions must agree.

Error in ==> lsqnonlin at 163
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...

Error in ==> Kinetics_m at 30
[beta,resnorm]=lsqnonlin(@OptObjFunc,beta0,[],[],[],Y,T,Nin,Nout,yco,yco2,yH2)

我实在是不知道该怎么去改了.....

[ Last edited by identify on 2008-5-29 at 10:38 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

allenhero1228

金虫 (小有名气)

★ ★ ★ ★
identify(金币+2,VIP+0):谢谢了,再多给我点意见吧
lei0736(金币+2,VIP+0):谢谢
[beta,resnorm]=lsqnonlin(@OptObjFunc,beta0,[],[],[],Y,T,Nin,Nout,yco,yco2,yH2)
传递给目标函数的参数里面里面是不是少了个W
其次,matlab给你的提示是矩阵维数不对,也就是说进行计算时要有两个矩阵相乘,乘方前面必须有.,否则就不是每个向量里面的元素分别乘方了,你把这该下应该就可以了,还有就是你输入的变量必须维数全部相同
你的function里面是两个目标函数,我不知道这会不会有影响,建议你先弄成一个函数试试
你是做动力学模型的吧,是不是甲醇合成的模型
2楼2008-05-27 09:52:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

identify

银虫 (初入文坛)

恩恩...先感谢了
偶就是做甲醇合成动力学模型...可怜的我能力有限啊...
还望多多指教....
3楼2008-05-28 10:46:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 identify 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见