24小时热门版块排行榜    

查看: 447  |  回复: 2

greetrunners

金虫 (著名写手)

[求助] 这是我编的目标函数MATLAB代码,总是出现错误,请大侠帮忙。

这是我编的目标函数MATLAB代码,总是出现错误,请大侠帮忙。
function obj=lsqfun1(t12,t21,t13,t31,t23,t32)
%t12,t21,t13,t31,t23,t32,是所需要关联的NRTL方程参数;
%G12,G21,G13,G31,G23,G32,也是NRTL方程参数;
%a1,a2,a3,是组分1,2,3,液相平衡数据;
%y1,y2,y3,是组分1,2,3,气相平衡数据;
%ps1,ps2,ps3,是组分1,2,3的饱和蒸汽压;
%p==101.35;
p=101.35;
G12=exp(-0.3*t12);
G21=exp(-0.3*t21);%G21是方程参数
G13=exp(-0.3*t13);
G31=exp(-0.3*t31);
G23=exp(-0.3*t23);
G32=exp(-0.3*t32);
k1=(a2.^2*t21*G21^2+a3.^2*t31*G31^2+a2.*a3*G21*G31*(t21+t31))./((a1+a2.*G21+a3.*G31).^2);
k2=(a2.^2*t12*G12+a2.*a3*G12*G32*(t12-t32))./((a1*G12+a2+a3*G32).^2);
k3=(a3.^2*t13*G13+a2.*a3*G13*G23*(t13-t23))./((a1*G13+a2*G23+a3).^2);
k4=(a1.^2*t21*G21+a1.*a3*G21*G31*(t21-t31))./((a1+a2*G21+a3*G31).^2);
k5=(a1.^2*t12*G12^2+a3.^2*t32*G32^2+a1.*a3*G12*G32*(t12+t32))./((a1*G12+a2+a3*G32).^2);
k6=(a3.^2*t23*G23+a1.*a3*G13*G23*(t23-t13))./((a1*G13+a2*G23+a3).^2);
k7=(a1.^2*t31*G31+a1.*a2*G21*G31*(t31-t21))./((a1+a2*G21+a3*G31).^2);
k8=(a2.^2*t32*G32^2+a1.*a2*G12*G32*(t32-t12))./((a1*G12+a2+a3*G32).^2);
k9=(a1.^2*t13*G13^2+a2.^2*t23*G23^2+a1.*a2*G13*G23*(t13+t23))./((a1*G13+a2*G23+a3).^2);
gama1=exp(k1+k2+k3);
gama2=exp(k4+k5+k6);
gama3=exp(k7+k8+k9);
y1c=ps1.*gama1.*a1./p;
y2c=ps2*gama2*a2./p;
y3c=ps3*gama3*a3./p;
obj=sum(sum((y1c-y1).^2+(y2c-y2).^2+(y3c-y3).^2));

>> y1=[0.8907
0.8924
0.733
0.7731
0.698
0.7778
0.7622
0.7796
0.7934];
>> y2=[0.1082
0.1067
0.6626
0.5623
0.732
0.4326
0.3978
0.3766
0.3473];
>> y3=[0
0
0
0
0
0
0
0
0];
>> a1=[0.8918
0.8933
0.3374
0.4377
0.268
0.5674
0.6022
0.6234
0.6527];
>> a2=[0.10723
0.10649
0.62613
0.53391
0.70928
0.42518
0.39054
0.37007
0.34364];
>> a3=[0.00097
0.00021
0.03647
0.02839
0.02272
0.00742
0.00726
0.00653
0.00366];
[t12 t21 t13 t31 t23 t32]=lsqnonlin(@lsqfun1,[1 1 1 1 1 1])
回复此楼
努力!努力!努力!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
greetrunners: 金币+10, ★★★★★最佳答案, 谢谢你, 2013-01-30 10:18:04
xzhdty: 金币+1, 谢谢骠骑将军 2013-02-01 22:57:59
lsqfun1(t12,t21,t13,t31,t23,t32)
这么定义,需要6个输入参数
lsqnonlin(@lsqfun1,[1 1 1 1 1 1])
这么调用,只输入了一个参数,是个1*6的矩阵

改成这么调用试试
lsqnonlin(@lsqfun1,1,1,1,1,1,1)
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2013-01-29 20:40:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

greetrunners

金虫 (著名写手)

引用回帖:
2楼: Originally posted by libralibra at 2013-01-29 20:40:58
lsqfun1(t12,t21,t13,t31,t23,t32)
这么定义,需要6个输入参数
lsqnonlin(@lsqfun1,)
这么调用,只输入了一个参数,是个1*6的矩阵

改成这么调用试试
lsqnonlin(@lsqfun1,1,1,1,1,1,1)

解决了问题,谢谢你,不过还是算不出来。硕士输出了太多的参数,然后我减少参数,又出现了其他的问题。
努力!努力!努力!
3楼2013-01-30 10:43:58
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 greetrunners 的主题更新
信息提示
请填处理意见