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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
代码如下;  o7 c( r6 c& C6 z
function Kinetics44 F( i! D$ f( u- q
clear all
+ e' \0 p' v" yclc
6 Q5 b2 ~; z  Ok0 = [2.159*10^8 4.734*10^6 174686 149892 0.99 0.7 0.5 0.78];%参数初值,其实是不知道的  
# k/ b! ~! r- @lb = [-inf -inf -inf -inf -inf -inf -inf -inf];                   % 参数下限
% d# d$ ]1 F; R  uub = [inf inf inf inf inf inf inf inf];    % 参数上限
+ v% u: g7 R+ P+ O6 s3 bu0 = [0,0]; %y初值  k: J% k" N4 m$ |
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];8 q  d! i* m5 V) l/ j% `0 O
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 d# Z- G3 Y( g4 j: k
yexp=[a,b];
9 P+ W* C* l' q% 使用函数lsqnonlin()进行参数估计
& p4 p2 S- C  L% l$ `/ ^- V
2 O0 {; ?4 n+ j/ J. O$ U4 s[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...1 B' k2 ^7 V% d8 d9 O
    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],u0,yexp);      
6 }+ a7 m, H  D% g" I1 X- y2 |ci = nlparci(k,residual,jacobian);
  k& H2 s0 f  Y: s( [5 O! B1 |fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1))
7 ]% F7 W  L7 m. \7 l/ Nfprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2))
  [+ q0 a3 N7 }/ ^fprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3))  5 t5 P2 G& k8 Q+ B* D0 t5 M" D7 r7 O
fprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4)), @) g" ?% r/ B! l! B" D; b
fprintf('\tk5 = %.4f ± %.4f\n',k(5),ci(5,2)-k(5))
+ C8 S9 W; ?" G% I' qfprintf('\tk6 = %.4f ± %.4f\n',k(6),ci(6,2)-k(6))
/ d" o. o- v1 B) F" vfprintf('\tk7 = %.4f ± %.4f\n',k(7),ci(7,2)-k(7))
1 J! g  }2 }: i* I9 Cfprintf('\tk8 = %.4f ± %.4f\n',k(8),ci(8,2)-k(8))3 J+ j) k: v7 Y! h2 [
fprintf('  The sum of the squares is: %.1e\n\n',resnorm)
! M  Z7 S1 _7 ~! F" K6 D) j' i( m1 Xfprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')* i: X# d: s- h3 A1 W
%目标函数
7 }1 ^& }1 Z& D" h( i, h( X& Tfunction f =ObjFunc4LNL(k,u0,yexp)/ h% N0 F7 h! M* p# ~* }
global theta Pt Ac R T Fa0
6 Z# i- N& M5 _0 h# ^! z5 Itheta=zeros(5,1);
3 Z' I6 D3 I0 }2 D" ?7 Br0= 1.24*10^-3; % Outer diameter  of the membrane, [m]
7 A+ d% d" {, U8 I8 o  S& Ori= 9.4*10^-4;% Inner diameter  of the membrane, [m]
9 y' r$ H; R" ?r=(r0-ri)/log(r0/ri);% equivalent diameter ,[m]
) }9 x3 P( p% _, w% w( I9 z& tPi=3.14159;
7 M- E( N+ L3 |" s5 C* UL=0.05;% membrane length,[m]1 s" }$ y+ E2 d$ j/ L$ Y! n" b
Ac=Pi*r*L;% membrane area [m^2]! j2 S# u$ q; ]( ]2 n% j: a# |
R=8.314; % [J/K.mol]
) T: q9 g6 X1 _5 }* O- D2 R$ OPt=101.325;# u! I! f5 @2 X- i3 S# D# J
Ftot=[2.678*10^-2;2.678*10^-2*1.5;2.678*10^-2*2];
) G$ N* y" }1 ]5 n. FKmax=length(Ftot);( O3 |- t- a' K% Q

3 {' [5 ]' G2 zT0=600+273;% Inlet temperature [K]
3 A4 T! M8 `* D9 S% Onmax=9;( e" Z4 s7 h# W9 m# d
X1=zeros(nmax,Kmax);X2=zeros(nmax,Kmax);7 h. E% D7 _, l7 ^
for K=1:Kmax
8 a: \' g7 ]0 r% G; d) ]Fa0=Ftot(K); % If Pt is the parameter/Matrix; N( B+ T: H$ W& d. I; n& p& W
%Pt=Pt0+(k-1)*1; % If Pt is an axis
0 b9 [3 Y2 u( U; u* t8 |5 |%L=Lsize(k); % If L is the parameter/Matrix
6 Z+ i% a% m, O: v2 T1 a%theta(2)=H2Oratio+(k-1)*1; % If m is the parameter/Matrix
) ]9 ~) N* F+ p5 _theta(2)=3; % F0(H2O)/F0(CH4)' P, S( m6 R1 @: m0 b+ Y3 n* d
theta(3)=0; % F0(CO)/F0(CH4)  i7 l0 a6 c# k! u; y4 i+ E: b
theta(4)=0; % F0(CO2)/F0(CH4)4 h* F  d2 w+ o3 ?( d
theta(5)=0; % F0(H2)/F0(CH4); i* m; z" d: K% q7 S
for n=1:nmax5 M2 g' r- C& F9 e/ q
%delta=delta0+(n-1)*1e-6; % If delta is the parameter/Matrix
1 q: [) e! n* A& R%rit=r0+delta; % inner tube radius [m]
; M5 \; ?" j& @( R# p7 H6 ]' b%sweep=s0+(n-1); % If sweep is the parameter/Matrix5 X. o3 h, S! P$ \+ _( c& P
%T=T0; % If T is a constant
" c* j- y, l3 V) u1 A6 F# mT=T0+(n-1)*50;5 a4 l$ @* c0 h
ksispan=(0:0.1:1); % precision: i* t, {* x7 K/ j- o$ Y; c) P4 P
[ksi,S1]=ode23s(@KineticEqs,ksispan,u0,[],k); % PBR reactor
+ q& l$ n) ^: J" h/ }  k4 J& pX1(n,Kmax)=real(S1(end,1)); % methane finale conversion
( F5 \4 W( C# k+ `' o3 f3 T2 I! _X2(n,Kmax)=real(S1(end,2)); % carbon dioxide finale conversion
6 i. [" I, V$ c/ uend. R$ |' q0 K3 @. \6 x" }
end
1 v$ o3 D- Y; q) ^! bf1=X1(n,Kmax)-yexp(:,1);
- J- u+ |9 s2 P, L5 q3 \f2=X2(n,Kmax)-yexp(:,2);3 }* |2 i7 q1 h  C* C6 f6 h4 r. j
f=[f1;f2];
3 o8 ~, @4 ]  S6 l8 d6 Z" H' d%T0=T0-273.15;T=T-273.15; % Temperature expressed in Celsius  
* V3 E7 K$ l" }3 ]%Tspan=(T0:1:T);5 U. d$ _/ K& L+ I; r4 S) x8 i
%Pspan=(Pt0:1t);
  S! l  o0 m" p%DSPan=(delta0*1e6:1:delta*1e6);
