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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
代码如下;8 [, `5 j! q5 b6 _* U
function Kinetics4' D3 l* c7 d8 e/ C5 l' S) b
clear all) T% N) w8 ?+ ^# J! S# J$ A
clc
' H: f7 j8 r$ p# i  b% Y6 jk0 = [2.159*10^8 4.734*10^6 174686 149892 0.99 0.7 0.5 0.78];%参数初值,其实是不知道的  % J! x! I" _( z% u
lb = [-inf -inf -inf -inf -inf -inf -inf -inf];                   % 参数下限/ a, {3 C& B$ U; m. p9 _* z- \
ub = [inf inf inf inf inf inf inf inf];    % 参数上限
" |) N9 P/ I* r, j, Y1 Pu0 = [0,0]; %y初值5 \+ d  `. m( _( n1 S0 T* q6 I
a=[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];. M& F- S' l6 o% H
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];
0 o2 v4 z; f7 A% K/ ?$ R; k& `yexp=[a,b];
  V% k) t& v& i7 |3 K( d# V5 M% 使用函数lsqnonlin()进行参数估计
: U4 E2 g9 f  N9 I- ]5 W, M: U! k0 f& u7 a+ F7 ^; L- ~
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...* e9 v  Z3 i4 Z* f9 h! P
    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],u0,yexp);      3 k% j6 I9 n& |. [  ]7 o9 _. m
ci = nlparci(k,residual,jacobian);; o7 J* o7 X; m4 g! h
fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1))- Y* N. x7 v/ L  ?5 a/ e* h
fprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2))3 V1 k* k; e8 v2 d
fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3))  3 _. N3 f  P8 \1 z
fprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4))2 b+ u% W/ }; A
fprintf('\tk5 = %.4f ± %.4f\n',k(5),ci(5,2)-k(5))9 r$ O% h0 D$ v( _1 {% I1 W
fprintf('\tk6 = %.4f ± %.4f\n',k(6),ci(6,2)-k(6))+ O4 P5 V3 u! [1 d6 q3 \) W8 k% ^9 b3 K
fprintf('\tk7 = %.4f ± %.4f\n',k(7),ci(7,2)-k(7))
3 v5 }0 }, l5 ^. e4 p9 B; `fprintf('\tk8 = %.4f ± %.4f\n',k(8),ci(8,2)-k(8))
; g* n, @' \9 K8 [fprintf('  The sum of the squares is: %.1e\n\n',resnorm)7 ^$ l. x7 z: C  t2 i
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')( p7 u, V2 D* N! ^  L! T9 i
%目标函数
- c; e; X3 P; C" Gfunction f =ObjFunc4LNL(k,u0,yexp)# t( T) u6 \% D+ p0 B$ J
global theta Pt Ac R T Fa0
4 [& P2 V6 c( y& v+ i6 j: Ftheta=zeros(5,1);( H- j; f! R6 P5 }# z! ^
r0= 1.24*10^-3; % Outer diameter  of the membrane, [m]
3 q- g/ }, U& B' I) Mri= 9.4*10^-4;% Inner diameter  of the membrane, [m]
9 {0 A3 g! I7 E% O: i* `6 ir=(r0-ri)/log(r0/ri);% equivalent diameter ,[m]
7 C- Y% @2 u  I) P2 EPi=3.14159;
6 v+ ~; B; h  n7 l. gL=0.05;% membrane length,[m]
' j  r, |$ E" H8 ^Ac=Pi*r*L;% membrane area [m^2]
% E4 {: n+ }" \$ {1 i1 }R=8.314; % [J/K.mol]
3 U# H1 v5 J: {0 m8 ]Pt=101.325;8 Z) G9 B/ h# @9 U  |$ V
Ftot=[2.678*10^-2;2.678*10^-2*1.5;2.678*10^-2*2];
1 j; m: n  _) p; s  S# uKmax=length(Ftot);3 C  b! N/ ^$ g' G& J

" B) @1 v$ C' w2 GT0=600+273;% Inlet temperature [K]
  ]! c' d5 [5 m8 s7 w2 S! k  rnmax=9;  ~1 ~/ p0 ?* ~9 ]& E
X1=zeros(nmax,Kmax);X2=zeros(nmax,Kmax);) m9 X2 P  {% S  w2 [1 R- ~
for K=1:Kmax
+ W0 M  _$ J* T* t& Z5 M" U/ \Fa0=Ftot(K); % If Pt is the parameter/Matrix% h6 n8 y' m! R- Y* P) G% C' \
%Pt=Pt0+(k-1)*1; % If Pt is an axis
& c3 ?/ u" x2 ^  @4 e%L=Lsize(k); % If L is the parameter/Matrix. E/ P' Z0 l$ x! I: `) l% m
%theta(2)=H2Oratio+(k-1)*1; % If m is the parameter/Matrix
: x  a4 H5 h( a! Etheta(2)=3; % F0(H2O)/F0(CH4)' l% \; M7 i; a# J# g" Y
theta(3)=0; % F0(CO)/F0(CH4)
0 `! G, |6 d' y* ]% ntheta(4)=0; % F0(CO2)/F0(CH4)
% j3 i$ v! @! g) P( Atheta(5)=0; % F0(H2)/F0(CH4)8 b8 |- {1 y% t% J  [; i
for n=1:nmax, ?$ a) y( x2 V) S9 @. K
%delta=delta0+(n-1)*1e-6; % If delta is the parameter/Matrix. c: z/ d% o$ P9 g
%rit=r0+delta; % inner tube radius [m]
( f, ]3 n' Y& ^& i% {& N%sweep=s0+(n-1); % If sweep is the parameter/Matrix
# |# o6 F( `3 G3 C# T%T=T0; % If T is a constant
9 S" p+ G  K: j# S$ {T=T0+(n-1)*50;
9 G( T3 R, a6 J# n2 k7 }, Pksispan=(0:0.1:1); % precision! [7 N% f  ~' Z2 q9 n5 ?
[ksi,S1]=ode23s(@KineticEqs,ksispan,u0,[],k); % PBR reactor6 @8 C2 s0 [/ q! @* @
X1(n,Kmax)=real(S1(end,1)); % methane finale conversion3 M2 ^5 e) {2 H# I5 U
X2(n,Kmax)=real(S1(end,2)); % carbon dioxide finale conversion4 t  r$ m9 K! b5 C1 n" O3 Z
end
2 b' _$ C6 K! D' j. C6 aend
, V/ F" ~2 ^! c+ [+ A6 Nf1=X1(n,Kmax)-yexp(:,1);5 V4 I. @$ r- I1 _5 |" ?
f2=X2(n,Kmax)-yexp(:,2);
4 i. p1 |4 v: u/ F! J1 b8 P4 hf=[f1;f2];
; y' J2 ]. j2 N* v# v# t( x%T0=T0-273.15;T=T-273.15; % Temperature expressed in Celsius  8 W$ C' y1 d  A4 Q4 Y; X8 Q
%Tspan=(T0:1:T);
% |. i9 _  t6 v%Pspan=(Pt0:1t);3 Q" n$ i6 a* k  ]$ q1 ^
%DSPan=(delta0*1e6:1:delta*1e6);3 A$ T8 C0 X1 @+ o% E
%Sspan=(s0:1:sweep);# o: f% u) D( P. ?$ r1 Z, v
%D(:,=X3(:,-X1(:,; % Delta = XCH4(MR) - XCH4(PBR)3 d+ a: \, X$ ?* f
% U4 ?& i- _+ `
function diff=KineticEqs(ksi,u,k)
. g# F: `* B0 eglobal theta  Pt  Ac Fa0 T R
6 y) [2 R6 m2 `& C% ~, S- H3 @S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));* M% Z! z4 b2 ]* L) z0 m
P(1)=(1-u(1)-u(2))*S;
& L* k3 n' f/ N, _" E, j9 U  MP(2)=(theta(2)-u(1)-2*u(2))*S;) X% r2 {; A7 t2 @4 N1 U! _" r
P(3)=(theta(3)+u(1))*S;# w/ [5 {$ r! o! e' L( w0 ]
P(4)=(theta(4)+u(2))*S;
5 S- z3 ~+ i; X2 wP(5)=(theta(5)+3*(u(1)+u(2))+u(2))*S;5 K/ J$ w' J0 |( K3 q7 q6 V
% Differential System  M% i; ?& C5 k- E) b" M1 |
diff1=Ac/Fa0*k(1)*exp(-k(3)/R/T)*P(1)^k(5)*P(2)^k(7);& \0 @" K8 C) V
diff2=Ac/Fa0*k(2)*exp(-k(4)/R/T)*P(1)^k(6)*P(2)^k(8);, E9 N) o/ [' s- ?
diff=[diff1 diff2]';
5 k# a' [# x: n0 R1 F* V# s& ?/ G
* K+ U$ _- m% {& `% u运行结果:: A% c2 G8 U7 v. v8 R
In nlparci (line 104)8 f% \" D7 u6 B
  In Kinetics4 (line 15)2 M; f  Z# Q9 V) W2 |
警告: 矩阵为奇异工作精度。* v" E( K) w/ O' z  \
        k1 = 215900000.0000 ± NaN
) x3 _; q! ?2 j. L) T% O$ d0 L        k2 = 4734000.0000 ± NaN1 x5 r! E9 [2 W. L6 X1 p* r
        k3 = 174686.0000 ± NaN
6 J4 N0 f! S. ^& |  |        k4 = 149892.0000 ± NaN6 K2 O! E" r9 r5 }% U$ D
        k5 = 1.2381 ± NaN# C& f0 H6 Q4 x) a6 h) [1 l/ z. z
        k6 = 0.5426 ± NaN
4 n2 E. f& h- A, \) v, G" a        k7 = -0.3426 ± NaN' @0 V& R% ]9 c1 U, i* z
        k8 = 0.4455 ± NaN& N3 e' V0 k; v; O+ f; o
  The sum of the squares is: 2.0e+006 R" f4 f8 S. u; r' |; P

该用户从未签到

2#
发表于 2021-3-2 10:48 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));! a0 B& o, y4 b6 X5 ~3 t% H* ~
你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )# O$ F& C5 O2 Z  M

9 L' _, f2 s# M0 V! G# U然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。0 L: e( p: u6 [. G# \2 [
& y( @8 ~0 b, ~7 x1 l% b: Q4 K
你给的原始参数的估计值的效果( c& P: l$ ?0 _
7 P  H  r+ n5 m: l+ e) e8 r

  O  b) b5 l* |$ R0 ~: X5 k+ Q, l
/ ^% u6 i( y0 Q9 j! _3 p拟合得到的两组参数的效果12 ?$ g; a2 |4 O2 z  }- h
& S% H2 h0 K1 \7 |3 H
8 h5 t+ E( |4 W) X$ p; Q& {9 j# `6 Q6 i, T
拟合得到的两组参数的效果26 R3 }7 J* I5 A9 M6 q' `

该用户从未签到

3#
发表于 2021-3-2 11:26 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));; T0 v  r# x. [8 J: k
你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )7 W. a( _; L  ?  X/ u# k0 T. n6 l
* w/ W% h1 j( c/ z( F) O5 D) S
然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。
0 Q7 b) o; ]7 j+ Z  o' w$ G9 ?: S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 12:49 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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