24小时热门版块排行榜    

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

mushixilin

铜虫 (初入文坛)

[求助] 如何使用1stOpt进行三自变量三因变量的非线性拟合 已有2人参与

正在学习使用1stOpt,见到的示例都是只有单个因变量的非线性拟合。想要使用1stopt对三元液液相平衡的NRTL热力学数据进行拟合,由于出现三个因变量,不太确定如何编程。编写的程序如下,如不使用sharedmodel,可以得到结果,但不理想;如使用sharedmodel,软件无法计算。还望前辈可以给予一定指导。

Title "NRTL simulation";
//sharedmodel;
Parameters alpha[0,1],tau12,tau13,tau21,tau23,tau31,tau32;
Variables x1,x2,x3,y1,y2,y3;

ConstStr F12=exp(-alpha*tau12);
ConstStr F13=exp(-alpha*tau13);
ConstStr F21=exp(-alpha*tau21);
ConstStr F23=exp(-alpha*tau23);
ConstStr F31=exp(-alpha*tau31);
ConstStr F32=exp(-alpha*tau32);

ConstStr lngammax1=(x1*0*1+x2*tau21*F21+x3*tau31*F31)/(x1*1+x2*F21+x3*F31)+
         (x1*1/(x1*1+x2*F21+x3*F31)*(0-(x1*0*1+x2*tau21*F21+x3*tau31*F31)/(x1*1+x2*F21+x3*F31)))+
         (x2*F12/(x1*F12+x2*1+x3*F32)*(tau12-(x1*tau12*F12+x2*0*1+x3*tau32*F32)/(x1*F12+x2*0+x3*F32)))+
         (x3*F13/(x1*F12+x2*F23+x3*1)*(tau13-(x1*tau13*F13+x2*tau23*F23+x3*0*1)/(x1*F13+x2*F23+x3*1)));
ConstStr lngammax2=(x1*tau12*F12+x2*0*1+x3*tau32*F32)/(x1*F12+x2*0+x3*F32)+
         (x1*F21/(x1*1+x2*F21+x3*F31)*(tau21-(x1*0*1+x2*tau21*F21+x3*tau31*F31)/(x1*1+x2*F21+x3*F31)))+
         (x2*1/(x1*F12+x2*1+x3*F32)*(0-(x1*tau12*F12+x2*0*1+x3*tau32*F32)/(x1*F12+x2*0+x3*F32)))+
         (x3*F23/(x1*F12+x2*F23+x3*1)*(tau23-(x1*tau13*F13+x2*tau23*F23+x3*0*1)/(x1*F13+x2*F23+x3*1)));
ConstStr lngammax3=(x1*tau13*F13+x2*tau23*F23+x3*0*1)/(x1*F13+x2*F23+x3*1)+
         (x1*F31/(x1*1+x2*F21+x3*F31)*(tau31-(x1*0*1+x2*tau21*F21+x3*tau31*F31)/(x1*1+x2*F21+x3*F31)))+
         (x2*F32/(x1*F12+x2*1+x3*F32)*(tau32-(x1*tau12*F12+x2*0*1+x3*tau32*F32)/(x1*F12+x2*0+x3*F32)))+
         (x3*1/(x1*F12+x2*F23+x3*1)*(0-(x1*tau13*F13+x2*tau23*F23+x3*0*1)/(x1*F13+x2*F23+x3*1)));
         
ConstStr gammax1=exp(lngammax1);
ConstStr gammax2=exp(lngammax2);
ConstStr gammax3=exp(lngammax3);

ConstStr lngammay1=(y1*0*1+y2*tau21*F21+y3*tau31*F31)/(y1*1+y2*F21+y3*F31)+
         (y1*1/(y1*1+y2*F21+y3*F31)*(0-(y1*0*1+y2*tau21*F21+y3*tau31*F31)/(y1*1+y2*F21+y3*F31)))+
         (y2*F12/(y1*F12+y2*1+y3*F32)*(tau12-(y1*tau12*F12+y2*0*1+y3*tau32*F32)/(y1*F12+y2*0+y3*F32)))+
         (y3*F13/(y1*F12+y2*F23+y3*1)*(tau13-(y1*tau13*F13+y2*tau23*F23+y3*0*1)/(y1*F13+y2*F23+y3*1)));
ConstStr lngammay2=(y1*tau12*F12+y2*0*1+y3*tau32*F32)/(y1*F12+y2*0+y3*F32)+
         (y1*F21/(y1*1+y2*F21+y3*F31)*(tau21-(y1*0*1+y2*tau21*F21+y3*tau31*F31)/(y1*1+y2*F21+y3*F31)))+
         (y2*1/(y1*F12+y2*1+y3*F32)*(0-(y1*tau12*F12+y2*0*1+y3*tau32*F32)/(y1*F12+y2*0+y3*F32)))+
         (y3*F23/(y1*F12+y2*F23+y3*1)*(tau23-(y1*tau13*F13+y2*tau23*F23+y3*0*1)/(y1*F13+y2*F23+y3*1)));
