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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
代码如下;
5 a+ [7 X5 C" W2 ~" V$ rfunction Kinetics4( F% |$ p: O* q7 G4 a
clear all
% H! c0 d% k" D' G, }clc
- X5 U/ M  ?  p/ |& }! |4 Bk0 = [2.159*10^8 4.734*10^6 174686 149892 0.99 0.7 0.5 0.78];%参数初值,其实是不知道的  
- p; |6 }6 R) q, Q$ F0 B% Dlb = [-inf -inf -inf -inf -inf -inf -inf -inf];                   % 参数下限  E# r9 S! M) T: `2 ]
ub = [inf inf inf inf inf inf inf inf];    % 参数上限
7 L. B6 m+ N3 K3 P# wu0 = [0,0]; %y初值
& ?1 w0 e+ d8 ]5 N1 Ha=[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];
8 g7 N8 S$ h3 Gb=[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 f2 H' G/ i4 `5 u# b: p
yexp=[a,b];% ^- ]" z6 e* Y
% 使用函数lsqnonlin()进行参数估计
3 q% r1 e' u2 w2 k9 ?9 m8 v, b3 y; T  _. t* U# g" X9 f: m
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...  j6 m1 B, n( V! e; u- j% j
    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],u0,yexp);      4 z$ m9 t  l# i/ \" ~" H
ci = nlparci(k,residual,jacobian);' d  y1 V6 y: P) o
fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1))
' r6 }3 L5 Z- j6 G! zfprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2))
. t  V/ G) r, ~4 Ffprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3))  ' L3 A3 b' F0 m" V! B
fprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4))/ U7 d3 n4 d* C/ h% e$ {. l
fprintf('\tk5 = %.4f ± %.4f\n',k(5),ci(5,2)-k(5))
! ~4 B$ |" I" T& D  A1 B) pfprintf('\tk6 = %.4f ± %.4f\n',k(6),ci(6,2)-k(6))
: S. G- x. w) Z* {fprintf('\tk7 = %.4f ± %.4f\n',k(7),ci(7,2)-k(7))- i0 m3 y- }4 A' ~( x" Q9 k
fprintf('\tk8 = %.4f ± %.4f\n',k(8),ci(8,2)-k(8))6 Q8 G9 L( H0 K; @  o, [; ?3 C  F
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)- v6 @5 {( [( x- T- M5 P
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
; }2 d/ H9 f8 c3 k%目标函数  j8 }5 m/ u$ L- k: U1 u
function f =ObjFunc4LNL(k,u0,yexp)
4 d: L. {7 B, R2 _$ S  V1 {/ iglobal theta Pt Ac R T Fa01 @7 v, @5 V/ x4 J1 P
theta=zeros(5,1);
/ o8 u" I9 K/ x6 H1 Ur0= 1.24*10^-3; % Outer diameter  of the membrane, [m]
! e0 P9 ~- {2 Yri= 9.4*10^-4;% Inner diameter  of the membrane, [m]$ T' K$ T% ~  c4 `& k5 ?
r=(r0-ri)/log(r0/ri);% equivalent diameter ,[m]; A6 G9 [! l1 M0 D6 K
Pi=3.14159;
: q" Y' \- u5 @L=0.05;% membrane length,[m]
  q+ a; w# H, TAc=Pi*r*L;% membrane area [m^2]3 Z# s! u2 U4 z: F
R=8.314; % [J/K.mol]* M  ?+ ^) A; Y6 u
Pt=101.325;: @# `# Q/ ?" {: `. N; A  `
Ftot=[2.678*10^-2;2.678*10^-2*1.5;2.678*10^-2*2];
* G% j: ?6 s6 W- ^' vKmax=length(Ftot);
' |4 {, c# ]0 _! k
9 k8 k7 m) p$ Z& s* a* sT0=600+273;% Inlet temperature [K]
3 ]- {# x+ T9 F/ y' J, E4 Knmax=9;
6 ?4 I+ H9 ]! W  JX1=zeros(nmax,Kmax);X2=zeros(nmax,Kmax);
/ J# O  Y3 w; z" D: X3 [for K=1:Kmax
- z. e. K5 Y0 r, S4 x- wFa0=Ftot(K); % If Pt is the parameter/Matrix! \5 ?  I7 U  ?) D0 z1 P) x# ]
%Pt=Pt0+(k-1)*1; % If Pt is an axis3 N( b! S( m1 y* Z; ^# j
%L=Lsize(k); % If L is the parameter/Matrix! B7 X6 Z; |1 n- O8 s
%theta(2)=H2Oratio+(k-1)*1; % If m is the parameter/Matrix
) U/ u# H* L9 V0 W' Y" dtheta(2)=3; % F0(H2O)/F0(CH4); s- {3 S* J% ]+ W4 }5 I
theta(3)=0; % F0(CO)/F0(CH4)
5 }+ y- e1 t. @3 V+ Z7 atheta(4)=0; % F0(CO2)/F0(CH4)
8 K2 R( Q7 Y" Ztheta(5)=0; % F0(H2)/F0(CH4)' ]7 f2 V& V$ y9 {
for n=1:nmax
' s, \" E. Y- D& Z: q5 L%delta=delta0+(n-1)*1e-6; % If delta is the parameter/Matrix9 @7 b) u! B/ F5 ~
%rit=r0+delta; % inner tube radius [m]
& D  V2 S$ n' {. _- c%sweep=s0+(n-1); % If sweep is the parameter/Matrix
0 {4 r7 t% j6 ?1 |9 t7 D%T=T0; % If T is a constant9 A8 \) k6 u/ i4 @9 h
T=T0+(n-1)*50;
8 _) f1 M# E! x: cksispan=(0:0.1:1); % precision
, V; }; \* D8 A3 V- X( ]$ K6 s[ksi,S1]=ode23s(@KineticEqs,ksispan,u0,[],k); % PBR reactor
/ g0 E# ?  T  p/ M8 U& ZX1(n,Kmax)=real(S1(end,1)); % methane finale conversion
6 M% i' d" c3 n& u  P) p1 W) e- UX2(n,Kmax)=real(S1(end,2)); % carbon dioxide finale conversion
0 O- W. z' j. r0 u' }end
6 l2 S/ v7 e7 z4 f) _3 Z  B9 I) Eend
1 e- O( I; T: Xf1=X1(n,Kmax)-yexp(:,1);5 q! M# g- _7 ~' i8 @6 D
f2=X2(n,Kmax)-yexp(:,2);* e" e! d; `7 \' |1 |
f=[f1;f2];
2 L2 n$ }0 j& \& r%T0=T0-273.15;T=T-273.15; % Temperature expressed in Celsius  ! ^7 L: E9 v3 [
%Tspan=(T0:1:T);
7 u* ^# Y% ~1 p  ^2 I%Pspan=(Pt0:1t);
& w' e! M. l/ ~  o' D) w" o7 }( U%DSPan=(delta0*1e6:1:delta*1e6);3 B/ H6 K' \0 z1 f. j, F' P
%Sspan=(s0:1:sweep);
# V/ ]3 m! d+ a8 n2 a1 z( S; K6 X%D(:,=X3(:,-X1(:,; % Delta = XCH4(MR) - XCH4(PBR)6 O( \) U4 B4 c+ G/ J9 z  B

