24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1028  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 309分085801求调剂 +7 学员Gtwj7W 2026-03-31 7/350 2026-04-01 02:36 by BruceLiu320
[考研] 省双一流重点一本大学招收调剂 +3 wwwwffffff 2026-03-31 5/250 2026-03-31 19:49 by 曾曾曾!
[考研] 311求调剂一志愿合肥工业大学 +11 秋二十二 2026-03-30 11/550 2026-03-31 18:09 by 253863592
[考研] 本2一志愿C9-333分,材料科学与工程,求调剂 +9 升升不降 2026-03-31 9/450 2026-03-31 18:01 by 无际的草原
[考研] 生医工0831调剂求推荐 +4 小熊睿睿_s 2026-03-27 6/300 2026-03-31 17:12 by 记事本2026
[考研] 367求调剂 +7 芋泥啵啵… 2026-03-28 7/350 2026-03-31 14:55 by 不吃魚的貓
[考研] 一志愿南昌大学324求调剂 +6 hanamiko 2026-03-30 6/300 2026-03-31 12:19 by 唐沐儿
[考研] 材料与化工调剂一志愿大连海事085600,349 +6 吃的不少 2026-03-30 6/300 2026-03-31 04:17 by fmesaito
[考研] 327求调剂 +5 小卡不卡. 2026-03-29 5/250 2026-03-30 19:30 by Wang200018
[考研] 0703化学321分求调剂 +10 三dd. 2026-03-30 11/550 2026-03-30 19:24 by markhwc
[考研] 抱歉 +3 田洪有 2026-03-30 3/150 2026-03-30 19:11 by 迷糊CCPs
[考研] 298求调剂 +3 什么是胖头鱼 2026-03-30 5/250 2026-03-30 14:41 by 青海小西牛
[考研] 环境科学与工程334分求调剂 +6 王一一依依 2026-03-30 8/400 2026-03-30 11:52 by yjolah
[考研] 生物技术与工程 +7 1294608413 2026-03-25 8/400 2026-03-30 11:36 by 唐沐儿
[考研] 一志愿厦门大学化学学硕307求调剂 +10 y7czhao 2026-03-26 10/500 2026-03-28 14:23 by 唐沐儿
[考研] 286求调剂 +12 PolarBear11 2026-03-26 12/600 2026-03-28 12:14 by zllcz
[考研] 086502化学工程342求调剂 +6 阿姨复古不过 2026-03-27 6/300 2026-03-28 07:06 by wangy0907
[考研] 材料求调剂 +5 .m.. 2026-03-25 5/250 2026-03-27 11:08 by 不吃魚的貓
[考研] 调剂 +4 柚柚yoyo 2026-03-26 4/200 2026-03-26 20:43 by fmesaito
[考研] 材料与化工304求B区调剂 +3 邱gl 2026-03-25 3/150 2026-03-25 19:03 by Ainin_
信息提示
请填处理意见