24小时热门版块排行榜    

CyRhmU.jpeg
查看: 2126  |  回复: 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的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +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的回帖

独孤神宇

版主 (知名作家)

【答案】应助回帖

★ ★ ★
ygqsgc: 金币+3, ★★★很有帮助 2021-07-23 15:18:05
引用回帖:
4楼: Originally posted by ygqsgc at 2021-07-18 16:37:00
谢谢,但是我修改这里好像没什么变化。我今天又发现初值变化会很大的影响结果,请问您有什么建议吗?...

这个需要多次尝试了,可以将结果作为初始值代入反复计算。

可以参考三楼的结果,将其作为 初值代入计算
数值计算
5楼2021-07-18 17:32:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

ygqsgc

新虫 (初入文坛)

引用回帖:
5楼: Originally posted by 独孤神宇 at 2021-07-18 17:32:29
这个需要多次尝试了,可以将结果作为初始值代入反复计算。

可以参考三楼的结果,将其作为 初值代入计算...

谢谢!
6楼2021-07-18 18:50:07
已阅   回复此楼   关注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的回帖
相关版块跳转 我要订阅楼主 ygqsgc 的主题更新
信息提示
请填处理意见