24小时热门版块排行榜    

查看: 1013  |  回复: 7

cheng1378653

新虫 (初入文坛)

[求助] matlab M文件 给规定参数设个边界

Sample Text
t=[0.0833 0.5 1 2 4 8];
c=[2.2505 1.6489 0.2789 0.2412 0.1077 0.1035];
我用已知的两个函数模型拟合时出现了这种情况
(一)t=[0.0833 0.5 1 2 4 8];
c=[2.2505 1.6489 0.2789 0.2412 0.1077 0.1035];
myfun=inline('A(1)*exp(-A(2)*x)','A','x');
[A iter sse]=nlinfit(t,c,myfun,[1 1])
结果:A =
2.6400    1.4099
iter =
6
sse =
0.2891
(二):t=[0.0833 0.5 1 2 4 8];
c=[2.2505 1.6489 0.2789 0.2412 0.1077 0.1035];
myfun=inline('A(1)*exp(-A(2)*x)+A(3)*exp(-A(4)*x)','A','x');
[A iter sse]=nlinfit(t,c,myfun,[2.4 1.5 0.022 0.2])
结果:A =
2.6266    1.4510    0.0227   -0.2002
iter =
19
sse =
0.2734
但是我的这个函数有个要求,就是参数A的值要大于零,这样的话A(4)就不符合了
(三)还有一种情况就是,用二的方式,但我给另外的随意的初值,
结果:A =
0.8571    1.4100    1.7829    1.4098 A(1)+A(3)=2.64,A(2)基本上等于A(4)
iter =
6
sse =
0.2891
而这样的话就相当于把(一)的公式拆分成了两个一样模型的函数,与(一)没什么区别,我在用(二)计算式,我希望能够拟合出的结果中A(2)与A(4)不同,但是有还得是正值,所以我想给A(2)和A(4)设边界大于零
该怎么弄,我是matlab的菜鸟用户,请高手帮帮忙,谢谢!

[ Last edited by cheng1378653 on 2013-4-1 at 12:52 ]
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

恩斯特

金虫 (小有名气)

【答案】应助回帖


感谢参与,应助指数 +1
fegg7502: 金币+1, 鼓励交流 2013-04-02 08:58:35
在nlinfit后面的第4个选项可以不填的吗?
2楼2013-04-01 16:19:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lgycjpcqu

金虫 (正式写手)


fegg7502: 金币+1, 鼓励交流 2013-04-02 08:58:45
function E=fconstrain(a,t,c)
C=a(1).*exp(-a(2).*t)+a(3).*exp(-a(4).*t);
E=c-C;

命令窗口
clear
a0=[2.4 1.5 0.022 0];
LB=[-inf 0 -inf 0];
UB=[];
t=[0.0833 0.5 1 2 4 8];
c=[2.2505 1.6489 0.2789 0.2412 0.1077 0.1035];
options=optimset('lsqnonlin');
[A norm res ef]=lsqnonlin(@fconstrain,a0,LB,UB,options,t,c);
cfit=A(1).*exp(-A(2).*t)+A(3).*exp(-A(4).*t);
plot(t,c,'*',t,cfit,'rh')
legend('原始数据','拟合数据')
结果是
A =
   2.587176647067854   1.500899543303364  
   0.069042182557558   0.000000000000041

约束.jpg

3楼2013-04-01 19:30:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cheng1378653

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 恩斯特 at 2013-04-01 16:19:45
在nlinfit后面的第4个选项可以不填的吗?

我一直都这么用的,我以为还是初学者
4楼2013-04-02 20:58:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

lgycjpcqu的MATLAB代码就是正解。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
5楼2013-04-04 16:37:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cheng1378653

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by 月只蓝 at 2013-04-04 16:37:22
lgycjpcqu的MATLAB代码就是正解。

你能告诉我lgycjpcqu是什么吗?我以前没有听过这个。。。
6楼2013-04-05 12:21:33
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

引用回帖:
6楼: Originally posted by cheng1378653 at 2013-04-05 12:21:33
你能告诉我lgycjpcqu是什么吗?我以前没有听过这个。。。...

三楼的同学的名字,他提供的代码就是解决你的问题的。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
7楼2013-04-05 14:05:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★
csgt0: 金币+2, 谢谢 2013-04-07 15:03:32
cheng1378653: 金币+2, ★★★很有帮助 2013-04-08 22:34:24
一下代码直接复制到m文件中即可。拟合结果以及相关性系数R^2见附图1。
%-------------------Start--------------------------------------------
function feixianxingnihe1
clear all;clc
format long

tspan=[0.0833 0.5 1 2 4 8];    %t的数据,在此输入
xexp=[2.2505 1.6489 0.2789 0.2412 0.1077 0.1035];    %c的数据,在此输入

k0=[2.6 1.45 0.022 0]; %这里设定A1~A4的初值
lb=-[1 0 1 0]*1e5;  %分别设定A1~A4的取值下限,A2和A4已经设为大于等于0了
ub=[1 1 1]*1e5;    %A1~A4的取值上限


