Simulink建模与仿真-van der Pol微分方程-S函数封装(Matlab --附案例代码)

Matlab simulink建模与仿真-van der Pol微分方程-S函数封装

目录

  • Matlab simulink建模与仿真-van der Pol微分方程-S函数封装
  • 摘要
  • 1. 问题描述
  • 2. 解决思路
  • 3. 附录-案例代码
    • 主函数.m代码
    • S-function函数和Simulink模块

摘要

本文使用MATLAB的S-function模块,并编写了一个S-funtion求解带附加参数的van der Pol微分方程,并使用Simulink模块封装该函数。包含了详细的思路说明和案例代码,是博主之前写课程作业时偶然发现并摸索出来的方法,希望对大家有所启发,如有建议请指出哦。

1. 问题描述

已知van der Pol微分方程模型的数学模型为

y ′ ′ ( t ) + μ ( y 2 ( t ) − 1 ) y ′ ( t ) + y ( t ) = 0 \mathrm{y''}\left(t\right)+\mu \left(y^2 \left(t\right)-1\right)y' \left(t\right)+y\left(t\right)=0 y′′(t)+μ(y2(t)1)y(t)+y(t)=0

若选择附加参数 μ \mu μ x ( 0 ) x\left(0\right) x(0),试编写一个S-函数,并封装该函数,构造一个可重用的Simulink模块。

2. 解决思路

(1)使用MATLAB自带的S-function模块,基于上述微分方程模型,修改对应的脚本,编写vdpsf函数;
Simulink建模与仿真-van der Pol微分方程-S函数封装(Matlab --附案例代码)_第1张图片
(2)新建Simulink模型,将该vdpsf函数封装在vdpsf模块里,构造一个可重用的Simulink模块——vdpsf_sim.slx;
Simulink建模与仿真-van der Pol微分方程-S函数封装(Matlab --附案例代码)_第2张图片
(3)新建m脚本,向vdpsf_sim.slx这一Simulink模型中,输入模型附加参数 μ \mu μ x ( 0 ) x\left(0\right) x(0),进行计算;
Simulink建模与仿真-van der Pol微分方程-S函数封装(Matlab --附案例代码)_第3张图片
(4)绘制状态变量时间响应和相平面图。
Simulink建模与仿真-van der Pol微分方程-S函数封装(Matlab --附案例代码)_第4张图片Simulink建模与仿真-van der Pol微分方程-S函数封装(Matlab --附案例代码)_第5张图片

3. 附录-案例代码

主函数.m代码

clear
% 运行封装S-function后的simulink模型'vdpsf_sim',输出结果out
% S-function 中调用 'vdpsf.m'代码,实现微分方程的求解
miu=2;          % 设置参数
y0=[1;0];       % 设置初值

load_system('vdpsf_sim.slx');
set_param('vdpsf_sim/Vdp-Model','mu','miu','y_ini','y0');
out=sim('vdpsf_sim');
t=out.t.Data;     % 时间序列
y1=out.y1.Data;   % 状态变量1
y2=out.y2.Data;   % 状态变量2
% 绘图
h1=figure('name','状态变量的时间响应');
plot(t,y1,'k',t,y2,'r');
legend('y1','y2');
title('状态变量的时间响应');
xlabel('时间/s');
ylabel('y');
h2=figure('name','状态变量的相平面图');
plot(y1,y2);
legend('y1-y2');
title('状态变量的相平面图');
xlabel('y1');
ylabel('y2');

S-function函数和Simulink模块

不确定如何上传,源程序如有需要,请留言,有需要我看见会私发哒。

你可能感兴趣的:(MATLAB,经验分享,案例复现,matlab,开发语言,笔记,经验分享,算法)