24小时热门版块排行榜    

CyRhmU.jpeg
查看: 928  |  回复: 5

greetrunners

金虫 (著名写手)

[求助] MATLAB, 代码错误,请大侠帮忙看看。

[t12 t21 t13 t31 t23 t32]=lsqnonlin(@lsqfun3,1,1,1,1,1,1)
Undefined function or variable 'a2'.

Error in lsqfun3 (line 8)
k1=(a2.^2*t21*exp(-0.3*t21)*exp(-0.3*t21)+a3.^2*t31*exp(-0.3*t31)*exp(-0.3*t31)+a2.*a3*exp(-0.3*t21)*exp(-0.3*t31)*(t21+t31))./((a1+a2.*exp(-0.3*t21)+a3*exp(-0.3*t31)).^2);

Error in lsqnonlin (line 197)
            initVals.F = feval(funfcn{3},xCurrent,varargin{:});

Caused by:
    Failure in initial user-supplied objective function evaluation. LSQNONLIN cannot continue.


为了减少输出的参数,编写以下函数,出现了上述问题。
function obj=lsqfun3(t12,t21,t13,t31,t23,t32)
%t12,t21,t13,t31,t23,t32,是所需要关联的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;
k1=(a2.^2*t21*exp(-0.3*t21)*exp(-0.3*t21)+a3.^2*t31*exp(-0.3*t31)*exp(-0.3*t31)+a2.*a3*exp(-0.3*t21)*exp(-0.3*t31)*(t21+t31))./((a1+a2.*exp(-0.3*t21)+a3*exp(-0.3*t31)).^2);
k2=(a2.^2*t12*exp(-0.3*t12)+a2.*a3*exp(-0.3*t12)*exp(-0.3*t32)*(t12-t32))./((a1*exp(-0.3*t12)+a2+a3*exp(-0.3*t32)).^2);
k3=(a3.^2*t13*exp(-0.3*t13)+a2.*a3*exp(-0.3*t13)*exp(-0.3*t23)*(t13-t23))./((a1*exp(-0.3*t13)+a2*exp(-0.3*t23)+a3).^2);
k4=(a1.^2*t21*exp(-0.3*t21)+a1.*a3*exp(-0.3*t21)*exp(-0.3*t31)*(t21-t31))./((a1+a2*exp(-0.3*t21)+a3*exp(-0.3*t31)).^2);
k5=(a1.^2*t12*exp(-0.3*t12)^2+a3.^2*t32*exp(-0.3*t32)^2+a1.*a3*exp(-0.3*t12)*exp(-0.3*t32)*(t12+t32))./((a1*exp(-0.3*t12)+a2+a3*exp(-0.3*t32)).^2);
k6=(a3.^2*t23*exp(-0.3*t23)+a1.*a3*exp(-0.3*t13)*exp(-0.3*t23)*(t23-t13))./((a1*exp(-0.3*t13)+a2*exp(-0.3*t23)+a3).^2);
k7=(a1.^2*t31*exp(-0.3*t31)+a1.*a2*exp(-0.3*t21)*exp(-0.3*t31)*(t31-t21))./((a1+a2*exp(-0.3*t21)+a3*exp(-0.3*t31)).^2);
k8=(a2.^2*t32*exp(-0.3*t32)^2+a1.*a2*exp(-0.3*t12)*exp(-0.3*t32)*(t32-t12))./((a1*exp(-0.3*t12)+a2+a3*exp(-0.3*t32)).^2);
k9=(a1.^2*t13*exp(-0.3*t13)^2+a2.^2*t23*exp(-0.3*t23)^2+a1.*a2*exp(-0.3*t13)*exp(-0.3*t23)*(t13+t23))./((a1*exp(-0.3*t13)+a2*exp(-0.3*t23)+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];
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

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

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
greetrunners: 金币+10, ★★★很有帮助, 谢谢 2013-01-31 09:39:29
xzhdty: 金币+1, 谢谢骠骑将军 2013-01-31 11:08:38
function obj=lsqfun3(t12,t21,t13,t31,t23,t32)
%t12,t21,t13,t31,t23,t32,是所需要关联的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;
k1=(a2.^2*t21*exp(-0.3*t21)*exp(-0.3*t21)+a3.^2*t31*exp(-0.3*t31)*exp(-0.3*t31)+a2.*a3*exp(-0.3*t21)

===============
函数中a2,a3没定义啊,怎么就开始用了
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2013-01-30 17:17:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

greetrunners

金虫 (著名写手)

引用回帖:
2楼: Originally posted by libralibra at 2013-01-30 17:17:00
function obj=lsqfun3(t12,t21,t13,t31,t23,t32)
%t12,t21,t13,t31,t23,t32,是所需要关联的NRTL方程参数;
%a1,a2,a3,是组分1,2,3,液相平衡数据;
%y1,y2,y3,是组分1,2,3,气相平衡数据;
%ps1,ps2,ps3,是 ...

应该如何定义?
努力!努力!努力!
3楼2013-01-30 19:08:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

引用回帖:
3楼: Originally posted by greetrunners at 2013-01-30 19:08:17
应该如何定义?...

这...你自己知道吧?
起码函数的定义应该是

function ret_value = foo(input_value)
param1 = ...
param2 = ...
% then use param1 and param2 to calculate the others
...
end

你得先定义参数,然后使用,你的函数前面几行看着写的挺清楚,可是那是注释,你没有定义a2,a3....几乎所有要用的参数
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2013-01-30 20:43:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

greetrunners

金虫 (著名写手)

引用回帖:
2楼: Originally posted by libralibra at 2013-01-30 17:17:00
function obj=lsqfun3(t12,t21,t13,t31,t23,t32)
%t12,t21,t13,t31,t23,t32,是所需要关联的NRTL方程参数;
%a1,a2,a3,是组分1,2,3,液相平衡数据;
%y1,y2,y3,是组分1,2,3,气相平衡数据;
%ps1,ps2,ps3,是 ...

可以帮我修改一下吗?
努力!努力!努力!
5楼2013-01-31 12:14:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

greetrunners

金虫 (著名写手)

引用回帖:
2楼: Originally posted by libralibra at 2013-01-30 17:17:00
function obj=lsqfun3(t12,t21,t13,t31,t23,t32)
%t12,t21,t13,t31,t23,t32,是所需要关联的NRTL方程参数;
%a1,a2,a3,是组分1,2,3,液相平衡数据;
%y1,y2,y3,是组分1,2,3,气相平衡数据;
%ps1,ps2,ps3,是 ...

就是NRTL方程参数关联,k1,k2,---k9,是方程拆开的部分,
努力!努力!努力!
6楼2013-01-31 12:15:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 greetrunners 的主题更新
信息提示
请填处理意见