ConstStr lngammay3=(y1*tau13*F13+y2*tau23*F23+y3*0*1)/(y1*F13+y2*F23+y3*1)+
         (y1*F31/(y1*1+y2*F21+y3*F31)*(tau31-(y1*0*1+y2*tau21*F21+y3*tau31*F31)/(y1*1+y2*F21+y3*F31)))+
         (y2*F32/(y1*F12+y2*1+y3*F32)*(tau32-(y1*tau12*F12+y2*0*1+y3*tau32*F32)/(y1*F12+y2*0+y3*F32)))+
         (y3*1/(y1*F12+y2*F23+y3*1)*(0-(y1*tau13*F13+y2*tau23*F23+y3*0*1)/(y1*F13+y2*F23+y3*1)));
         
ConstStr gammay1=exp(lngammay1);
ConstStr gammay2=exp(lngammay2);
ConstStr gammay3=exp(lngammay3);

Function y1=x1*gammax1/gammay1;
                y2=x2*gammax2/gammay2;
                y3=x3*gammax3/gammay3;

Data;
0.9561 0.0289 0.0150 0.0010 0.0011 0.9979
0.9101 0.0739 0.0160 0.0013 0.0028 0.9959
0.7982 0.1675 0.0343 0.0010 0.0071 0.9919
0.6980 0.2558 0.0462 0.0026 0.0164 0.9810
0.6461 0.2941 0.0598 0.0018 0.0253 0.9729
0.5686 0.3488 0.0826 0.0011 0.0404 0.9585
0.5194 0.3921 0.0885 0.0037 0.0525 0.9438
0.4919 0.4101 0.0980 0.0045 0.0583 0.9372
0.4664 0.4319 0.1017 0.0079 0.0688 0.9233
0.4497 0.4410 0.1093 0.0111 0.0736 0.9153
0.4374 0.4498 0.1128 0.0125 0.0884 0.8991
0.4189 0.4515 0.1296 0.0186 0.0942 0.8872
回复此楼

» 猜你喜欢

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

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

小灵鱼儿

金虫 (小有名气)

引用回帖:
6楼: Originally posted by mushixilin at 2017-02-18 22:11:33
谢谢前辈解答。
试了试,字符数多但拟合公式简单的sharedmodel问题可以解决,我这个公式确实有点儿复杂,算不了。
之前在用matlab,可惜对初值要求太大,专程学了1stOpt,没想到还是解不了。我再想想办法。...

请问你的问题解决了吗?
不打无准备之战
7楼2017-03-19 17:47:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
mushixilin: 金币+15, ★★★很有帮助 2017-02-18 09:50:46
sharedmodel;可以实现多因子参数共享拟合,1.5的估计不行。

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

2楼2017-02-17 17:15:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mushixilin

铜虫 (初入文坛)

送红花一朵
引用回帖:
2楼: Originally posted by dingd at 2017-02-17 17:15:32
sharedmodel;可以实现多因子参数共享拟合,1.5的估计不行。

谢谢,得到大神的解答。在小木虫上看了很多类似的帖子,有提到1.5不可以使用sharedmodel,也有虫友说lib文件夹可以用,下载后使用了一下,发现1.5可以使用sharedmodel功能,可以计算较为简单的sharedmodel问题。但是对于我这个问题,可能由于代码太长,无法计算,提示如下:Fatal: Line too long (more than 1023 characters),Compile failed, check your program codes please!。
3楼2017-02-17 22:53:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mushixilin

铜虫 (初入文坛)

将代码进行了一定处理,仍然提示Fatal: Line too long (more than 1023 characters),Compile failed, check your program codes please!。是因为最后的公式过于复杂吗?

Title "NRTL simulation";
sharedmodel;
Parameters alpha[0,1],t12,t13,t21,t23,t31,t32;
Variables x1,x2,x3,y1,y2,y3;
ConstStr G12=exp(-alpha*t12),
         G13=exp(-alpha*t13),
         G21=exp(-alpha*t21),
         G23=exp(-alpha*t23),
         G31=exp(-alpha*t31),
         G32=exp(-alpha*t32),
         a=(x2*t21*G21+x3*t31*G31)/(x1+x2*G21+x3*G31),
         b=(x1*t12*G12+x3*t32*G32)/(x1*G12+x2+x3*G32),
         c=(x1*t13*G13+x2*t23*G23)/(x1*G13+x2*G23+x3),
         d=x1/(x1+x2*G21+x3*G31),
         e=x2/(x1*G12+x2+x3*G32),
         f=x3/(x1*G13+x2*G23+x3),
         j=(y2*t21*G21+y3*t31*G31)/(y1+y2*G21+y3*G31),
         k=(y1*t12*G12+y3*t32*G32)/(y1*G12+y2+y3*G32),
         l=(y1*t13*G13+y2*t23*G23)/(y1*G13+y2*G23+y3),
         m=y1/(y1+y2*G21+y3*G31),
         n=y2/(y1*G12+y2+y3*G32),
         o=y3/(y1*G13+y2*G23+y3);
