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

学习一下用Simulink Design Optimization进行微分方程参数的拟合

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

; j+ o% o, X9 m; ?. n* E1 _$ Z总的来说微分方程参数拟合有三种方法:$ I( ]# |0 r: E* h6 O
(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。
* n$ N# ^* j2 G' t(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。
' s3 s9 L' P" |8 N  }: c( g  G! }(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。
+ p5 e5 {9 x0 ~& R9 R% q, S5 Q6 z( c! @8 n$ d8 j9 B! X
为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!0 @: U' D$ w1 V% Y( n  B- o
9 \3 ~/ X- |: E: i. J4 z' F
现在假设我们需要拟合如下微分方程中的系数A和B  y+ v7 K5 Z, r/ {6 a8 ^
# |. }4 O9 Y" i/ J( n
其实如果已知A和B的值,很容易求解这个微分方程1 f. d* F8 @; v3 O( q+ M% V) R1 o
  • A=50;
  • B=10;
  • x0=1;
  • tspan=[0 100];
  • odefun=@(t,x)A./x+B.*sin(t);
  • [t,x]=ode45(odefun,tspan,x0);
  • plot(t,x)7 X2 k! M5 S, y* x+ r1 c6 i% ]  i
2 t3 E0 c- z3 e  P: p) n4 }  T
根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下
% Q% s4 ^/ v8 }  `' A6 A
. l! V0 \, X7 M  {4 c9 y$ R4 B
( K# D" [* q' @0 Y; ^一、在Simulink中建立微分方程的模型
( F6 d; r/ ]  f2 z1 r至于Simulink的建模本文不想详细介绍,
, `5 e2 ]7 O% R) a  n ! g: R& g# \9 y& Z3 A
在工作空间中对变量A和B进行随便赋值
$ h: S- L$ |2 e
  • A=10;
  • B=20;
    1 n1 a' O9 i+ R% j7 c4 r

, g, t5 W$ L$ H7 r$ m, N; z! o) S" t* I
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。
2 ]) s* W1 u8 g1 L4 d 1 D* F8 u. u( p  [: S, W- Y9 o

+ f) C! }% V7 M; Y& u% y二、修改模型中的输入输出
- x& W3 N0 V2 Q3 ~  c为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。
9 L6 a! s3 Y+ j' v' @(1)将“时间”模块替换为,in模块
. m4 `- ]6 Z8 J0 q7 ?(2)将“示波器”模块替换为,out模块; L- P1 W* d8 y' d- Z

4 s% }; I! x/ M" F7 l7 g4 G+ ]
3 X' i" f* @+ O/ Q: Z: X. F三、导入测量数据到工作空间1 e- f" b: p* h* f) e
将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行0 T5 o; z3 t, p; H9 x' C
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);
    . U7 y- M* b' E1 R+ P7 I0 f6 B4 `" K
7 W2 |: V$ |* ]3 N/ |" H+ a4 R
" R: D. O3 O, W  Q" j* ~' ^
四、启动Simulink Design Optimization工具并设置
7 {3 l! @6 a- S3 e& V% L! _当前工作空间有如下变量
% c# S$ \5 I& U
  • >> whos
  •   Name      Size         Bytes  Class    Attributes
  •   A        1x1            8  double
  •   B        1x1            8  double
  •   t      8893x1          71144  double
  •   tx      8893x2         142288  double
  •   x      8893x1          71144  double
    6 h8 N" ~, T+ Z" b8 z  q
2 J9 Y& Z+ q  Y" A- Q7 W

7 \: R- i( [/ `- v5 v请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
# z4 S( a0 a, d! u; n) \4 S, b3 h
0 R: \) x$ b" Y; w+ t! }1 B8 e5 E, Q- y( k) F
(1)启动Simulink Design Optimization工具! d: @8 a" \* U* {7 X2 F
通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具
  u3 `0 J) P# \
3 m, D0 L( Z0 D1 l8 K4 [, @
4 X8 X0 \7 v$ \( Z$ M  o(2)新建和添加用于拟合的实验数据
5 G2 q* y  u- q# ~点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。
; i8 `4 G( _9 L! ? : @% R, x1 B+ r- I8 C% Q: F
点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。" Z/ r: [1 \% ?, I
8 e. |& F7 ~  y3 P1 @& g

5 g( x5 {6 i# Y(3)新建拟合变量和参数设置5 J2 l; D) Y# K: O
点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。0 }* s: v  J9 g" X

# c& l3 L) K( w# O) r4 }在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。
( o& [# g# R  W. z3 Z0 j9 _ . w' t4 t+ s: g& r- s

) V( y, E, `: P6 C) w(4)添加拟合项目,设置拟合参数开始拟合6 f! n$ D7 J) c' I1 i
点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit1
8 d* k/ [( ]5 r8 Y8 Q / x( P$ _$ h2 ?' G
点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。
& `# k- z4 i; j8 n* J' x4 x . l+ ]% I/ Y& S* n5 `: J% f$ T& v
接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。
" l* [4 q. a& ~. Z9 N
' j# ~6 g  z$ U9 y求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。+ v" z. a# T8 f1 [1 h4 r# V& g

$ x7 [, W3 K& ]" z, K1 z6 q5 E求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。
/ T6 F: h* ^1 o6 W, w 2 i- R* a/ ?& l
拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值
* m' Z- P9 T% |
! K" g0 e/ H+ m+ {+ L2 ]4 \9 B4 W& s拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。9 t9 j+ J, ~% K/ ?9 I# \( W
( L5 v& f. s2 V0 X* _$ l+ ?% H
有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??! G( X. b4 m1 I7 ]7 u8 z

: m. w2 [$ u# f8 ~% A% Z(5)接下来还有那个Validation# Y$ X9 c- I5 r+ n4 e9 h$ O6 W
其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!: [  ^; ?% b$ ^1 z  o8 [6 ^' t
' N& U4 L& n# P+ M: Q
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!) Z5 d+ A) D6 h" B2 v7 h6 ]

9 l( E+ u# C# i* ~* D: y, M$ P4 W1 g* j: j7 v7 |: S# K% P
. b6 M. J% L. }
1 A  d6 S  \2 y# z

# O) l  B; m' ]

该用户从未签到

2#
发表于 2020-2-14 19:17 | 只看该作者
Simulink Design Optimization进行微分方程参数的拟合
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 21:29 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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