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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

( f0 _" x7 d; _, M8 ~总的来说微分方程参数拟合有三种方法:/ w& V! `" `5 T/ w
(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。" P  U4 g0 C4 q
(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。
# f' Z1 A5 ?7 N9 \(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。2 A/ s8 d! J  q) g8 M& k( ~
8 g" k+ j  _! y) K5 `' ?" E
为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!
' k. y# ]) {# b7 N& T8 P
3 h, t& v" }" W/ A9 D* H, I5 ]现在假设我们需要拟合如下微分方程中的系数A和B
* c1 S% M! x$ R4 X
: ^- b0 c0 k) p1 D; L其实如果已知A和B的值,很容易求解这个微分方程& }/ @, F5 U* \! z
  • 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)1 S2 j5 l8 `$ t7 i  [
5 X. U9 T( o9 C5 e7 Y. \) B$ U
根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下4 Z/ _7 ]* X# T, o% v
/ i# [& B0 n- b+ N* H

" B) e8 c1 {/ `一、在Simulink中建立微分方程的模型
8 |5 m- W/ x8 @& o至于Simulink的建模本文不想详细介绍,* w' o% e" L- r* D' B$ t

$ d% d7 I0 I1 e  B: h/ A( }: f在工作空间中对变量A和B进行随便赋值
0 C" Z; q6 T! v" `7 A( R
  • A=10;
  • B=20;$ }' L2 n3 `' y4 p
2 m! Q! {2 c/ f* Z& o; R
* M9 v% G' ]" ~. [4 o; Y" i8 w
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。" ~, f# j0 J& k' o5 |5 @4 @
, q1 c/ W* y) |
9 x8 B8 @+ [- T  Y
二、修改模型中的输入输出3 w9 Q0 Q8 \2 j% x3 K: s
为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。: \, R5 M6 s6 M) `+ K( M; M
(1)将“时间”模块替换为,in模块) r8 ^1 E& b  g, s- L1 o
(2)将“示波器”模块替换为,out模块% F9 J+ F& w5 t! ?- |2 r( J8 f

% s8 I4 B  R0 ]4 O3 [0 l- C" B7 @
( `0 k3 x7 [% a+ k/ b0 o三、导入测量数据到工作空间! W" J( y" G4 i* p% g# b7 b" e
将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行- @$ A+ L3 b5 `4 X# \4 `
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);* r/ I  f! s3 b% {; Y8 k

4 Z" w3 D; S" V. i6 g) K
; k' [2 R4 w* @. n" P四、启动Simulink Design Optimization工具并设置: |; W, ^+ B& D  |
当前工作空间有如下变量6 r8 h, V( ]) j3 Z2 h
  • >> 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* k' M9 p8 v8 ]- a

( l. X5 a: Z1 o5 {3 @' \" P4 R+ G; z3 v* v0 V( G
请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
/ j; E$ C' t. r6 a% V
: r* T: w# S) {) H* z8 u# p9 Z3 J; ~2 h' b3 j2 s2 Q
(1)启动Simulink Design Optimization工具/ [; |& q4 M! H5 D- W
通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具
5 a3 i5 j: a+ H+ x, G# k
6 h& D: ?) T$ H5 X. Q! b
" q- N% H% D/ w; Z- j& d$ t" d5 L% v(2)新建和添加用于拟合的实验数据+ f, N% Q8 m; p5 i! r0 l' K
点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。  K. `9 L' v5 e4 j, ]; n

  r9 a  U  |: c5 \3 ], B, l! P点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。
  ^# p$ u+ V/ I3 H % M, p. z& l+ `' x* p9 j

3 s, G7 W! u: w8 F/ ^9 W* c(3)新建拟合变量和参数设置
7 e1 P( N# v: X" n* K7 x点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。
! r' i5 x$ a  b
/ a( {* v% N" W5 j7 ]' ?0 n: N9 _在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。! T1 t: y. F5 ?3 X# e$ ?: I

: |, F3 x! e; i7 Y. D3 d( b: y, }) `. k# ~" x+ l# ]9 a
(4)添加拟合项目,设置拟合参数开始拟合/ e8 ]5 H+ e( q; J& ?- d
点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit1$ ^; W! i& g* B) e
8 g* Q/ p- G% c$ _
点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。+ Z: U1 F' e2 W  m2 d# |+ n

, o) X  X) @* ^6 t7 d( @接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。3 m3 g! `. T, S2 @

2 M6 u, Y3 v5 g" R求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。
1 l8 `$ C6 ^' ], _/ }; C$ M6 Y/ f 9 R1 g/ f9 d% @$ a% o
求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。
; K' v% Q! t( Z; \2 K* q" e* M
3 M5 u6 D8 _, B! G4 ]' C拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值; N( S: e' |; \4 @* e3 C
7 ~: x- r8 q! e3 q
拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。% P3 r# u& Q1 l4 v
5 s5 e7 F: p& ^, }8 i; D
有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??8 y, T& G7 D9 h2 P) N) w

; S7 F9 G. c+ t  ^. i+ W' C(5)接下来还有那个Validation
0 b+ m! {& @& F( Q其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!
2 }% N; I7 @! E% A/ \ & R2 b% b: v  [) R3 z1 C: E
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!/ `. a+ J7 q6 _* |4 D( U6 K; I
5 z% ~; c% M+ E2 ^" C, C/ D
0 q% a# S! r; l6 q2 o$ r% x

/ j' n5 Z) `( X8 V+ X4 v% [4 a  v0 U
( \) E+ f; ]% M+ d2 M1 C5 X# f6 \, w8 h8 c* ]2 a2 t

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 07:16 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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