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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

! C5 r+ C+ a3 q2 N% j- C& t  q总的来说微分方程参数拟合有三种方法:
/ l2 g# t; d( p  X7 n5 N(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。. v7 ~+ d; j0 ~8 _8 W* U' ?
(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。
  v5 ^: a! n% m& W, x(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。3 [, a+ N5 U: V$ k

; Q6 x) z4 t4 q9 f为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!$ a" v; T  S- W$ }, T' n0 B
% y) ]4 ^$ o/ g; I; M0 ^. D
现在假设我们需要拟合如下微分方程中的系数A和B2 i, ^, a# L) o+ V

& X  t2 f1 ~* H2 s" K其实如果已知A和B的值,很容易求解这个微分方程- D0 N0 J( C! o5 f  _5 R' s
  • 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)
    ; D4 o' a  b& ^& l
2 p1 Y( o& S! ]& L1 b) w
根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下
- {9 ~* r* @) A9 i* [) h8 V ! T1 I6 k2 E& F/ r& f( T

6 H1 m( K; j+ j一、在Simulink中建立微分方程的模型
7 U- ~6 f2 ]: x0 N& J) Y0 D+ z' N% Q至于Simulink的建模本文不想详细介绍,, s0 f; ]% [( U0 U

; v: ~$ p, z* y! @: b: @. k, O: u; |在工作空间中对变量A和B进行随便赋值
/ Z% ~$ L1 v7 ?$ F/ m  V
  • A=10;
  • B=20;
    # g- O5 x4 R) A: s9 ]! e

9 o% g1 Z9 ~! n! h' W3 U$ G1 E
, H( M# }7 Z1 I" t# W5 A. d然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。
  l7 ^  l" {4 ~1 u  z; K* J
3 q  N' y7 Z! g2 p5 _9 P3 E
' Q$ j0 s! K: Q& V) x二、修改模型中的输入输出1 y- p+ ?) i+ H8 I0 c8 P) _
为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。$ }7 K9 s" T* U8 x; s" }! J
(1)将“时间”模块替换为,in模块7 [5 D+ q7 U1 |# }- ?
(2)将“示波器”模块替换为,out模块
$ \+ P' |$ O' @& N , Q  d- d7 F6 d" c) j
9 Z# S. I# @5 ]: V: a$ u! [7 Q
三、导入测量数据到工作空间
8 \! `  t) K5 E0 W' p将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行4 G$ b; Y) s. _- a7 P3 K
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);5 t6 ~- G6 C, E3 a
  c( w' c9 r- m7 y
' L/ `( z( {! Y8 U
四、启动Simulink Design Optimization工具并设置$ M+ L5 l, l3 E' g- q
当前工作空间有如下变量; q' J, g- V1 V/ x3 w" c
  • >> 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. T) j8 o% |- n/ m1 Y0 z

- S" {7 S3 S# G5 R' u6 R: p
( e6 q' Q! m& h" R0 [, W& U请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
! c5 s) y" `- S. G7 b5 F2 h  Z, Y6 _
, i( O/ |# I+ \* g% p' T; E
9 _1 n" B. z5 b(1)启动Simulink Design Optimization工具& A1 j4 G( Q1 W; r* y4 M/ O
通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具
$ l5 L$ C- D/ @. C1 L
# q& M/ Y* D9 r
$ N% _1 H3 V8 I( p! w(2)新建和添加用于拟合的实验数据4 V, M  f6 G; R) n0 T
点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。
- I* A) q, t' k$ ~4 G ) n. n% b7 Y+ I6 A% c! ]9 p* s
点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。
# I0 q, o: h9 w2 n 3 B, M- z/ k6 K1 M6 p& C$ m
- |* ], K! y1 J! ^5 F( m0 I3 Y7 \0 K
(3)新建拟合变量和参数设置
& t7 x* _8 R. g; Y: I点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。
* p0 F4 ?2 }0 {1 C: b# {1 @ 1 }0 d) w% J& J2 S% s* n9 Y, ^
在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。
1 S0 M+ u. t4 k
9 S* `8 \/ t% N8 u+ @
& f4 e' v4 k& h: @6 w(4)添加拟合项目,设置拟合参数开始拟合
* G5 [& ?! p) j; w$ s  T4 T点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit19 t* T0 ~( [5 S5 M8 t8 u

5 t5 K9 ~3 ^3 f, ^; ~  l- ^点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。
' M. L2 \/ [; o- [ $ _" I: U6 \+ t8 j5 R. _. E
接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。
' z; C, V/ x' Y; a, n9 t8 i) X 9 ~9 O* \- U! f# ~' s) C8 A. b6 x1 a3 ^
求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。+ u1 E1 K9 t5 f7 K0 q
* Z1 z, R4 T; f' G; w) M# S
求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。2 T, d& |" s' d4 v; o  l! P) I% |
1 ]  p5 ?; v% F" T: _
拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值
# T( D1 Z  R4 T- J1 j5 j " Q8 X9 v0 ?  l0 Y# o$ E
拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。0 {  m* U1 z# y/ i; E& x7 ^
6 ?$ h# {  l( p6 l2 i2 ?
有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??9 h$ q, E4 _% r4 ^; _* f) S

% g  x1 \+ _- H7 }: g/ V. w& G: O, X(5)接下来还有那个Validation
0 s" T) E+ |! ~5 G' [# L3 G其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!
) B" m* a9 B& }: f1 Q+ d! N3 W7 I8 A 4 P, _" V7 V8 r1 R3 A
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!4 d5 y8 U6 D9 U4 w
* |' f  `* k' u

! ~  a7 c% i1 b/ K1 \8 V* J( ]+ m$ x7 @" U4 ~, N, v2 a( [- Q; W

: G" i4 f; M9 q5 M* n* `& Z9 L

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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