EDA365电子论坛网

标题: 学习一下用Simulink Design Optimization进行微分方程参数的拟合 [打印本页]

作者: uperrua    时间: 2020-2-14 10:57
标题: 学习一下用Simulink Design Optimization进行微分方程参数的拟合
1 Q1 j- g' k& Z/ |8 E/ f
总的来说微分方程参数拟合有三种方法:
5 R* e& ]+ x' ~  ~4 H(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。* r& {! b3 M' V
(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。
9 [' Y* r- D5 g$ V1 f% h(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。4 W9 a  x% D" R6 C; a
0 e5 m, j6 b. l# I! {& ^) l
为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!# k: B4 \$ [/ n5 \# {; o) o# o
3 M6 ]& |5 k* E! y
现在假设我们需要拟合如下微分方程中的系数A和B
0 i, G7 ?' t1 g3 |
0 Z! B1 S, t$ U+ h! L) }7 Q3 B6 G6 J其实如果已知A和B的值,很容易求解这个微分方程2 S- w8 K, c4 w) C# N
6 `9 T  Y% g2 j( X' _
根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下( _' o+ h8 d, Z4 V
) i' j9 C2 {) k1 S$ p

+ U' v4 ]$ u! S6 d7 A! R( \+ W8 n% m一、在Simulink中建立微分方程的模型2 z, L7 @( J+ e4 F
至于Simulink的建模本文不想详细介绍,. Y% Y) y/ I- b, m! |# B; Y

6 M& @! b# H  D4 s1 u" p在工作空间中对变量A和B进行随便赋值
$ v# N3 m& ^! v4 e% U
( H" M0 b) A/ ~0 X8 t( g: ^1 z+ @% Y6 M: c* c
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。
2 c+ u! S  k1 Q2 S 7 \  m$ R6 ?! K0 P

) ^( ~3 Z, A! v: H- {4 y& b2 l二、修改模型中的输入输出
% F+ g: i" I/ {1 g为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。
! J& I" T# j2 c, O- g( K/ ~# }(1)将“时间”模块替换为,in模块
9 m' U* D: ~8 h  }% f+ e(2)将“示波器”模块替换为,out模块1 B# `6 {9 W" f. |/ W8 K) t
9 r4 g+ h' l8 |

, ^" |& L+ C9 j8 N  h; A9 ~三、导入测量数据到工作空间! q# [# m2 M& Z2 w- @# t: d
将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行9 J; ]2 T3 r: J8 s& H/ Z0 Q: B# {+ k* ^

5 f- e& E' H  U4 |- n% {& m
  h: ^! {  [' ]' p四、启动Simulink Design Optimization工具并设置
/ U  A8 u8 d- M  U当前工作空间有如下变量0 x) U# h' F2 c- }
6 x6 G( \* P9 A

# x1 e3 \) F: q) w, r; [请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
% ]& G- T6 S% y/ W! t9 L  L
- g: k0 J7 V9 f( u" V' S
: L1 w: v5 l0 p6 n: F/ ^9 G0 L. {(1)启动Simulink Design Optimization工具, w: [' L, h, D. D0 {6 s
通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具, X  g* H& c- w* {
! S+ R+ {: b! Z7 G- y

8 Y( ]  u7 H. Y2 a6 t! N9 P. X(2)新建和添加用于拟合的实验数据; z0 R6 z# j- Z. y
点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。
, n- p6 J1 I6 p( [0 K2 K, `0 n + b4 U  Q2 `4 l; a$ m6 `
点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。2 N# W# Q) }& A0 o: D

- U9 Z' ?2 l* B) }3 j% g. y
2 S+ @2 P( }3 r8 e& F8 c(3)新建拟合变量和参数设置
( S1 h4 o8 G6 b' P; }0 W) `9 d, u点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。
5 H+ K- y4 r" w 6 T% z3 q  c2 H$ M+ L
在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。' t3 e" U$ w$ B5 S) I; j6 J
* h& h6 ~; ?# `/ i

4 x* i3 L9 ~5 |(4)添加拟合项目,设置拟合参数开始拟合4 t/ m6 ~5 `$ W2 \# O, G
点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit1
$ R! P. k4 f& p; y) p( ^  D
3 m4 |, b# `5 g0 K% C. \0 f点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。9 \. i" v" q; p* J

+ F, d' Y' q" l( I+ u- o+ A8 S接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。
: T* m( `& J% h- H# o$ E4 b
- ]; f4 M  Y. k9 O# g" Y' ~" X3 P求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。- t' l6 t" A9 g. C  `$ U
* o# D+ ~/ ]1 Z8 H' @
求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。
5 L  o6 O+ ]' } 8 o% X, \3 h/ d) t! l8 y  O6 H
拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值
* ~  n; N: L5 s7 l . n+ D5 M* n" H* o- {
拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。. _/ k" S! W5 o. ]* b

" l. [* T1 l( m1 k+ b有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??
; D, J% B: J: H+ b$ d9 ^/ q2 q9 a/ K; r: y  v9 ^, ?8 Q
(5)接下来还有那个Validation
% t5 C9 l$ Y& f3 ~其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!4 K  l, R" i6 B5 X* H. p
" ~+ Q$ E9 }( q7 h1 Y- S4 u2 {
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!
, E! k3 q; e- A1 ^/ x: a) f   _3 r* {- [! ]% d9 u3 _# s
) L  p6 S2 X7 e. |
# Z* x$ G% ?! A- ]$ O
0 K$ h5 w+ I& V4 k- t) }  u

0 V+ @8 q7 y% S: E6 S
作者: CCxiaom    时间: 2020-2-14 19:17
Simulink Design Optimization进行微分方程参数的拟合




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2