查看: 2394  |  回复: 11

清晨清晨

银虫 (初入文坛)

[求助] 好心虫友,帮忙看看这个matlab程序那里出错了 已有1人参与

用matlab拟合数据,进行NRTL模型拟合:我编写了如下的程序,一直出错,麻烦有懂的虫友帮忙看看,怎么改错??
(一)定义.m文件。
function g4=f(beta0,x1,x2,T,R)
g1=beta0(1);
g2=beta0(2);
g3=beta0(3);
g4=beta0(4);
g4=x2.*x2.*((((g(1)./(R.*T)).*(exp(-g(3).*g(1)./(R.*T))).^2)./((x1+(exp(-g(3).*g(1)./(R.*T))).*x2).^2))+(((g(2)./(R.*T)).*(exp(-g(3).*g(2)./(R.*T))).^2)./((x2+(exp(-g(3).*g(2)./(R.*T))).*x1).^2)))
(二)编写程序。
x1=[0.01525        0.02059        0.02685        0.03417        0.04221        0.04958];
x2=[0.98475        0.97941        0.97315        0.96583        0.95779        0.95042];
T=[298.15        303.15        308.15        313.15        318.15        323.15];
R=[8.314 8.314 8.314 8.314 8.314 8.314];
beta0=[0,0,0,0];
[g,resnorm]=lsqcurvefit(@f,beta0,x1,x2,T,R)
运行后出错:
Warning: Length of lower bounds is > length(x); ignoring extra bounds.
> In checkbounds at 27
  In optim\private\lsqncommon at 39
  In lsqcurvefit at 149
  In Untitled2 at 6
Warning: Length of upper bounds is > length(x); ignoring extra bounds.
> In checkbounds at 37
  In optim\private\lsqncommon at 39
  In lsqcurvefit at 149
  In Untitled2 at 6
Exiting due to infeasibility:  4 lower bounds exceed the corresponding upper bounds.

g =

     0     0     0     0


resnorm =

     []
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

somomo91

专家顾问 (职业作家)

【答案】应助回帖

★
感谢参与,应助指数 +1
jjdg: 金币+1, 感谢参与 2017-09-28 23:50:04
这里的 beta0 有4个元素,但是 上下边界 有 6个元素,所以会出错
beta0 元素的个数应该和 R,T 一致。
CODE:
lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

但即使beta0 有6个0,你会看到结果应该还不对。
没看方程,没法确定到底你的程序哪里出错
2楼2017-07-09 17:29:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

清晨清晨

银虫 (初入文坛)

引用回帖:
2楼: Originally posted by somomo91 at 2017-07-09 17:29:24
这里的 beta0 有4个元素,但是 上下边界 有 6个元素,所以会出错
beta0 元素的个数应该和 R,T 一致。
lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

但即使beta0 有6个0,你会看到结果应该还不对。
没看方程,没法 ...

这个是需要拟合的公式,只需要求4个变量,所以我beta0只给了4个值
好心虫友,帮忙看看这个matlab程序那里出错了
IMG_20170709_174704.jpg

3楼2017-07-09 17:49:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

清晨清晨

银虫 (初入文坛)

引用回帖:
2楼: Originally posted by somomo91 at 2017-07-09 17:29:24
这里的 beta0 有4个元素,但是 上下边界 有 6个元素,所以会出错
beta0 元素的个数应该和 R,T 一致。
lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

但即使beta0 有6个0,你会看到结果应该还不对。
没看方程,没法 ...

这个是需要拟合的公式,只需要求4个变量,所以我beta0只给了4个值
好心虫友,帮忙看看这个matlab程序那里出错了-1
IMG_20170709_174704.jpg

4楼2017-07-09 17:49:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

【答案】应助回帖

★
jjdg: 金币+1, 感谢参与 2017-09-28 23:50:16
方程里面有 ln(gamma1),所以你的程序,正确的应该是 g4 = exp(x2.*x2.* ......)
其次,tau12 和 tau21 的值应该不是零吧,但你的程序里面 设定 tau12 = tau21 = 0
这也是为什么 即使没有边界错误,输出为零的原因
5楼2017-07-09 18:04:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
清晨清晨: 金币+30, ★★★很有帮助 2017-07-09 18:45:49
最后是 alpha12 和 alpha21 的值,根据文献应该在 0.20-0.47 之间。
程序里面全为零,
6楼2017-07-09 18:07:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

清晨清晨

银虫 (初入文坛)

引用回帖:
6楼: Originally posted by somomo91 at 2017-07-09 18:07:54
最后是 alpha12 和 alpha21 的值,根据文献应该在 0.20-0.47 之间。
程序里面全为零,

