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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
7 g# `( c2 ]4 L: D3 R
总的来说微分方程参数拟合有三种方法:; p# G: a5 l" y- X! }
(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。/ }6 {" e- ?6 ?4 l9 `, ~* Y
(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。, |* z" \4 C3 ?
(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。- M4 ?* h: _, E6 r5 b5 C

$ r. L) x2 |8 l$ K5 V- }为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!6 E( i8 T: M* f6 \' O% |- A

2 S) g' e* I. u& G+ O) f3 h现在假设我们需要拟合如下微分方程中的系数A和B; Y9 l) Y$ c2 _- i: u: ^

* n4 P% a( p8 k( c% J9 ~其实如果已知A和B的值,很容易求解这个微分方程
; Y4 a4 @: M- ?% b
  • 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 t8 j6 _6 f% a: p
% c( L( m2 r' t: u* d" i: ^
根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下
; H$ z+ h8 U. H# F7 e. G6 v3 t
# g" a+ E; O8 d6 d& @- w% D
5 T7 ]& c" m! ~( Y/ }8 V一、在Simulink中建立微分方程的模型& G, S7 r* {, p/ d
至于Simulink的建模本文不想详细介绍,( o: k. C! ]0 y5 i

: |4 ^- H) K: r0 k" v在工作空间中对变量A和B进行随便赋值
9 o' Y3 M; X/ G1 t
  • A=10;
  • B=20;8 x* I1 ?( @6 y" U. ~% Z
$ z! U( I6 O5 `: M$ F1 a8 t
6 S% j; H7 K& p  g
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。  b# G1 ~/ I1 ~8 y) g4 K
9 L5 U( B: w7 }7 P! h1 o! Q- a
* R2 V3 X+ {4 _4 F1 {7 B* _
二、修改模型中的输入输出
& |/ ^2 L5 ~$ ^4 @为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。3 N* n( r5 _- e; E* F1 B" {
(1)将“时间”模块替换为,in模块
3 Y/ {5 M3 y+ W(2)将“示波器”模块替换为,out模块
5 |# A3 z( g, z, S3 X+ L% k, {
- B' x& _0 ?! r; \3 Z; T  u- }1 L' o& _3 z3 B; _9 {2 ~( Q
三、导入测量数据到工作空间
/ h$ J3 x" D* T4 u, {1 E将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行
) a- k9 N0 K4 w' d+ X3 o# N( V
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);4 u* Z" g; T, V3 m

. i6 V  E) c0 a, _2 ?# D$ k
0 C; W! Y& I3 ^4 e9 x四、启动Simulink Design Optimization工具并设置4 G  O( C& R4 w0 E
当前工作空间有如下变量
& `9 c+ S- ]9 H; T) `" N5 X0 k+ B3 C. [- k
  • >> 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
    2 n7 m7 S2 M6 _3 K, L/ T" z% O. D
: H9 t! f/ p8 t6 b  @; K8 E

& g, F: G/ s- c9 h请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!3 d: s/ \5 p4 n( F- U% B, T

6 ]" h  \7 p+ L; o  ~% b9 O: R. O- K: ]. b. w/ X
(1)启动Simulink Design Optimization工具
; _& Q! j# ]) {* l7 W通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具$ k! L- A" R5 q) y3 [* q
4 O6 @* E3 `$ r" h2 V9 |" E! s: s3 K# \: I

. k% B" K8 a% w- J) A* i(2)新建和添加用于拟合的实验数据2 W3 P+ N6 I% W% @
点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。
! n, k) w6 Y% t/ h6 R0 M
% g! h( A* c- z7 R! f  G, u$ s点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。
$ o* O( O6 y/ {) d5 Q" U ) t: K$ y7 m2 V" `& z* g1 Z: U) d- @
; K' N9 h9 f& H' n
(3)新建拟合变量和参数设置# b. X: N* s, A# W  a; h
点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。
  z) q" V* D  f* R' M' U- w
$ t" k$ k% t, h& F. {: o在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。
5 }3 W; O8 S( m5 w7 }
5 @$ k" B7 p% J5 C3 Y& a4 b# t: j; X# \6 G5 h2 Q
(4)添加拟合项目,设置拟合参数开始拟合
$ I% ^. t9 q. `+ J4 o+ G点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit1
8 S5 O( G3 d9 C4 v) V; U
  S2 ^% @- l) X" p" K0 c( R点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。
8 F! g  j0 e, E' ] ( c) _- E! Y% D! `2 R
接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。$ p; \0 `  }, S. [' b

. K- A3 W% l/ z) F求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。+ Y, z3 T' s5 f9 f- U# B5 _

8 L; ^( ~9 c: w  `( v2 N求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。; J* t6 {+ h6 o9 L8 U) B0 x: v- z

5 v) F4 J6 b5 p+ s( q- f* K" N拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值* m- Q! [4 R" P, J6 f
+ Z$ }, R8 U; F5 A2 ^  J; r9 \
拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。
  F* {( z+ Z3 Q2 ?# {2 j/ H. r0 V/ L2 I8 |8 r3 ?- q
有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??4 e- a$ m7 G* e+ e( f: x! k; p! D3 R, @

- p0 @: h4 Z$ e, G( W- @(5)接下来还有那个Validation* V0 p" L& |! l: n$ C$ V
其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!4 B2 [( x* |3 l' L

& J6 B! K8 C6 B% o最后看下拟合与实验数据的残差,看起来还挺不错的嘛!
& S' z8 m2 o$ ^3 y3 I5 }* B5 }# n - J' _' y" B5 T) [/ C! Z: [% n5 B
& P% o  i  E8 y* T9 `
6 x0 e, z. c% U, X" [( D" o& s

( z- d9 H+ f/ J. O( t2 R& k  i  F) {$ y" B

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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