24小时热门版块排行榜    

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

ygqsgc

新虫 (初入文坛)

[求助] MATLAB计算动力学参数时出现误差大的问题 已有2人参与

昨天修改了某个地方导致今天求解参数误差极大,但我看了半天也没找到原因,也忘记昨天修改的什么地方了
程序如下,图1是昨天的,图2 是今天的,差距有些大,希望大神能够解惑
CODE:
function Kinetics2
clear all; clc
format long
k0=[0 0 0 0 0 0 0 0];
tspan=[0 2 4 6 8 10 15 20 25 30 40 50 60 75 90 105 120];             %参数初值
lb=[0 0 0 0 0 0 0 0];  ub = [1 1 1 1 1 1 1 1]*1e1;  %lb、ub:参数下限和上限
Y0=[0 0];
Kinetics1=[0        0        0
2        0.101406296        0.025750304
4        0.148139381        0.077208075
6        0.171971874        0.097848253
8        0.200101464        0.131543106
10        0.223088343        0.149258466
15        0.268349285        0.206242074
20        0.319194899        0.249534539
25        0.352139308        0.280899049
30        0.373849138        0.309100951
40        0.4145939        0.348550324
50        0.442947836        0.381294016
60        0.460584916        0.395704095
75        0.483226647        0.421979897
90        0.499672966        0.430587898
105        0.50291736        0.452012783
120        0.518449036        0.452107899];
yexp=Kinetics1(1:17,2:3);            

%使用函数fmincon()进行参数估计
[k,fval,flag]=fmincon(@ObjFunc4Fmincon,k0,[],[],[],[],lb,ub,[],[],Y0,yexp);
fprintf('\n 使用函数fmincon()估计得到的参数值为:\n')
fprintf('\tk1=%.4f\n',k(1)), fprintf('\tk2=%.4f\n',k(2)), fprintf('\tk3=%.4f\n',k(3)),fprintf('\tk4=%.4f\n',k(4)), fprintf('\tk5=%.4f\n',k(5)),fprintf('\tk6=%.4f\n',k(6)),fprintf('\tk7=%.4f\n',k(7)),fprintf('\tk8=%.4f\n',k(8));
fprintf(' The sum of the squares is:%.1e\n\n', fval);
k_fmincon=k;

ts=0:1:max(tspan);
[ts ys] = ode45(@func,ts,Y0,[],k);
yy = [Kinetics1(:,2) Kinetics1(:,3)];
plot(ts,ys(:,1),'b',tspan,yy(:,1),'bo',ts,ys(:,2),'r',tspan,yy(:,2),'ro'),
legend('Y1的计算值','Y1的实验值','Y2的计算值','Y2的实验值','Location','best');

function f=ObjFunc4Fmincon(k,Y0,yexp)
tspan=[0 2 4 6 8 10 15 20 25 30 40 50 60 75 90 105 120];
[t,Y]=ode45(@func,tspan,Y0,[],k);
y(:,1)=Y(:,1);y(:,2:3)=Y(:,1:2);
f=sum((y(:,2)-yexp(:,1)).^2)+sum((y(:,3)-yexp(:,2)).^2)

function dYdt=func(t,Y,k)
k1=k(1);k2=k(2);k3=k(3);k4=k(4);k5=k(5);k6=k(6);k7=k(7);k8=k(8);
f1=(k1.*k2.*k3.*k4.*(1-Y(1)).*6.25.*(1-Y(2)).*3.125-k5.*k6.*k7.*k8.*Y(1).*6.25.*Y(2).*3.125)./(((k1.*k2.*k7+k1.*k2.*k4).*(1-Y(1)).*6.25+(k5.*k3.*k4+k2.*k3.*k4).*(1-Y(2)).*3.125+(k5.*k6.*k7+k1.*k6.*k7).*Y(1).*6.25+(k2.*k6.*k8+k5.*k7.*k8).*Y(2).*3.125+(k1.*k3.*k4+k1.*k2.*k3).*(1-Y(1)).*6.25.*(1-Y(2)).*3.125+(k1.*k6.*k7+k5.*k6.*k4).*(1-Y(1)).*6.25.*Y(1).*6.25+(k2.*k4.*k8+k5.*k3.*k8).*(1-Y(2)).*3.125+(k6.*k7.*k8+k5.*k6.*k8).*Y(1).*6.25.*Y(2).*3.125).*6.125);
f2=(k1.*k2.*k3.*k4.*(1-Y(1)).*6.25.*(1-Y(2)).*3.125-k5.*k6.*k7.*k8.*Y(1).*6.25.*Y(2).*3.125)./(((k1.*k2.*k7+k1.*k2.*k4).*(1-Y(1)).*6.25+(k5.*k3.*k4+k2.*k3.*k4).*(1-Y(2)).*3.125+(k5.*k6.*k7+k1.*k6.*k7).*Y(1).*6.25+(k2.*k6.*k8+k5.*k7.*k8).*Y(2).*3.125+(k1.*k3.*k4+k1.*k2.*k3).*(1-Y(1)).*6.25.*(1-Y(2)).*3.125+(k1.*k6.*k7+k5.*k6.*k4).*(1-Y(1)).*6.25.*Y(1).*6.25+(k2.*k4.*k8+k5.*k3.*k8).*(1-Y(2)).*3.125+(k6.*k7.*k8+k5.*k6.*k8).*Y(1).*6.25.*Y(2).*3.125).*3.125);
dYdt=[f1;f2];

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

ygqsgc

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by dingd at 2021-07-18 10:50:32
用1stOpt试了下,似乎是多解吧:

