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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
) e9 e% ^& N1 `' J
总的来说微分方程参数拟合有三种方法:% ^* L" u  n5 x* Z2 [9 e% E5 y
(1)将原问题转换为一个优化问题,就是使拟合得到的结果和实验测量值之差的平方和最小,此时您可以调用MATLAB优化工具箱的所有函数,最这个目标进行优化,比如fmincon,ga,lsqnonlin等。
( Z; x' h. W& v; ^4 f5 Z/ k7 \(2)将原问题看成一个超静定方程组,也就是说一组已知数据构成一个方程,如果有n测量数据就构成n组方程,此时fsolve函数可以搞定这个工作。$ f' }  a( ~; B7 Q; F& k, {4 a
(3)仍然当作一个拟合问题,而微分方程当作一个黑匣子,只是这个拟合的一直数据是测量的两组而已。这个时候lsqcurvefit、cftool和Simulink Design Optimization就可以大显身手了。不过调用lsqcurvefit和cftool函数来拟合,您必须对这两个函数熟悉呀,这个可是需要一定的MATLAB底子,不是一般的所谓大侠能够搞定的。
* n# J* c1 p2 u8 H: h0 O$ v, j0 t8 \! d# _4 r4 W0 ~0 }
为了把大家从编程的痛苦中解救出来,本文就讨论下利用Simulink Design Optimization进行微分法拟合问题(其实所有拟合问题都是可以的)的解决方案,从此拟合问题不在需要写代码!
- W3 l: C" }4 w# r
- w0 ^5 X* [, G1 G现在假设我们需要拟合如下微分方程中的系数A和B6 y( {. z- \* s$ I% y' v
; }) N2 P7 {- Q& I7 z: X$ @( H
其实如果已知A和B的值,很容易求解这个微分方程# X2 m" Y1 j0 A1 C
  • 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)% {. A2 ]0 c8 P6 \( c
: T: D: |/ e+ s! p. k# ^& T
根据工程经验A和B取值范围是[0 100],通过实验测量得到变量x随着时间t的变化曲线如下  W& U* Q- y8 q1 L/ r
! s1 ?* G8 h2 j* F+ A
" b. f0 v: a0 K5 S% t
一、在Simulink中建立微分方程的模型
& e. R" d$ n. z* O) I$ D- t至于Simulink的建模本文不想详细介绍,
* i0 J+ [, Q( |+ w0 c7 ^& A, P9 q
/ g7 Z1 ?4 Z+ r) Q7 m$ ^3 k2 l; z在工作空间中对变量A和B进行随便赋值
: b3 X- O  w$ I, ?: C/ D3 H# z
  • A=10;
  • B=20;
    3 N0 a' k; j; f, z+ U! N- N: E: z
! a9 [1 G8 e7 q" d. E
! }9 Z+ K9 X6 I  p
然后运行模型,双击示波器模块,您可以看到如下图形,请注意这个图形和实现测量的结果是有较大出入的,这是因为我们刚才A=10和B=20是随机设置的,并不是系统真实的参数。0 Y) J2 ^$ H8 U4 s6 U+ b' }
; ?0 q% k, E5 t5 \5 ?

9 I; C6 D$ D) z' p" I' v二、修改模型中的输入输出2 _) e3 Y4 |! @& L8 p4 ^3 w; k
为了使用Simulink Design Optimization,您必须将模型中的输入输出模块修改为in和out模块。
4 _7 J& e: O9 {5 p$ S7 t(1)将“时间”模块替换为,in模块6 |( I' t. V! `# _3 c, u7 P  t
(2)将“示波器”模块替换为,out模块
- W% T2 L. t- d) r  s7 r8 Z3 ]2 F
& ^$ C+ j; ]5 _1 t
3 `+ r# H' c( q$ a三、导入测量数据到工作空间& O1 m8 o5 v7 f; c/ K
将上面测量的数据导入到工作空间,方便Simulink Design Optimization使用,您可以将上面的数据文件下载保存到MATLAB工作目录,然后在Command Window中运行
& R2 {. Z! I# k) W
  • >> tx=load('data.txt');
  • >> t=tx(:,1);
  • >> x=tx(:,2);
    1 ~+ m6 F3 M# v0 f5 i; `6 c( q

4 t/ A# G: ~  c+ Q* h) l0 l3 P  G
% [7 J8 r; @9 I4 T! M四、启动Simulink Design Optimization工具并设置0 g5 R  p" h* Q* _! j# p
当前工作空间有如下变量! P3 l+ J6 X2 [( r' {: W1 p
  • >> 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
    * l1 Y: F% ~# N5 b
1 R8 [+ P& z( p/ ~  k

5 Q8 @" ?5 d3 E请注意一定要给A和B赋值(不知道具体值,可以随意给一个),否则启动Simulink Design Optimization时会报错的!
& L* I5 S8 l  ^3 O 0 T  ?9 Y9 e; L. r1 v! I$ [$ Q
+ |$ Y" C9 ~6 n  J  l
(1)启动Simulink Design Optimization工具
4 V6 E2 ]- O; f! T6 o通过Simulink菜单→Tool→Parameter Estimation..启动Simulink参数估计工具
/ Y6 L8 J, ^# p3 T- M5 m ; X9 o( `: `2 e+ u7 d' s9 k
+ F" A. a9 A" X
(2)新建和添加用于拟合的实验数据! w1 H" s  s" t$ u
点击Transient Data节点,然后New新建一个拟合数据集,将新建的New Data数据集右击重命名为Test1,其实Parameter Estimation工具支持拟合多组不同的数据,本文只有一组。" S) U2 }9 K3 C- |4 m9 w3 N! b
  @) V9 y4 ^5 N$ _+ Y9 ~
点击刚刚重命名的Test1数据集,切换到Input Data选项卡,选择Data标签下面的表格,然后点击Import按钮,从工作空间选择您的输入数据,同时需要指定这个输入数据的对应时间戳Time,方法是选择Time下表格,点击Import按钮,选择时间变量。本文的输入数据和时间戳都是t变量。
% Q$ F# {0 E  T$ c 0 M8 d) r( ]3 X$ o
( W0 }' ]6 q- y) h
(3)新建拟合变量和参数设置
; @  c( ?" k$ v: C点击Variables节点,然后点击下面的Add...按钮,此时工具会自动识别Simulink模型中的未知变量,比如A和B,然后添加您希望拟合的变量,虽然本教程的模型中含有A和B两个变量,但是您完全可以只是拟合A变量,B变量在工作空间中给定,此时只要选择A变量添加就行。0 V0 d2 z) [$ u

% q5 J* s3 w4 [8 @1 a% I+ j在select parameter框中列出了您添加的的变量,选择某个变量,然后在右侧的default setting中对变量的属性进行设置,比如本教程中变量取值范围是0~100等。
. V0 `! c+ D4 S" y+ s- ^
  z6 b3 K( W; _. I% g
0 ~! x1 a' s6 R* ?. M(4)添加拟合项目,设置拟合参数开始拟合) ]* h% [8 d3 F: `
点击Estimation节点,点击下面的New按钮,新建一个拟合项目,同时将项目右击重命名为Fit1
0 \- A$ |1 x0 M; |# b
# O9 p/ a- v3 K, i点击Fit1节点,进行拟合项目的设置,包括选择数据集、拟合参数、以及求解器等。
- z6 C* Q7 M+ f8 n  b3 T% O) V
8 q* `9 C6 R1 U! L接着勾选需要拟合的参数(当然可以只是勾选其中某些数据,对其进行拟合),由于MATLAB优化工具箱的求解器,对初值要求很高,所以初值的选择将直接影响您的拟合效率和效果。由于本案例简单,你随便设置一个都会收敛。) L3 z6 g3 d! u, w2 N& f4 X

, t% K3 O, R  M: Y0 B求解器的设置,这个如果您不知道可以直接默认,当然也可以自己尝试,这需要您有一些优化工具箱的基础,这里不详述了。
$ R3 i* `+ H( k2 b6 p* c* P5 }0 I ; n4 d" ]: U3 `# h$ \
求解器参数设置好了,就可以点击Start按钮进行拟合了,您可以勾选Show Progress View查看拟合的过程。
/ i" H7 r3 @( ~, X& @6 V2 @# @% z 9 f! G/ ~2 I5 [  U: [4 v$ T
拟合开始时,拟合曲线和测量曲线不重合,右边的图显示当前的A和B值6 q# Z# `8 F9 N* m
% K. q/ L9 A: W3 `# M
拟合结束以后,两个曲线终于重合了,有图显示此时A=50,B=10,很荣幸的告诉您,这个就是我提供那组实验数据时采用的参数。
+ S8 @8 Q# ]3 {- G6 r
1 H# F; N( {9 Y; G有时候您也许参数设置的很认真,但是Simulink Design Optimization就是不争气,拟合得到的结果很让您不满意。我只能说请节哀吧,因为Simulink Design Optimization工具调用了MATLAB的优化工具箱函数,优化工具箱罢工,Simulink Design Optimization也只能是干着急,要不换一个初值试试??3 n! b( n+ m1 g! S1 e
, j/ {0 s% |& X8 t* {% l
(5)接下来还有那个Validation
0 g7 z/ @  @( k其实就是绘制几幅图,让你比较下残差呀,以及原始数据和拟合数据的对比之类的,不是什么核心的内容,大家自己摸索吧!
1 G, n- C; {- Q9 a9 q9 {& m( F ' {- S) |3 m, U1 {3 ?- u
最后看下拟合与实验数据的残差,看起来还挺不错的嘛!
# _9 U5 i  W0 e% V% `
/ M0 s9 U& f3 B0 y$ |3 I+ [9 ]3 u' y/ v; c( o5 i# K

( `, b  Z% i- w' s0 }6 n6 _; D
3 u4 `" Z/ N# \- J$ C% J, P5 V+ d0 b* h3 V9 H1 g, f

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 02:49 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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