找回密码
 注册
关于网站域名变更的通知
查看: 627|回复: 3
打印 上一主题 下一主题

常微分方程组参数拟合问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-2 10:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
代码如下;7 h& ~* H6 Z  q$ V
function Kinetics4% C0 R, r; m: l& _9 c
clear all
7 r6 i  \. F0 K, j- Bclc
: L+ }, Z: K4 S  ~/ [6 m" Z; ~- Sk0 = [2.159*10^8 4.734*10^6 174686 149892 0.99 0.7 0.5 0.78];%参数初值,其实是不知道的  
! t9 S" N2 }8 w6 klb = [-inf -inf -inf -inf -inf -inf -inf -inf];                   % 参数下限2 O) D5 p& ]: S  v& s& Y8 T; B, d
ub = [inf inf inf inf inf inf inf inf];    % 参数上限& P8 v1 k- _, u: I
u0 = [0,0]; %y初值
+ `2 Z( y) ~/ p$ Fa=[0;0.06680583;0.192617534;0.301693824;0.419783943;0.527041818;0.598345407;0.65055108;0.6876854;0;0.0295189820000000;0.0760025420000000;0.143652564000000;0.303435528000000;0.419715167000000;0.525496977000000;0.565069320000000;0.743536298000000;0;0.0411725930000000;0.0608472370000000;0.0986899250000000;0.241132264000000;0.324760943000000;0.466871464000000;0.531688237000000;0.683614442000000];
' c) c) d4 i2 `! S) s% O6 l0 ~b=[0;0.2378;0.3288;0.3556;0.39;0.3877;0.3766;0.3580;0.3384;0;0.1373;0.2123;0.2755;0.3561;0.3549;0.3475;0.3486;0.2518;0;0.115879961000000;0.178182567000000;0.219982937000000;0.315058656000000;0.339244190000000;0.348664305000000;0.351963292000000;0.313743618000000];1 W7 O7 a! q8 P6 x4 T5 Z7 F& Y
yexp=[a,b];
8 |# _( I  Q9 v" ~% f% 使用函数lsqnonlin()进行参数估计
% o3 K- W( `$ z) ]& l) d9 U: g6 j& l+ I+ T4 N  j' v. `
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
4 X  _( U. l: D2 H# {6 W: T    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],u0,yexp);      % j4 A4 }( C: g1 b4 K$ M
ci = nlparci(k,residual,jacobian);
0 V9 V9 P# N: c9 mfprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1))- a$ L, Y  O1 b& L* f0 _) y
fprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2))
$ w+ E3 k1 V, L- {fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3))  
6 W+ ^- z$ V( \3 Sfprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4))7 }; S8 o* H3 O
fprintf('\tk5 = %.4f ± %.4f\n',k(5),ci(5,2)-k(5)). `; ^, H* c6 z# R
fprintf('\tk6 = %.4f ± %.4f\n',k(6),ci(6,2)-k(6))# r4 ?1 e3 |, ?0 O, f  y
fprintf('\tk7 = %.4f ± %.4f\n',k(7),ci(7,2)-k(7))# V0 u4 w' @" G3 _2 G
fprintf('\tk8 = %.4f ± %.4f\n',k(8),ci(8,2)-k(8))
8 i) g/ ~5 d1 d5 t# R" x. sfprintf('  The sum of the squares is: %.1e\n\n',resnorm)4 u5 I, @& j7 b( X
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
4 J3 e3 V1 A3 b5 j- }%目标函数7 U  H" |* m; V. ~. l+ b% G- O
function f =ObjFunc4LNL(k,u0,yexp)
; o7 ^( m) o0 Eglobal theta Pt Ac R T Fa0
7 A  X* k3 ^: n  V1 F4 Ztheta=zeros(5,1);
. }1 W  N; K& ^8 N2 K- P8 kr0= 1.24*10^-3; % Outer diameter  of the membrane, [m]6 `$ M0 N" L) L% G* A% M
ri= 9.4*10^-4;% Inner diameter  of the membrane, [m]$ K3 g3 Z5 H, E( ^- A* j
r=(r0-ri)/log(r0/ri);% equivalent diameter ,[m]
/ F3 Y  n' a5 a' wPi=3.14159;. B) R- i) ~2 y
L=0.05;% membrane length,[m]
% p, d5 Q" {% h- D+ V9 y, KAc=Pi*r*L;% membrane area [m^2]
6 ?, d! O" |7 CR=8.314; % [J/K.mol]
# `% B5 H$ H- r" E6 zPt=101.325;" u/ \/ y4 q8 [
Ftot=[2.678*10^-2;2.678*10^-2*1.5;2.678*10^-2*2];
; ~8 |( D, E7 [; [" Z' s5 FKmax=length(Ftot);
: N% @; }  `+ o* d$ ]) z
+ S% D8 J6 \1 \3 VT0=600+273;% Inlet temperature [K]
% _* ?- v/ _8 a8 @0 v4 hnmax=9;
' {2 l' o. I( Y5 o. J+ uX1=zeros(nmax,Kmax);X2=zeros(nmax,Kmax);
/ c' G0 u8 B0 _5 h7 l4 T  dfor K=1:Kmax
& V. H' T4 E* v" m7 A5 \, |' ^Fa0=Ftot(K); % If Pt is the parameter/Matrix
+ B- n% h- Z2 f%Pt=Pt0+(k-1)*1; % If Pt is an axis
$ t8 V  v' c' }  Q3 M& a6 t%L=Lsize(k); % If L is the parameter/Matrix
/ [" b4 ?  X3 |  T%theta(2)=H2Oratio+(k-1)*1; % If m is the parameter/Matrix; e' d& Z$ ?2 @4 n/ ^
theta(2)=3; % F0(H2O)/F0(CH4)) r( Z  l4 s3 b: d# l+ U+ d
theta(3)=0; % F0(CO)/F0(CH4)
: A) F/ H* l$ b! e9 s3 @3 P7 ktheta(4)=0; % F0(CO2)/F0(CH4)
( \: o$ M( d6 y; J4 p9 G' s- etheta(5)=0; % F0(H2)/F0(CH4)% L. y' A# P* K  s, i
for n=1:nmax
% Q- \5 V- i# Q) W4 F%delta=delta0+(n-1)*1e-6; % If delta is the parameter/Matrix
8 y9 o% s1 Q1 f" \- U%rit=r0+delta; % inner tube radius [m]' c  J) Y$ F3 d( s1 q( ?8 t( J; {
%sweep=s0+(n-1); % If sweep is the parameter/Matrix
& f- d: K: V; n+ ?2 [%T=T0; % If T is a constant
1 {9 h4 r/ B$ c( r2 x: R; UT=T0+(n-1)*50;! G: F* R8 |! ]  m
ksispan=(0:0.1:1); % precision
4 M3 |! h3 \6 j/ A9 _8 s, {% j[ksi,S1]=ode23s(@KineticEqs,ksispan,u0,[],k); % PBR reactor: x; ]- u; e0 k: o5 E& s* L
X1(n,Kmax)=real(S1(end,1)); % methane finale conversion' h4 X4 |  w: y+ J  b: Y7 y
X2(n,Kmax)=real(S1(end,2)); % carbon dioxide finale conversion
& Z/ d  ?% c2 e) V, h. X1 s. dend; `4 V6 D; o; G- j4 }
end
; N% \& h$ n7 o. f9 hf1=X1(n,Kmax)-yexp(:,1);! I5 Y* G- r9 ?5 f, h
f2=X2(n,Kmax)-yexp(:,2);0 V! E. |* u- [4 f9 v) Q0 U8 L$ ?
f=[f1;f2];
& `0 I: j4 z- Q) X%T0=T0-273.15;T=T-273.15; % Temperature expressed in Celsius  8 Z) X7 l, D7 w1 u8 k
%Tspan=(T0:1:T);! g4 _6 O5 f* I0 s
%Pspan=(Pt0:1t);
* h( W0 |3 A5 B6 ^& W* M+ S/ q6 H%DSPan=(delta0*1e6:1:delta*1e6);
& m; w$ j2 s4 i9 Q( s% B%Sspan=(s0:1:sweep);
6 i' r# }9 w  j2 T. |%D(:,=X3(:,-X1(:,; % Delta = XCH4(MR) - XCH4(PBR)7 P6 H: b5 ]3 ~6 Y% E
$ j& Y5 f! Y1 n
function diff=KineticEqs(ksi,u,k)
- y) r  j$ O; p' H2 g1 u$ ]global theta  Pt  Ac Fa0 T R
* ]7 v9 R5 d4 G# X( \1 hS=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));4 L3 X* k/ t1 w1 X! D4 N$ N' {9 z
P(1)=(1-u(1)-u(2))*S;
6 ^4 w- ^9 V! ]; h& `P(2)=(theta(2)-u(1)-2*u(2))*S;1 ~7 x* ]- m( P" r" `" R
P(3)=(theta(3)+u(1))*S;* p8 _# |* _, W$ o
P(4)=(theta(4)+u(2))*S;+ i! W7 T. Y. ?6 p0 p& ~* U. b
P(5)=(theta(5)+3*(u(1)+u(2))+u(2))*S;% M. b1 y8 z! _
% Differential System
$ b6 Y5 a5 p& r; G( gdiff1=Ac/Fa0*k(1)*exp(-k(3)/R/T)*P(1)^k(5)*P(2)^k(7);2 k; W4 n7 d  T9 A9 H0 ~1 v- Q
diff2=Ac/Fa0*k(2)*exp(-k(4)/R/T)*P(1)^k(6)*P(2)^k(8);
4 [8 q: G9 y* a& ^diff=[diff1 diff2]';
/ d7 M! I3 k) e3 Y1 s
4 |1 d& F  {( m  e% e运行结果:3 E1 y' E) ~/ r/ a
In nlparci (line 104)0 H0 N% ]4 x. ]8 {4 m, T: u' q
  In Kinetics4 (line 15)* B, h- _! |& |% p! Q
警告: 矩阵为奇异工作精度。
4 v! N* ~- M% J2 M% i- E" u        k1 = 215900000.0000 ± NaN
4 @: Q4 N9 N2 N, G        k2 = 4734000.0000 ± NaN
0 I6 X. R9 @" L5 p/ V0 l0 H% i        k3 = 174686.0000 ± NaN& x( a0 e* A0 @2 e2 C$ j
        k4 = 149892.0000 ± NaN
- q1 ^: W  J/ Q) D+ Q$ [        k5 = 1.2381 ± NaN
- P! R; b- Q% {2 n2 q- u        k6 = 0.5426 ± NaN& R6 s% Q. c0 ?2 S/ ~; d# @
        k7 = -0.3426 ± NaN
0 g- s9 {' D: j( ~        k8 = 0.4455 ± NaN* Y, x+ K4 i: m6 _# M6 Z7 V! H1 C
  The sum of the squares is: 2.0e+00. q1 ~* y$ ]8 z4 q9 u+ J4 ?

该用户从未签到

2#
发表于 2021-3-2 10:48 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
/ n8 E! f9 r6 o8 y你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )
+ l1 Y' }2 J" ~) G
) u, u/ G9 I5 u0 o4 H然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。, y" E/ D' b/ K- D' N2 x/ O4 T

% s1 q' j0 Y7 i& \% t7 [( [你给的原始参数的估计值的效果
# e$ U: M' M5 ^* C" w- Z1 \" m8 I) D) p/ E
8 U/ C( W; T% g

% z( i; z2 K9 x6 q  e4 C拟合得到的两组参数的效果1
5 G  M8 y4 R1 @5 p
/ H# U# Z, W" ]
7 p3 Z# m; a+ {拟合得到的两组参数的效果24 {1 t# X: o" L$ F$ |

该用户从未签到

3#
发表于 2021-3-2 11:26 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));$ P7 R7 U& `; `) a9 c9 j
你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )
9 A  J6 M9 E7 n9 w. n
( R1 a' T* v' [6 \  L* a然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。2 m, q- }' E5 o4 M  B

该用户从未签到

4#
发表于 2021-3-2 15:26 | 只看该作者
来学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-4 22:59 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表