作为三大数学软件之一,Matlab在数值计算方法的能力首屈一指。求解方程是工科学习和工程计算中最基础、最常见的问题。掌握利用现代化工具求解方程的方法对于提升我们的工科素养至关重要。
现在疫情还未散去,全国大多数高校都采取线上上课,甚至线上考试的方式。当我们遇到控制课程,考试需要带计算器,但是身边却没有的情况,Matlab无疑是大家的不错选择。
今天给大家分享一段代码,可以有效求解根轨迹的分离点、闭环函数特征根、相角裕度、幅值裕度、多项式展开、解方程组等,还可进行观测器的设计、能控性与能观性判别、求系统传递函数、求Z反变换以及拉普拉斯反变换等功能。
图1 代码详情
由A(wc)=1求截止频率wc,由超调量6%=exp(-pi*s/sqrt(1-s*s)反求s,求分离点, 由相角裕度r反求wc,以及求闭环特征根用的都是solve函数。
关于solve函数的用法如下:
S = solve(eqn,var)example
S = solve(eqn,var,Name,Value)example
Y = solve(eqns,vars)
Y = solve(eqns,vars,Name,Value)example
[y1,...,yN] = solve(eqns,vars)example
[y1,...,yN] = solve(eqns,vars,Name,Value)
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)example
Description
其他和solve有关的函数:
vpa 设置数值的精度(有效数字位数、保留的小数点位数)
subs 符号替换(用数字来替换符号变量)
ezplot 简单地画出函数的图形/曲线(显函数fun(x)、隐函数fun2(x,y)=0)
isAlways 一个判断函数(返回logical 1,表示true)
pretty 使输出结果更加美观(看起来是有分子分母的格式)
我们由A(wc)=1求截止频率wc代码如下:
syms x
F=15/x/sqrt(1+(x)^2)-1;
y=solve(F)
X=double(y)
运行结果:
X =
3.8090 + 0.0000i
0.0000 - 3.9381i
当有多个多项式相乘,但是我们需要每个未知量的幂前面的系数时,这个时候我们就需要expand()函数了,expand()函数用于多项式的展开运算,可以输出标准的降幂多项式。
离散系统判断系统稳定性时,我们最常用的方法有两个:(1)计算D(z),判断其根是否在单位圆内;(2)令z=(w+1)/(w-1),得到D(w),再对用劳斯判据,当D(z)阶数>=3时,没法直接求根,这个时候就需要用劳斯判据来求解,就需要对D(w)进行多项式展开,这个时候就需要用到expand()函数。举例如下:
图2 展开多项式实例
代码如下:
syms x
y=(x+1)^4+0.4*(x+1)^3*(x-1)+(x+1)^2*(x-1)^2+0.64*(x+1)*(x-1)^3+0.8*(x-1)^4
z=expand(y)
运行结果:
B =
[ s, s + 2, s + 1, s + 1]
所以D(s)=s*(s+2)*(s+1)*(s+1)=0。即可得到特征根p1=0,p2=p3=-1,p4=-2。
另外,解方程组、降维观测器设计、能控性和能观性判别、由状态空间表达式求系统的传递函数、求矩阵的特征值和特征向量、求Z反变换以及拉普拉斯反变换的代码一起放在“一直向上的木木”微信公众号里了,有需要的回复“Matlab解方程”自取哦。