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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
代码如下;
3 }9 b4 d7 _0 F3 t) N0 Y& Dfunction Kinetics4
( }- C7 m& M7 ]4 I* Y" N: Rclear all
; ~' y- M+ |2 E' N0 s7 X2 iclc/ @6 B0 [+ _* k* |; K6 ]
k0 = [2.159*10^8 4.734*10^6 174686 149892 0.99 0.7 0.5 0.78];%参数初值,其实是不知道的  
, a% b. c# s5 f' S- xlb = [-inf -inf -inf -inf -inf -inf -inf -inf];                   % 参数下限
9 y- ^) k- L! f4 ~) E: @$ d- X) M" {ub = [inf inf inf inf inf inf inf inf];    % 参数上限
2 ?3 T- n0 W* K' e0 nu0 = [0,0]; %y初值; F& x5 ^$ y  `' ^# K
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];$ b8 S8 ^. g, F+ f# ?' }4 v
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];% O' c) L- A. N" k$ @
yexp=[a,b];
  R) T5 ~8 {' {9 _% 使用函数lsqnonlin()进行参数估计
6 |& N9 Y7 l7 _  o8 J. Z) m1 C$ U6 i2 {
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
* Y6 O$ _5 k* Y$ `. T. I4 p, W& P    lsqnonlin(@ObjFunc4LNL,k0,lb,ub,[],u0,yexp);      
+ O( ]3 |' k$ q% Q1 o1 }ci = nlparci(k,residual,jacobian);& H- B6 [4 {7 `
fprintf('\tk1 = %.4f ± %.4f\n',k(1),ci(1,2)-k(1))
7 A) W1 Y6 J* ^# ]1 U* }& ]9 ffprintf('\tk2 = %.4f ± %.4f\n',k(2),ci(2,2)-k(2))
8 r; A) L. S5 l- n8 qfprintf('\tk3 = %.4f ± %.4f\n',k(3),ci(3,2)-k(3))  
3 Q* C$ J* x6 @9 \: Zfprintf('\tk4 = %.4f ± %.4f\n',k(4),ci(4,2)-k(4))/ l+ w( s' B: K0 f( q
fprintf('\tk5 = %.4f ± %.4f\n',k(5),ci(5,2)-k(5))
& ~6 E4 s1 M8 m" Xfprintf('\tk6 = %.4f ± %.4f\n',k(6),ci(6,2)-k(6))) q! l* a  _, ]9 D9 b
fprintf('\tk7 = %.4f ± %.4f\n',k(7),ci(7,2)-k(7))
% j' X2 a' ?2 K' S& ~& Cfprintf('\tk8 = %.4f ± %.4f\n',k(8),ci(8,2)-k(8))
( Z% Y; h* f7 A2 I+ vfprintf('  The sum of the squares is: %.1e\n\n',resnorm)
, R7 L+ U' `  m( W  w3 X9 r  ^fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
7 n# O8 }- J; I. P' T' S%目标函数$ ?& _% A  m" O2 f
function f =ObjFunc4LNL(k,u0,yexp); R/ |. {4 a6 [0 U
global theta Pt Ac R T Fa0
) u1 {  w7 {4 y2 x# }. L0 |theta=zeros(5,1);9 ~* t. x* U+ D1 Y
r0= 1.24*10^-3; % Outer diameter  of the membrane, [m]
6 r8 j! G8 |; ?6 H; Z& qri= 9.4*10^-4;% Inner diameter  of the membrane, [m]! F8 _3 P& _8 v2 U+ d& _
r=(r0-ri)/log(r0/ri);% equivalent diameter ,[m]
) ?, w) p2 K! c, l6 c- Q7 WPi=3.14159;
! W' D5 e: {. R$ Z: ?8 R0 E! \% J) nL=0.05;% membrane length,[m]8 K4 V$ n4 w; N7 z. L
Ac=Pi*r*L;% membrane area [m^2]
, N( T8 {# Q2 M, G6 k" pR=8.314; % [J/K.mol]: }3 R0 U8 \0 n& K
Pt=101.325;
1 R- F# F, n. D7 ^' L( B/ d8 aFtot=[2.678*10^-2;2.678*10^-2*1.5;2.678*10^-2*2];
6 j# ]) X! q- k6 L! |, ^Kmax=length(Ftot);8 M( A3 _$ m7 r- Q; V) V% h

: ~5 D, b2 D0 H, T  aT0=600+273;% Inlet temperature [K]
' G0 M! M2 C" w4 q7 V4 Vnmax=9;# p! w4 {4 b! l
X1=zeros(nmax,Kmax);X2=zeros(nmax,Kmax);
: B* u4 L- p3 ?4 }$ C% E7 m; kfor K=1:Kmax( p0 C4 C: v- q
Fa0=Ftot(K); % If Pt is the parameter/Matrix4 c0 T9 y9 c# @) [# ?
%Pt=Pt0+(k-1)*1; % If Pt is an axis
% f& x8 G9 v) U$ X" m%L=Lsize(k); % If L is the parameter/Matrix
2 X; L7 U1 J* b%theta(2)=H2Oratio+(k-1)*1; % If m is the parameter/Matrix
7 O8 K! Z8 J+ Rtheta(2)=3; % F0(H2O)/F0(CH4)' @, X9 n# J6 {. [+ S+ A
theta(3)=0; % F0(CO)/F0(CH4)
9 g* M1 l* f2 J# L1 z3 Xtheta(4)=0; % F0(CO2)/F0(CH4)% v8 }8 ?0 f% j& H. d0 A/ z( F
theta(5)=0; % F0(H2)/F0(CH4)( g) u6 u+ l% ]( N) ^- Q* k8 s! k
for n=1:nmax$ k, q6 x% E/ l2 x3 _) x6 l; R
%delta=delta0+(n-1)*1e-6; % If delta is the parameter/Matrix5 V8 l0 B1 K1 k$ B* z0 ~
%rit=r0+delta; % inner tube radius [m]" S8 E' r& E0 B1 r" I- `2 G3 G
%sweep=s0+(n-1); % If sweep is the parameter/Matrix
1 f, d4 ]% ~( l) P; r" ^( R%T=T0; % If T is a constant
, E* ~1 s5 ^+ g% ^0 L' a. jT=T0+(n-1)*50;0 G9 x3 n* g- k: l+ v" ^; @1 g/ {5 k7 L
ksispan=(0:0.1:1); % precision
5 W6 ]3 {( `: D  ][ksi,S1]=ode23s(@KineticEqs,ksispan,u0,[],k); % PBR reactor" }1 _1 _8 Q% _- ]! r2 M- v
X1(n,Kmax)=real(S1(end,1)); % methane finale conversion
" J$ B; s  V' Z7 F8 ^  C9 vX2(n,Kmax)=real(S1(end,2)); % carbon dioxide finale conversion0 U5 U5 l5 u' {5 K' E! F( h& k
end
8 |+ ~5 a. M# P# @; C4 u5 `end
, S# A% p$ d: Xf1=X1(n,Kmax)-yexp(:,1);
/ C' [# V. w* z$ z- s: V: zf2=X2(n,Kmax)-yexp(:,2);7 ?2 o* U" c: Y) N& n$ [
f=[f1;f2];8 {9 i9 R$ L3 c. a
%T0=T0-273.15;T=T-273.15; % Temperature expressed in Celsius  9 P5 b2 Z/ r  k3 p5 T: a# a
%Tspan=(T0:1:T);3 R! Z8 z4 v  s+ i, D
%Pspan=(Pt0:1t);
: m: S7 v: c8 y, g2 z7 l/ o% V%DSPan=(delta0*1e6:1:delta*1e6);
1 q+ z0 Y) L3 _: p%Sspan=(s0:1:sweep);
* _2 _& P, p+ g6 c! ?%D(:,=X3(:,-X1(:,; % Delta = XCH4(MR) - XCH4(PBR)
& N* q( A& J, O; y, j6 o9 v  t7 A- p5 f
' R0 [( u( [/ E5 x: @function diff=KineticEqs(ksi,u,k)
2 P9 l8 M: A" [/ v' Uglobal theta  Pt  Ac Fa0 T R0 `1 Q1 J% y. n$ X, c
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
5 {1 C* S" j" ]/ ~P(1)=(1-u(1)-u(2))*S;9 V# ^5 J" y( l3 d* ^, e4 i
P(2)=(theta(2)-u(1)-2*u(2))*S;
9 `9 X' w! @5 n; aP(3)=(theta(3)+u(1))*S;
/ b' v7 K4 |9 w8 T# m0 c, h2 ZP(4)=(theta(4)+u(2))*S;
, C- V! j& _+ j9 c4 L7 e$ B: x9 oP(5)=(theta(5)+3*(u(1)+u(2))+u(2))*S;
0 u- v/ X; T) F. f0 Y1 j9 f8 l% Differential System
! ~- W# K' P5 u5 o' u: ?diff1=Ac/Fa0*k(1)*exp(-k(3)/R/T)*P(1)^k(5)*P(2)^k(7);
+ s% v4 c$ x$ X; M8 Gdiff2=Ac/Fa0*k(2)*exp(-k(4)/R/T)*P(1)^k(6)*P(2)^k(8);% S! u8 Z( s0 g0 J  C
diff=[diff1 diff2]';8 H# r: q" B% T

( Y" L$ [8 x% ?; o; C. ^运行结果:
6 b# J, H5 d% Z$ n: H6 K% RIn nlparci (line 104). _( Y* W9 U5 ^+ F4 C
  In Kinetics4 (line 15)' ?. z* V$ D- @& v
警告: 矩阵为奇异工作精度。, a0 R. g8 H( ?) j: b- b" g# P
        k1 = 215900000.0000 ± NaN1 w/ O0 t/ [, C* f: i
        k2 = 4734000.0000 ± NaN# h1 _( E/ s# L  m4 ?  d' ]
        k3 = 174686.0000 ± NaN9 U) p! Q( Z) [, O
        k4 = 149892.0000 ± NaN. ^( K2 w- Q: P' M! d( ~# d
        k5 = 1.2381 ± NaN
' V% D9 V8 \% j7 c; X5 M        k6 = 0.5426 ± NaN, F/ _1 f: k" g; D# f4 f
        k7 = -0.3426 ± NaN
3 \0 l$ |* Z  ~0 I7 y) U% z        k8 = 0.4455 ± NaN
. l, D. u. A" ?! m0 p2 L1 f  The sum of the squares is: 2.0e+00+ R' v  [0 l6 e$ g! w7 g

该用户从未签到

2#
发表于 2021-3-2 10:48 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
. e( J- F8 p1 Y" Y你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )
& ~0 F& w! h/ ?0 t% h$ |) d8 j' u$ [3 {2 a- K
然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。& u' A9 p; o1 L6 L0 q; P1 J9 }
) b3 n& E& s; E' E
你给的原始参数的估计值的效果
: m6 l1 K, w' Z! x% U/ ]+ M, n: @; R1 d4 B, r

3 r6 d- `3 ?9 }. P/ n
% x2 S( V( N0 `0 X3 e) V) }# {, a* M拟合得到的两组参数的效果1* R% x+ \* N7 m7 \

  t2 |9 H; @: b! A! K5 o- {' y  w: O$ E  R0 \
拟合得到的两组参数的效果2
2 u3 @% U5 c" R% r2 Q

该用户从未签到

3#
发表于 2021-3-2 11:26 | 只看该作者
S=Pt/(1+theta(2)+theta(3)+theta(4)+theta(5)+2*(u(1)+u(2)));
. m8 v6 J. y, D% E# J$ k/ [你确定没写错??你自己文档里面写的分母可是( 1 + m + 2 * x_1 + x_2 )
8 L3 b; B# V: B# D) s+ |
* l, o! C- w) Z6 e2 a然后,这个拟合太耗时,你给的参数上下界太大了,导致随机生成的数据,很多组代进微分方程组去运算起来非常非常慢,至少先去看文献也好查经验公式也好,把数量级、正负号之类的给限制一下,要不然很难做优化。, e  b: @# F3 W" p7 e

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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