1:
均方差(RMSE): 0.133593203954135
残差平方和(SSR): 0.571108612567395
相关系数(R): 0.999611248630951
相关系数之平方(R^2): 0.999222648389528
修正R平方(Adj. R^2) ...

谢谢您!我刚下载了这个软件,还不会用,冒昧问一句能看一下您的代码吗?
7楼2021-07-19 15:29:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 7 个回答

独孤神宇

版主 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
y(:,1)=Y(:,1);y(:,2:3)=Y(:,1:2);
f=sum((y(:,2)-yexp(:,1)).^2)+sum((y(:,3)-yexp(:,2)).^2)
检查一下这里,尤其是第一行

发自小木虫Android客户端
数值计算
2楼2021-07-17 23:47:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
独孤神宇: 金币+5, 鼓励交流 2021-07-18 11:01:36
ygqsgc: 金币+2, ★★★很有帮助 2021-07-23 15:17:58
用1stOpt试了下,似乎是多解吧:

1:
均方差(RMSE): 0.133593203954135
残差平方和(SSR): 0.571108612567395
相关系数(R): 0.999611248630951
相关系数之平方(R^2): 0.999222648389528
修正R平方(Adj. R^2): 0.999028310594448
确定系数(DC): 0.0502878953255795
F统计(F-Statistic): 1.32838081213258

参数                  最佳估算
--------------------        -------------
k1        0.127201864728704
k2        0.733927119057626
k3        0.153739275177941
k4        0.802137681283057
k5        0.132858854951337
k6        0.190315517131239
k7        0.547878187848255
k8        0.303434451713526

2:
均方差(RMSE): 0.133593202692168
残差平方和(SSR): 0.571108601777619
相关系数(R): 0.999611260251213
相关系数之平方(R^2): 0.999222671621019
修正R平方(Adj. R^2): 0.999028339634003
确定系数(DC): 0.0502879151372654
F统计(F-Statistic): 1.32838018712688

参数                  最佳估算
--------------------        -------------
k1        0.477143075782806
k2        0.955948247341439
k3        0.221367547288537
k4        0.15762852341868
k5        0.999996228278175
k6        0.39574211416766
k7        0.175285259028897
k8        0.365239513210575

3:
均方差(RMSE): 0.133593217021487
残差平方和(SSR): 0.571108724292805
相关系数(R): 0.999611167855669
相关系数之平方(R^2): 0.999222486901774
修正R平方(Adj. R^2): 0.999028108733572
确定系数(DC): 0.0502875041008147
F统计(F-Statistic): 1.32840750182457

参数                  最佳估算
--------------------        -------------
k1        0.174350587941431
k2        0.96796438540332
k3        0.997777812182903
k4        0.830312095815316
k5        0.99999988343245
k6        0.757243090774864
k7        0.197815090185031
k8        0.39528880243776
3楼2021-07-18 10:50:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ygqsgc

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by 独孤神宇 at 2021-07-17 23:47:54
y(:,1)=Y(:,1);y(:,2:3)=Y(:,1:2);
f=sum((y(:,2)-yexp(:,1)).^2)+sum((y(:,3)-yexp(:,2)).^2)
检查一下这里,尤其是第一行

谢谢,但是我修改这里好像没什么变化。我今天又发现初值变化会很大的影响结果,请问您有什么建议吗?
4楼2021-07-18 16:37:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +9 Tide man 2026-08-11 9/450 2026-08-12 20:30 by 微不足道士
[基金申请] 好奇怪的filecode +5 布布和一二 2026-08-08 6/300 2026-08-12 16:11 by 云上清扬
[基金申请] FileCode能看出啥? +8 要乐观耀哥 2026-08-10 21/1050 2026-08-12 16:08 by 云上清扬
[论文投稿] 职称评审,求友友推荐见刊最快的期刊 +4 工厂打螺丝 2026-08-08 4/200 2026-08-12 09:18 by hansi2025
[基金申请] 奇怪,两个人的filecode固定段从头到尾一模一样 +7 布布和一二 2026-08-10 10/500 2026-08-12 09:12 by 布布和一二
[基金申请] 综述论文作为代表作会不会影响评审专家的印象分? +11 yufeiwaner 2026-08-09 13/650 2026-08-12 08:17 by yufeiwaner
[基金申请] 小木虫上这么多卖论文的,真有人买论文么?感觉没必要啊 +8 Tide man 2026-08-10 9/450 2026-08-11 20:39 by beefly
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +8 家与远方 2026-08-10 13/650 2026-08-11 09:49 by 家与远方
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 关于代码变化问题,想知道的进来 +17 且听虎啸 2026-08-07 24/1200 2026-08-10 18:35 by zhangduo2008
[基金申请] 静等基金结果 +5 gjjjzhong 2026-08-10 16/800 2026-08-10 17:19 by Tide man
[基金申请] 国自然结果 +4 Vierhys 2026-08-10 8/400 2026-08-10 15:06 by Vierhys
[基金申请] 面上项目filecode邪修 +5 西山十月 2026-08-09 7/350 2026-08-10 07:32 by 仁砚薪传
[基金申请] 关于filecode,很负责任的告诉大家 +6 爱看书的可乐 2026-08-08 7/350 2026-08-08 22:13 by a_niu
[基金申请] 国基金的申报应该改成非等额制,评价高的钱多评价低的钱少,但是增加资助率 +7 a089 2026-08-07 7/350 2026-08-08 18:05 by gltch
[基金申请] 化学口download_prp&fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] filecode变化情况 +6 布布和一二 2026-08-07 22/1100 2026-08-07 14:45 by 且听虎啸
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
信息提示
请填处理意见