/ I3 o  |0 A" E5 Z7 f3 }; C  nfunction diff=KineticEqs(ksi,u,k)5 D- h8 p9 P7 I+ C+ r4 W" ]* b
global theta  Pt  Ac Fa0 T R
, l. v! m0 S. i0 \+ G+ X3 F4 B% sS=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));1 V; R( H) k  G& h
P(1)=(1-u(1)-u(2))*S;- g$ i8 i! ^' Z" o- a) Z
P(2)=(theta(2)-u(1)-2*u(2))*S;
' R% h. y; k+ bP(3)=(theta(3)+u(1))*S;
) ~) d4 a1 G( ~, F* U, xP(4)=(theta(4)+u(2))*S;
% I/ f9 l5 {1 ^" VP(5)=(theta(5)+3*(u(1)+u(2))+u(2))*S;1 U! Y  m! @" f* W, A
% Differential System
& z* `( q* O. N9 D3 K9 fdiff1=Ac/Fa0*k(1)*exp(-k(3)/R/T)*P(1)^k(5)*P(2)^k(7);
5 {* {2 [( S7 {diff2=Ac/Fa0*k(2)*exp(-k(4)/R/T)*P(1)^k(6)*P(2)^k(8);
) x) ]3 k& F8 x- ddiff=[diff1 diff2]';8 D  e  v2 O; ~
- N0 e( E! {, s8 }# t4 z1 o
运行结果:8 C: l& r" B" r2 G7 `* V2 v
In nlparci (line 104)1 L9 s) ~+ P: s, J& r# N; n
  In Kinetics4 (line 15)0 e$ x3 s9 k! j7 M  ~; e0 X
警告: 矩阵为奇异工作精度。' c; Z4 N# m# P2 F8 J( r
        k1 = 215900000.0000 ± NaN* {% d) h/ T! F' j" L3 B( r
        k2 = 4734000.0000 ± NaN
6 O$ q0 {: O7 K- v/ F        k3 = 174686.0000 ± NaN
) y3 ]; `- T7 d0 o        k4 = 149892.0000 ± NaN% [" r, U+ {# O" ?" W3 R
        k5 = 1.2381 ± NaN2 ]! I0 B% u1 |1 S+ ^3 |
        k6 = 0.5426 ± NaN& P- x  A5 C0 o+ I7 d( t! N" h! F
        k7 = -0.3426 ± NaN7 {. G' [$ E- T: `, @. S* ~
        k8 = 0.4455 ± NaN
4 i1 e$ \  |; b+ R; S  The sum of the squares is: 2.0e+00! `9 m/ N2 A( ]2 O1 X, Y( c( {

该用户从未签到

2#
发表于 2021-3-2 10:48 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
8 a$ K( \0 v& `! d& d4 |你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )) K, I3 ]" B4 q9 q/ l. ]0 c

8 |) H' N& l8 u然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。
" J( h7 ]& D/ S- d0 r% T7 D
) s& j* S; p# \+ G" ^9 h你给的原始参数的估计值的效果
7 Y; O) D" E3 Z9 D' W# P, i
+ x. `1 q, T- t7 g: ~5 u3 T, b+ v3 Y3 H) {7 r

6 K- [2 P% @" \; m$ E. y& J. A& i拟合得到的两组参数的效果1
9 n! p% Y9 \* m* Z8 |; Q
9 X0 e1 S' R( L5 J% O$ T! V. g: S; G  L3 y3 r8 d7 ~# o
拟合得到的两组参数的效果2* h' V7 E+ o6 w/ ~. F7 f

该用户从未签到

3#
发表于 2021-3-2 11:26 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));6 p( r# m9 E% h" Y+ H
你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )# d* `8 S5 ^" ]9 P: }: _1 h% T
* q* n* K+ M( Z* N7 \: F8 C
然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。
) H' R: t& _# S2 D- e

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-3 11:39 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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