24小时热门版块排行榜    

查看: 2267  |  回复: 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的回帖
相关版块跳转 我要订阅楼主 清晨清晨 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 5/250 2026-08-08 21:54 by 13586093586
[基金申请] 2026国自然放榜时间 +3 布布和一二 2026-08-08 3/150 2026-08-08 18:15 by Lightingo
[基金申请] 好奇怪的filecode +3 布布和一二 2026-08-08 4/200 2026-08-08 17:46 by zhanghaozhu
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 17:27 by oEVWOejN9taj
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 17:19 by oEVWOejN9taj
[考研] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +3 qTvzQBRAHjCi 2026-08-07 5/250 2026-08-08 16:47 by oEVWOejN9taj
[论文投稿] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 qTvzQBRAHjCi 2026-08-07 4/200 2026-08-08 16:47 by oEVWOejN9taj
[博后之家] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 16:02 by oEVWOejN9taj
[论文投稿] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 WQyTGMbfH7Cx 2026-08-07 4/200 2026-08-08 15:02 by oEVWOejN9taj
[公派出国] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 HEQlVqMTIA7d 2026-08-07 6/300 2026-08-08 14:39 by oEVWOejN9taj
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 HEQlVqMTIA7d 2026-08-07 5/250 2026-08-08 14:27 by oEVWOejN9taj
[基金申请] 关于代码变化问题,想知道的进来 +11 且听虎啸 2026-08-07 14/700 2026-08-08 12:50 by 布布和一二
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HEQlVqMTIA7d 2026-08-07 3/150 2026-08-08 03:47 by 6vVgjDL4CnGu
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见