本文内容:非线性系统
操作环境:matlab2019b
一、非线性系统:
非线性系统一般理解为非线性微分方程所描述的系统。由于线性系统的本质特征是叠加原理,因此非线性系统也可以理解为不满足叠加原理的系统
线性系统和非线性系统的运动规律有很大不同:
- 在线性系统中,系统的稳定性之取决与系统的结构参数,与输入输出无关。而对于非线性系统来说,不存在系统是否稳定的笼统概念,必须具体讨论某一运动的稳定性,因为它不仅与系统的结构参数有关,还和初始条件有关。
- 线性系统的自由运行形式与系统的初始偏移无关。而非线性系统的自由运动时间响应可以随着初始偏移不同而有不同形式。
- 常参量线性系统在没有外力作用时,周期运动(等幅振荡)只发生在临界阻尼比情况下,这是物理不可实现的。而非线性系统,在无外力作用下完全有可能发生一定频率和振幅的周期运动,且物理可实现,也就是自激振荡
4.线性系统可以通过输入正弦信号,引入频率的概念表达动态特征,而非线性系统在正弦作用下的输出比较复杂
常见的非线性系统
不灵敏区(死区):
饱和:
间隙:
摩擦:例如直流电动机产生的电磁转矩会产生摩擦力矩
继电特性
二、非线性系统分析方法matlab实现
相平面法:
例1:绘制下列方程的根轨迹
这里用到了ode23函数求解微分方程(大家可以用help指令自行查看这个函数哦~)
t=0:0.1:30;
x01=[0 1]';
x02=[0 2]';
[t,x1]=ode23('fun',t,x01);%求解微分方程
[t,x2]=ode23('fun',t,x02);
plot(x1(:,1),x1(:,2),x2(:,1),x2(:,2));
除了以上代码外,还需要建立fun.m文件来构建微分方程
function dx=fun(t,x)
dx1=x(2);
dx2=-sin(x(1));
dx=[dx1 dx2]';
end
运行之后就可以得到相平面图了~
例2:
这里初始条件为C(0)=-3,C'(0)=0;
将fun函数修改成该饱和特性非线性特性
dc1=c(2);
if(c(1)<-2)
dc2=2-c(2);
elseif(abs(c(1))<2)
dc2=-c(1)-c(2);
else
dc2=-2-c(2);
end
dc=[dc1 dc2]';
end
然后运行以下代码绘制相平面
t=0:0.1:30;
c0=[-3 0]';
[t,c]=ode23('fun',t,c0);
figure(1);
plot(c(:,1),c(:,2));
还可以输入以下代码来绘制时间响应曲线
plot(t,c(:,1));
本文为小编自行编程,如有错误还请大家批评指出~
待更新~下一篇为“matlab中控制系统的状态空间方程”,
另外描述函数法的matlab编程,小编一直没有找到一种通用的方法,希望知乎上的各位大佬能帮帮忙
更新,在simulink下绘制相平面
simulink提供了Nonlinear模块库,搭建好模型之后可以利用XYGarph模块来输出相轨迹
如,在上例中,搭建模型
Nonlinear模块库可以在Discontinuities里找到
设置好对应参数,添加XYGraph,X输出C,Y输出C’
这里给阶跃信号,运行之后可以看见输出的相轨迹
另外还可以在scope的输出中查看系统阶跃响应在时域下的情况