那我初始值就定义4个可以吗?我按照你说的改了程序,把初始值改为【1,1,0.3,1】不再为0,结果出来后就是Warning: Length of lower bounds is > length(x); ignoring extra bounds.
> In checkbounds at 27
  In optim\private\lsqncommon at 39
  In lsqcurvefit at 149
  In Untitled2 at 6
Warning: Length of upper bounds is > length(x); ignoring extra bounds.
> In checkbounds at 37
  In optim\private\lsqncommon at 39
  In lsqcurvefit at 149
  In Untitled2 at 6
Exiting due to infeasibility:  4 lower bounds exceed the corresponding upper bounds.

g =

    1.0000    1.0000    0.3000    1.0000


resnorm =

     []
就是我定义的值,我也把公式做了改变的g4=exp(x2.*x2.*((((g(1)./(R.*T)).........)
7楼2017-07-09 18:40:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

清晨清晨

银虫 (初入文坛)

我再把我现在的程序发一遍完整的,这样子不会乱。
m文件:
function g4=f(beta0,x1,x2,T,R)
g1=beta0(1);
g2=beta0(2);
g3=beta0(3);
g4=beta0(4);
g4=exp(x2.*x2.*((((g(1)./(R.*T)).*(exp(-g(3).*g(1)./(R.*T))).^2)./((x1+(exp(-g(3).*g(1)./(R.*T))).*x2).^2))+(((g(2)./(R.*T)).*(exp(-g(3).*g(2)./(R.*T))).^2)./((x2+(exp(-g(3).*g(2)./(R.*T))).*x1).^2))))
程序代码:
x1=[0.01525        0.02059        0.02685        0.03417        0.04221        0.04958];
x2=[0.98475        0.97941        0.97315        0.96583        0.95779        0.95042];
T=[298.15        303.15        308.15        313.15        318.15        323.15];
R=[8.314 8.314 8.314 8.314 8.314 8.314];
beta0=[1,1,0.3,1];
[g,resnorm]=lsqcurvefit(@f,beta0,x1,x2,T,R)
运行后输出:
Warning: Length of lower bounds is > length(x); ignoring extra bounds.
> In checkbounds at 27
  In optim\private\lsqncommon at 39
  In lsqcurvefit at 149
  In Untitled2 at 6
Warning: Length of upper bounds is > length(x); ignoring extra bounds.
> In checkbounds at 37
  In optim\private\lsqncommon at 39
  In lsqcurvefit at 149
  In Untitled2 at 6
Exiting due to infeasibility:  4 lower bounds exceed the corresponding upper bounds.

g =

    1.0000    1.0000    0.3000    1.0000


resnorm =

     []
就是初始值定义什么就出什么。
或者这个应该怎么写呢?
8楼2017-07-09 18:53:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

somomo91

专家顾问 (职业作家)

★
jjdg: 金币+1, 感谢参与 2017-09-28 23:50:39
你的程序里, T, R  相当于lsqcurvefit 里面的 下边界,和 上边界。
也就是说,g 的值是 在 [T, R] 之间,看图片里,似乎不妥吧,
9楼2017-07-09 20:41:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

清晨清晨

银虫 (初入文坛)

引用回帖:
9楼: Originally posted by somomo91 at 2017-07-09 20:41:12
你的程序里, T, R  相当于lsqcurvefit 里面的 下边界,和 上边界。
也就是说,g 的值是 在  之间,看图片里,似乎不妥吧,

恩恩,谢谢。我再学习一下看看,不是很懂
10楼2017-07-09 22:47:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 清晨清晨 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 极限拉扯,如何抉择 +11 Isak0320 2026-10-12 15/750 2026-10-14 21:55 by 猫鱼不是鱼
[基金申请] 申请科研项目纯靠实力能成功吗? 200+5 David1982 2026-10-13 8/400 2026-10-14 21:38 by lhw_GPA4.0
[硕博家园] 中科院海洋所招收海洋材料相关领域博士研究生及研究助理 +3 sujiner 2026-10-08 4/200 2026-10-14 20:40 by qicaiyun
[职场人生] 40+中年人失业后,还能找到好工作吗? +3 xqy2009 2026-10-13 3/150 2026-10-14 20:17 by 43358052
[论文投稿] 二审4个多月了还是Awaiting Reviewer Scores 10+3 纳斯达克ML 2026-10-11 4/200 2026-10-14 17:30 by babero
[教师之家] 课题组会帮你通过考核么? +4 好运来~9527 2026-10-10 7/350 2026-10-13 08:41 by xli1984
[基金申请] 入职后第一次管课题组的专利缴费,对账才发现官费比别人多掏了一倍 +6 13108017953 2026-10-08 6/300 2026-10-12 20:07 by w3w3y3
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见