0 ?" O% j6 h  [" w  b  G: q%Sspan=(s0:1:sweep);7 w9 n# o* j; n
%D(:,=X3(:,-X1(:,; % Delta = XCH4(MR) - XCH4(PBR)
. R3 S( |+ |7 E; \4 ]& D8 y# N4 X8 S; f. |4 g! e
function diff=KineticEqs(ksi,u,k)1 x; N8 i9 f# W* W  Q, k! K
global theta  Pt  Ac Fa0 T R: L8 J# A2 t0 `. z
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
4 w1 C5 q, d( {% J7 d6 RP(1)=(1-u(1)-u(2))*S;
7 j0 O, B' Y& U' TP(2)=(theta(2)-u(1)-2*u(2))*S;
/ B# i) g" F& Z! ]. Y% Y% F1 fP(3)=(theta(3)+u(1))*S;
0 l# K/ f0 X" H/ E, x5 BP(4)=(theta(4)+u(2))*S;* F" f# z5 s4 n6 D: z
P(5)=(theta(5)+3*(u(1)+u(2))+u(2))*S;4 o% i* S7 x8 |
% Differential System
' G  N: T  ^% y5 t9 W6 Adiff1=Ac/Fa0*k(1)*exp(-k(3)/R/T)*P(1)^k(5)*P(2)^k(7);
5 o/ `4 b" t3 a6 o: f+ Gdiff2=Ac/Fa0*k(2)*exp(-k(4)/R/T)*P(1)^k(6)*P(2)^k(8);, Q, u5 k: G: i4 s" R+ n" S
diff=[diff1 diff2]';/ P# w  w, T" c2 k! @& k+ |! w
7 Y2 O9 c& q3 ]
运行结果:
- Z4 V' l7 P1 @  B7 jIn nlparci (line 104)
/ x% l$ D+ u0 [+ `1 y9 F  In Kinetics4 (line 15)2 h* L& p& w0 p( U4 @
警告: 矩阵为奇异工作精度。
/ h& y2 }9 U  r: C: e' z5 {" v6 T4 ?        k1 = 215900000.0000 ± NaN# f0 q- S( i0 T: O9 J  h. F  g
        k2 = 4734000.0000 ± NaN
7 f3 F8 j# k$ U$ [( Y        k3 = 174686.0000 ± NaN$ i( ]+ x4 J0 i7 d
        k4 = 149892.0000 ± NaN
: m& h3 Q: T* [& z* Y7 p4 n        k5 = 1.2381 ± NaN
4 r: k/ @! i/ ~1 ]- d8 j, L/ v        k6 = 0.5426 ± NaN
* G; {2 I; z9 }, e5 \: l% @        k7 = -0.3426 ± NaN: {7 k0 m3 U- x8 M+ `: Z2 U
        k8 = 0.4455 ± NaN4 q6 D( r& F- _  W8 P
  The sum of the squares is: 2.0e+002 L/ z2 L+ O3 k

该用户从未签到

2#
发表于 2021-3-2 10:48 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
7 A$ g; P1 N: {8 d' r: C你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )
9 \# G0 t* {7 A6 Y" l, i; ~' U, Q% \2 {6 a- A1 Q, F
然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。
- S5 {6 R1 _7 Z' ^
. c3 |2 b7 D' j* V6 s' p你给的原始参数的估计值的效果9 I# h' w1 [3 ^! ]% m

' t, C, ~* [; c. d" w. V. K% m' ]( f$ |: _' [& t- |

' c4 G" m' a/ K% F0 {拟合得到的两组参数的效果1  I3 K( W( O6 D5 d

6 P% {+ Z7 u. u7 ?
9 \8 P# @5 ]+ ^拟合得到的两组参数的效果22 S1 _) P2 \: A9 d2 m6 w

该用户从未签到

3#
发表于 2021-3-2 11:26 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));4 {6 I" B8 D6 H2 O. p0 h1 ~9 z+ W
你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )
3 i3 k, a% P) d+ M- @5 _- d
3 R, U- P5 ^: R! |& a3 v2 J然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。8 t6 y8 b, W7 J4 t2 M

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 04:03 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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