%-------------------------------------------------------------------------

% 使用函数lsqnonlin()进行参数估计

OPTIONS=optimset('MaxFunEvals',1000);
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc,k0,lb,ub,OPTIONS,tspan,xexp);

ci = nlparci(k,residual,jacobian);
%residual;
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf('\n\t参数 A1 = %.16f',k(1))
fprintf('\n\t参数 A2 = %.16f',k(2))
fprintf('\n\t参数 A3 = %.16f',k(3))
fprintf('\n\t参数 A4 = %.16f',k(4))
y=KineticsEqs(tspan,k);
R2=1-sum((xexp-y).^2)./sum((xexp-mean(y)).^2);
fprintf('\n\t相关系数之平方R^2 = %.16f',R2);
figure
plot(tspan,KineticsEqs(tspan,k),'b',tspan,xexp,'or'),legend('计算值','实验值','Location','Best')


%-------------------------------------------------------------------------

function f = ObjFunc(k,tspan,xexp)
f=KineticsEqs(tspan,k)-xexp;

%------------------------------------------------------------------------
function xt = KineticsEqs(t,k)
xt=k(1)*exp(-k(2)*t)+k(3)*exp(-k(4)*t);
%-----------------------------------The  end -----------------------------
在代码赋于初值的那一部分,可以根据各参数的物理意义输入具体数值,最后的拟合结果与初值关系很大。
另外用1stopt可以得到R^2=0.993409615207485的拟合结果:
A1                 -17577.3242768536
A2                 99.2632248231063
A3                 8.9625935335228
A4                 3.38938238943609
以及若干组R^2=0.993409615207485的拟合结果:
A1                 8.96259352762256
A2                 3.38938238846346
A3                 -25330.6623331322
A4                 103.649850688563
分析选定的方程形式可知,其实A1,A2,A3,A4具有对称性A(i)=8.96259352762256, 3.38938238846346是数值稳定的,剩余的两个A(i)只要一个数值较大,即会使得那一整项为0。
当然,R^2大的,不一定具有物理意义。

附图1.jpg

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
8楼2013-04-05 14:52:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 cheng1378653 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 化学调剂0703 +8 啊我我的 2026-03-11 8/400 2026-03-16 17:23 by 我的船我的海
[考研] 考研化学学硕调剂,一志愿985 +3 张vvvv 2026-03-15 3/150 2026-03-16 16:36 by houyaoxu
[文学芳草园] 伙伴们,祝我生日快乐吧 +16 myrtle 2026-03-10 25/1250 2026-03-16 16:21 by 火星超人xi
[考研] 283求调剂 +10 小楼。 2026-03-12 14/700 2026-03-16 16:08 by 13811244083
[考研] 344求调剂 +3 knight344 2026-03-16 3/150 2026-03-16 09:42 by 无际的草原
[考研] 东南大学364求调剂 +4 JasonYuiui 2026-03-15 4/200 2026-03-16 08:36 by Linda Hu
[考研] 274求调剂 +4 时间点 2026-03-13 4/200 2026-03-15 15:29 by Rambo13
[考研] 材料专硕326求调剂 +4 墨煜姒莘 2026-03-15 4/200 2026-03-15 11:02 by dyw
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
[考研] 材料与化工 323 英一+数二+物化,一志愿:哈工大 本人本科双一流 +4 自由的_飞翔 2026-03-13 5/250 2026-03-14 19:39 by hmn_wj
[考研] 中科大材料专硕319求调剂 +3 孟鑫材料 2026-03-13 3/150 2026-03-14 18:10 by houyaoxu
[考研] 297一志愿上交085600求调剂 +5 指尖八千里 2026-03-14 5/250 2026-03-14 17:26 by a不易
[考研] 341求调剂 +3 番茄头--- 2026-03-10 3/150 2026-03-13 23:07 by JourneyLucky
[考研] 材料专硕288分求调剂 一志愿211 +4 在家想你 2026-03-11 4/200 2026-03-13 22:49 by JourneyLucky
[考研] 293求调剂 +3 世界首富 2026-03-11 3/150 2026-03-13 16:27 by JourneyLucky
[考研] 302求调剂 +6 负心者当诛 2026-03-11 6/300 2026-03-13 16:11 by JourneyLucky
[考研] 【0856】化学工程(085602)313 分,本科学科评估A类院校化学工程与工艺,诚求调剂 +7 小刘快快上岸 2026-03-11 7/350 2026-03-13 16:06 by ruiyingmiao
[考研] 材料301分求调剂 +5 Liyouyumairs 2026-03-12 5/250 2026-03-13 14:42 by JourneyLucky
[考研] 298求调剂 +3 Vv呀! 2026-03-10 3/150 2026-03-10 22:40 by 剑诗杜康
[考研] 求调剂材料专硕293 +6 段_(:з」∠)_ 2026-03-10 6/300 2026-03-10 18:22 by ms629
信息提示
请填处理意见