加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]Matlab 仿真设置和Scope示波器的使用【转】

(2013-11-12 17:15:47)
标签:

转载

(一) 仿真设置:(窗口菜单”Simulation”→”Configguration parameters…”

在了解这些设置之前必须先了解一下Simulink的工作原理:我们在Simulink中连线的过程实际上是定义微分(差分)方程(组)的过程。而仿真则是求微分(差分)方程(组)数值解的过程。

1.       Solver中的参数设置:

 

http://hiphotos.baidu.com/nationfighter/pic/item/393789392fb6dbdbd462257e.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

1“Type”:设置微分(差分)方程求解类型,”Variable-step”表示采用变步长算法。”Fixed-step”表示采用定步长算法。(参阅微分方程数值解的书籍)

2)当求解类型是”Variable-step”时,有以下选项:

1”Max step size”——最大步长,若为auto,则最大步长位(Stop time-Start time)/50

2”Min step size”——最小步长。

3”Initial step size”——初始步长。

4”Relative tolerance”——设置相对容许误差限。

5”Absolute tolerance”——设置绝对容许误差限。

在变步长算法中,步长大小与信号变化快慢反向相关。容许误差限的作用是控制计算精度。当误差超过容许误差限时会自动修正步长。在迭代的每一步(不妨设是第i次迭代),程序都会将计算出来的值与期望值相见得出一个误差e(i),若e(i)满足:e(i)<=max(相对容许误差限*|y(i)|, 绝对容许误差限),则表明第i次迭代是正确的,否则,程序会自动将步长减小,再来验证上述不等式是否成立。重复上述过程,直到上述不等式成立为止。

3)当求解类型是”Fixed-step”时,有以下选项:

1”Fixed step size”——设置步长

2”Tasking mode for periodic sample times” ——设置模型类型。

(4)无论是定步长还是变步长,都可以用Solver下拉框选择求解微分(差分)方程数值解的算法。算法的选择可以参考以下原则:

1如果模型全部是离散的,则对于变步长和定步长,解法都采用discrete方式。

2ode45ode23实际上都是采用Runge-Kutta法,而ode23达到同样的精度时要比ode45步长小。

3ode23sode15s可以解Stiff方程。

4ode113是变阶的Adams法,可以多步预报校正。

关于上述算法具体细节有什么不明白的欢迎和我讨论!

2. Data Import/Export中的参数设置:

 

http://hiphotos.baidu.com/nationfighter/pic/item/550f5d2326adb4bd4723e87f.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

关于这个,我不想多说了,只要理解了simulink的工作原理,应该不难。只是要强调一点,把那就是Ipute栏中的向量可以是两列,如[t,u],也可以是多列。若为多列,则第一列是时间向量,后面几列按顺序依次为对应的输入端口。

 

(二)例子:(包括示波器scope的设置)

1:如下图连线:(方针时间设为10)

 

http://hiphotos.baidu.com/nationfighter/pic/item/3e2d049a86d3cfacc8eaf478.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

Sine Wave参数设置如下:

 

http://hiphotos.baidu.com/nationfighter/pic/item/a408a31226935e996438db45.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

示波器Scope设置如下

http://hiphotos.baidu.com/nationfighter/pic/item/65e9b2037a4130164afb5145.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

 

 

 

http://hiphotos.baidu.com/nationfighter/pic/item/3166ae2e4fe6bc211e308946.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

Configguration parameters…为默认的情况下运行后的结果如下所示:

 

http://hiphotos.baidu.com/nationfighter/pic/item/86f646c71b015a029c163d46.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

若把Configguration parameters…改为:(把max step size改为2

 

http://hiphotos.baidu.com/nationfighter/pic/item/d9e52e16b8702d184b90a742.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

则运行后的图如下图中的折线所示:

 

http://hiphotos.baidu.com/nationfighter/pic/item/a5c7ac8309ab58a66d811943.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

这时在上图上点击右键,在popup menu中选autoscale,这时可以得到下图:

 

http://hiphotos.baidu.com/nationfighter/pic/item/1ee3613c4463cdf73c6d974c.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

至于为什么是这样子我就不用多说了吧?

再把max step size改为1.0,同时确认示波器属性设置为:SamplingDecimation1

则输出如下:

 

http://hiphotos.baidu.com/nationfighter/pic/item/932cd5dc5ee504f677c6384c.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

此时再将示波器属性设置为:SamplingDecimation2

则输出如下:

 

http://hiphotos.baidu.com/nationfighter/pic/item/943ffffd2fe01e9bb801a04f.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

注:示波器的Decimation 设置显示频度。若取n,则每隔(n-1)个数据点给予显示

这时再看command 窗口,有1warning:

Warning: The model '你的mdl文件名' does not have continuous states, hence using the solver 'VariableStepDiscrete' instead of the solver 'ode45' specified in the Configuration Parameters dialog.

这时只要将Configguration parameters…中的Solver改为discrete就行了

若你的Configguration parameters…中的max step size设置为auto,则还会有一个warning:

Warning: Using a default value of 0.2 for maximum step size. The simulation step size will be limited to be less than this value.

这里之所以是0.2前面已经说过了!(0.2=(10-0)/50)

注:若把max step size改小则图像更精确!但计算量会增大!

 

如果我们把max step size改为0.0001,则可以看到输出波形如下:

 

http://hiphotos.baidu.com/nationfighter/pic/item/df2440cecb300b24f9dc614f.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

这是为什么呢?原来是示波器属性设置不对!我们看到示波器属性如下:

 

http://hiphotos.baidu.com/nationfighter/pic/item/4cb6940e69036ff4aa64574f.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

这就意味着示波器只显示从后往前数5000个点,故显示只有横坐标从9.510这一段!

如果我们把Limit data points to last改为100001 (这里100001=(10-0)/ 0.0001+1)。那么波形就对了!如下图所示:

 

http://hiphotos.baidu.com/nationfighter/pic/item/2fc286fc5e9f440f08244d48.jpg仿真设置和Scope示波器的使用【转】" TITLE="[转载]Matlab 仿真设置和Scope示波器的使用【转】" />

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有