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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

+ Q, S4 {9 Z* s2 v( O总的来说微分方程参数拟合有三种方法:
: G1 C# j; m: Y4 G, i(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。* m$ ~6 q! X; O! U( ]
(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。
; g& y6 S+ G0 n# j5 ~4 N$ c(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。
7 y/ I/ B( q1 K& J2 Z. [
( c% T2 W! X. S0 K* ~6 C; y为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!
: l* c6 J1 t7 Q+ U/ s
& M0 A& e. j, p) \) d; D现在假设我们需要拟合如下微分方程中的系数A和B! U- G5 m/ Z8 g3 o' `& y. o

2 O# D( Z+ o' ^其实如果已知A和B的值,很容易求解这个微分方程
  T0 M4 w7 r% ]& y
  • 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)
    * _& _$ C( @% b2 d

" b0 R" ^# A( P8 ?根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下+ e# X; C- z' w; {. S
' y2 n/ R8 z3 T' |" i

) R2 L8 d. b3 E: J' h8 m$ f一、在Simulink中建立微分方程的模型
5 G+ ]4 ?' W- Y! Z4 L: X+ m0 {至于Simulink的建模本文不想详细介绍,
  v: N- m" r# T: M0 M4 H& \' E8 [
* w* j2 @- R. k在工作空间中对变量A和B进行随便赋值* ]- b1 q3 k8 ?+ _1 y/ B
  • A=10;
  • B=20;8 i. T6 Q* ^% @/ @% C$ F" m
2 o6 o$ E0 a* G# n+ b: B8 B0 Y
7 O% u% O# C6 K  z
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。) {1 t* |; I- T5 v/ K  i- P6 G8 \$ w
: i5 T3 v1 E1 c& X  }

. J# d5 ~- f. l" ~二、修改模型中的输入输出
3 Z) f) c+ c7 ]为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。
9 l  `) V! _6 U1 o' C& |3 x(1)将“时间”模块替换为,in模块9 q; B+ j; ~: B5 Q- u% ~/ i# [3 H
(2)将“示波器”模块替换为,out模块
1 h2 x% ~+ M  D9 q4 D6 [( h- H
  b( C7 b7 P3 v- k% \3 ^) G( P* }1 o" U" K
三、导入测量数据到工作空间, E0 ]# ]" J& a4 [% C5 a1 [
将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行
& ?" X5 |% h, o- ~* x
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);
    4 D+ O7 c8 A! }& h' _# ]

) ]2 }3 I7 [4 S% b( Y& s9 Z7 C& k$ o: v+ q7 X
四、启动Simulink Design Optimization工具并设置
7 N0 e$ @& p( p当前工作空间有如下变量
% i: ^& O: z6 {& X/ Y( X
  • >> 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
    + _5 V: p2 a' F: D% c, B+ k* k

8 ?2 A& H" |" i
4 c0 f1 N0 j$ p: o/ Q! k! V5 ]请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
9 s0 n& C: D+ Q  l3 O / q- E5 ^6 [+ `3 K% M

% y2 b& o2 ~4 p. z+ d; Z4 ^: k(1)启动Simulink Design Optimization工具( g5 \6 }0 M! {! W& P' F
通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具- t  t, }, P3 x2 W' f6 l' b

1 S- b1 R/ F6 U# B$ N6 a4 K  O6 b) o. S/ |# M; M! l# H% M
(2)新建和添加用于拟合的实验数据
4 G; j9 L5 C8 v" E点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。
2 V& W9 U: z# e* d' ^) v+ l" }
; z: q7 T, I7 _2 }' f; s9 r9 h# g点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。1 L2 B7 R7 v7 G) t) o

1 K7 W1 K6 c. }" X: l& f" g+ I
(3)新建拟合变量和参数设置& L+ F, {3 Z* e$ h3 I
点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。3 _8 |6 U% o7 P+ C. I4 P' X

6 S5 [6 Y: {  ~; _, C2 M/ L' M9 k在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。
% N$ H/ E, e5 \+ V, z! w9 V" w' t
7 Z1 O! c7 l" |6 q( }% f
7 l$ N5 s9 z+ |+ U3 J(4)添加拟合项目,设置拟合参数开始拟合
0 H( E6 M; A" o! r9 D点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit1
& I3 N, y' x5 ?8 T0 x) I4 k
9 Y) ?5 @- E( v9 d0 D1 [点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。+ Q2 Z$ e: r+ s1 I( j
9 g  S5 N% a" r
接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。- v) e6 L' _& \$ J* O
! V% Y9 W2 g5 m7 N8 T3 ~1 X6 l
求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。6 t+ z- L! H3 z- d* J! H" k, X' R
7 j* z+ W6 w" P% @- ?- u% x
求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。
& r9 @  }/ f; }3 u5 n9 b / @* p+ ]' I* I8 [4 {9 R
拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值
* R! e' E8 W  l7 I1 y
2 i$ l& ^$ R2 K. H: Z拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。2 H* H  Y$ U5 w% d- r( r. i
3 V" I8 O3 ~. K( X, k+ R4 m
有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??! Y! p" J# i. H: i
+ w8 V6 @1 H' s
(5)接下来还有那个Validation
/ |6 B. b1 E# g9 E7 \2 C1 d( k5 U/ t其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!
7 Q6 {$ }; Z. S! @; v( F   f1 ?4 k" P& q
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!
8 t1 F- P" T2 I2 n! ^- w+ `' a
& U: p- y0 U, z9 Q
" L8 M7 `0 J, q% N5 E6 \; N/ P7 |" j  T7 b8 E8 M

; N2 Z4 G6 M8 E/ h$ w7 _
' q7 S: U% R) c9 k: s. S0 T9 w

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-1 02:38 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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