Conststr lngammax1=a-d*a+e*G12*(t12-b)+f*G13*(t13-c),
         lngammax2=b+d*G12*(t21-a)-e*b+f*G23*(t23-c),
         lngammax3=c+d*G31*(t31-a)+e*G32*(t32-b)-f*c,
         lngammay1=j-m*j+n*G12*(t12-k)+o*G13*(t13-l),
         lngammay2=k+m*G12*(t21-j)-n*k+o*G23*(t23-l),
         lngammay3=l+m*G31*(t31-j)+n*G32*(t32-k)-o*l;
Conststr gammax1=exp(lngammax1),
         gammax2=exp(lngammax2),
         gammax3=exp(lngammax3),
         gammay1=exp(lngammay1),
         gammay2=exp(lngammay2),
         gammay3=exp(lngammay3);
Function y1=x1*gammax1/gammay1;
         y2=x2*gammax2/gammay2;
         y3=x3*gammax3/gammay3;
Data;
0.9561 0.0289 0.0150 0.0010 0.0011 0.9979
0.9101 0.0739 0.0160 0.0013 0.0028 0.9959
0.7982 0.1675 0.0343 0.0010 0.0071 0.9919
0.6980 0.2558 0.0462 0.0026 0.0164 0.9810
0.6461 0.2941 0.0598 0.0018 0.0253 0.9729
0.5686 0.3488 0.0826 0.0011 0.0404 0.9585
0.5194 0.3921 0.0885 0.0037 0.0525 0.9438
0.4919 0.4101 0.0980 0.0045 0.0583 0.9372
0.4664 0.4319 0.1017 0.0079 0.0688 0.9233
0.4497 0.4410 0.1093 0.0111 0.0736 0.9153
0.4374 0.4498 0.1128 0.0125 0.0884 0.8991
0.4189 0.4515 0.1296 0.0186 0.0942 0.8872
4楼2017-02-18 16:20:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[教师之家] 跳槽后在研项目怎么办? +5 简单化xn 2026-08-22 10/500 2026-08-23 12:38 by 简单化xn
[基金申请] 什么时候开奖? +9 CrisMessi 2026-08-18 10/500 2026-08-23 12:03 by 丶昵称占用
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 2JOx3r2CYEgw 2026-08-21 9/450 2026-08-23 10:44 by IXZuIJ2Q7OVy
[基金申请] 让我中一个面上吧! +12 大萍1987 2026-08-20 14/700 2026-08-23 10:30 by wrm
[论文投稿] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 2JOx3r2CYEgw 2026-08-22 4/200 2026-08-23 04:04 by OEbVnUOu01ol
[论文投稿] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 2JOx3r2CYEgw 2026-08-22 5/250 2026-08-23 03:52 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 2JOx3r2CYEgw 2026-08-22 6/300 2026-08-23 03:40 by OEbVnUOu01ol
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 QTy3jDtz1uLt 2026-08-21 9/450 2026-08-23 03:04 by OEbVnUOu01ol
[硕博家园] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 QTy3jDtz1uLt 2026-08-21 11/550 2026-08-23 02:55 by OEbVnUOu01ol
[基金申请] 范进中举一文的中心思想 +3 zjuhero 2026-08-22 4/200 2026-08-22 20:02 by mycsru
[基金申请] filecode,4个jtjc了 +13 ziyangfang 2026-08-19 16/800 2026-08-22 17:08 by WH3796
[基金申请] 人气不行了 +8 fansofjerry 2026-08-21 8/400 2026-08-22 16:30 by zyqchem
[基金申请] 时间戳今天,20号变了 +5 archvillain 2026-08-20 5/250 2026-08-22 06:12 by hui_daxiao
[基金申请] 今日不放榜?网传国自然预计 8 月 27 日可查结果 +16 医学老男孩 2026-08-20 20/1000 2026-08-21 21:13 by Ldrop2023
[基金申请] 时间戳又变了 +13 wuchongjun 2026-08-20 19/950 2026-08-21 17:21 by 紫杉醇
[基金申请] 今天放榜没戏了吧 +9 yuleib84 2026-08-19 11/550 2026-08-21 10:06 by gltch
[基金申请] 估计是周四 +3 archvillain 2026-08-18 3/150 2026-08-21 01:48 by jnhyjjm
[基金申请] 今天系统多次维护,明天很可能放榜! +10 zju2000 2026-08-16 11/550 2026-08-20 20:02 by cl479861084
[基金申请] 时间戳变了,能看出什么问题? +18 基诺咪客 2026-08-17 23/1150 2026-08-20 17:19 by Godzela
[基金申请] 重要消息,中午系统在维护 +11 yuleib84 2026-08-18 12/600 2026-08-20 11:09 by xskun
信息提示
请填处理意见