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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

: f: g+ q4 k, I9 Q& }% T/ D总的来说微分方程参数拟合有三种方法:
1 g1 r& |4 ?) h1 |" u1 _' a4 t. j(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。
& M# {, `  f, p" d% S(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。
' s# a) x- ~( t* Q5 s: f! m3 O! v(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。
4 o6 |  ]# D! \' W1 X+ P/ t! B6 {# o# S/ [
为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!
3 m. n5 _. C6 \, ]  I' E  [0 T0 q; G0 Q& U( x7 [5 T' Y5 X- B
现在假设我们需要拟合如下微分方程中的系数A和B( Z$ s% p& q; m

) k" o  D7 a3 O- @其实如果已知A和B的值,很容易求解这个微分方程
* x: c! P3 V0 [: I: 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)
    0 E' ]  j5 w2 }* Q

: ?9 W9 p) ~3 o; Y  j* n- f; R根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下
; @2 m" O7 s1 d7 V8 N   c/ N( t. J) q+ c. l+ J, M
' ?/ o. U2 }; F) W" R
一、在Simulink中建立微分方程的模型
8 d# i- E/ P: C7 o: z至于Simulink的建模本文不想详细介绍,
! \8 b2 M5 x: Q4 P! G
. S  c) C# R6 C6 _, v在工作空间中对变量A和B进行随便赋值7 N  O& ^# V6 ~; t
  • A=10;
  • B=20;
    & t: O: y+ K! f9 Q" X( ~
$ L3 j6 {- R, s; M8 m. |* J- d
5 M- ~$ J8 d2 p) c4 W
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。% F1 g. F6 ?" ^) V

+ x/ E! G- E1 Z: J; w( B( m  _7 M: p( E9 d8 h- p
二、修改模型中的输入输出  e8 c* q6 B& h7 X% q9 P0 f$ v
为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。
: P( [3 i9 Q+ M2 O(1)将“时间”模块替换为,in模块% k  \8 r0 }" [/ b% \* B5 B
(2)将“示波器”模块替换为,out模块. H+ |5 a, N1 Q

. ]) f( N" y: b9 P- [0 t3 Z4 E$ Q
" U, Z$ {% B6 `7 P; e' v* r三、导入测量数据到工作空间
: x9 q. S. d* g将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行
4 O. A% v8 Q5 }: k- J: |( S
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);3 Q+ U) I1 x3 F' h, j2 b0 A

1 C7 V# ^) x- c; G) S
$ L; M  m  e) @, Q# P四、启动Simulink Design Optimization工具并设置
1 d, c6 b0 e$ v8 K- C1 [) G) [当前工作空间有如下变量
3 B. }9 l0 ^* k; W
  • >> 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' e2 m" n+ i+ w7 g3 G8 G$ Y2 v

- j+ K4 n% f+ r7 h: \* M+ W! K: H+ v7 l$ T1 V1 y3 p
请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
, L9 t3 k% o! H/ g* I5 V8 W* b
, k. i) o- T4 w( C, v0 N, T- Q5 V! J4 ?( U$ g2 b7 U
(1)启动Simulink Design Optimization工具
5 s' e. i& G3 t; D% E6 n通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具
7 U* _4 w3 y) H 9 E& a, K% t/ p  c8 s

1 j( [, s: T- U1 `# `(2)新建和添加用于拟合的实验数据
* }+ z  q: q# j8 {  Q3 ]$ n8 \. _0 A点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。
* W4 d5 v8 A' y, @ , J3 _9 o$ M& G0 h  Y, i7 r
点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。
9 ^% e8 z1 C' D, w, y   N, s, z' q, G' S7 f6 F/ D8 j
- _5 i3 y, h* O+ W  T
(3)新建拟合变量和参数设置+ e0 E* M5 {% c* X! ~. r# a
点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。
7 {8 C0 F" t1 x7 l; K: u
6 s7 z: N3 a8 k6 X; U3 I在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。
7 v, z1 j8 A# H3 ?5 L% ~2 _3 b
3 S2 J0 T2 U. o8 u, t9 J- t
2 I; z5 Y/ b. Z; b' _(4)添加拟合项目,设置拟合参数开始拟合( d% P  @) M' R. y0 |; A
点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit11 ]* d$ q4 l) T  y  l- ^
& @8 A$ s4 u8 u
点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。* |1 l( X4 D8 K2 r% I& h

$ s# F& v9 O: s) k$ B接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。
& U  {2 _9 w( _: f9 y
) y: S) \0 Z% w/ F' i9 Z9 N求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。
4 y3 n( _2 y7 V& t1 m0 G* M % ~/ t! J; G7 ~: i
求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。& b$ |# s( b$ F' M  U7 q5 {
9 \" t/ W' S- @+ k* C2 R7 P
拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值
# d- w2 e+ E4 J. V- R; ^
1 F; O- i$ W, r- k' K拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。
0 B% ]* h, z' j7 f7 a
# L' x/ Z6 u1 j# N6 m8 n2 K有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??
8 `0 v2 O9 ]# b/ F. `. `  P+ {/ `3 J; Z- I* u, |# m: j
(5)接下来还有那个Validation
8 X9 C! B: w( N* N, s/ G其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!
3 i# i( t2 M/ M) |. n* k9 Y+ p0 Z & O/ K+ j0 D2 d; q# z
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!
/ L; }& y7 a7 z  }1 e6 q- K
' `- O( J7 q0 i
/ H0 K8 [) ]/ R: ^9 ^. j, s/ {" G) [' w+ ?. z+ p+ i; }

' r9 h- n  [0 Z3 U1 @
" o9 V: Y5 I2 S* _5 m5 f8 L2 h4 ^

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-14 22:40 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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