CACSDC:韩京清
Simscape工具
MATLAB语言的变量名规则
由一个字母引导,后面可以为其他字符,区分大小写,不能有变量前置下划线_
eps:判零的误差限,i和j表示虚数的单位
MATLAB将数据转化为双精度的数据结构,而后转化为符号型的数据结构
改进方法:使用单引号转化为字符串(C语言使用双引号)
符号性数据结构syms,sym,vpa
MATLAB的基本语句结构
保留变量:ans
存放最近一次无赋值变量语句的运算结果
MATLAB支持的结构
for循环结构(类似于C语言)
累加函数(从1加到100)
sum(1:100)
向量化编程
tic与toc:计算耗时
conv()计算两个多项式的积
伪代码语句
pcode (不可逆)
已知数据绘图:plot(t, y)
已知函数绘图:fplot(f,[xm,xM])
例:
>> x=[-pi:0.05:pi]
>> y=sin(tan(x))-tan(sin(x))
>> plot(x,y)
或使用已知函数绘图:
>> syms x; y=sin(tan(x))-tan(sin(x)); fplot(y, [-pi,pi])
分段函数
函数体.*条件
(在进行矩阵之间的运算时“.”和“”的意义就有所不同了。假设a,b表示两个矩阵,a*b表示矩阵a与矩阵b进行矩阵相乘,a.*b表示矩阵a中的元素与矩阵b中的元素按位置依次相乘,得到的结果将作为新矩阵中相同位置的元素。)
bar(x, y):绘制直方图
极坐标绘图:
例:
>> theta=0:0.01:6*pi
>> rho=5*sin(4*theta/3)
>> polarplot(theta,rho)
窗口分割:
subplot(line, column, number)
隐函数绘制:
fimplicit(im_function, [start, end])
save和load命令存储和读取数据
xlsread函数调用实现于Excel的交互
三维图形的绘制
plot3(x, y, z)
绘制三维轨迹图:comet3
注意a的b次方一定要用点运算:a.^b
一般曲面绘制:[x, y] = meshgrid(v1, v2)
meshgrid用于生成网格采样点的函数
surf()表面图
mesh()网格图
三维图形视角设置
命令语句:
view(alpha, beta)
alpha定义为方位角,beta定义为仰角
面向对象程序设计
窗口对象的常用属性
生成两个文件:.fig文件用于描绘图形界面属性,.m文件用于空白的框架
把图形界面画出来并设置好对应的属性
绘制Bode图
guide可以设计图形菜单系统
ActiveX控件
线性代数问题求解:
稳定性可以通过矩阵特征值求解
系统可控性、可观测性可以求矩阵的秩
线性相似变换需要求解矩阵的逆和惩罚
状态方程解析解需要矩阵的指数函数等
矩阵的迹:对角元素的和(trace(A))
矩阵的秩:矩阵列向量中线性无关的最大列
矩阵的范数:用一个数表示矩阵的大小(norm(A))
特征多项式:ploy(A)
特征根求解:
r=roots(p), r=eig(A), [V, D]=eig(A)
(V表示的是特征向量,D表示的是特征值)
多项式求值:C=polyval(a, x)
多项式矩阵求值:C=polyvalm(a, A)
矩阵的逆:inv(A)
Moore-Penrose广义逆(伪逆)min||AM-I||
矩阵的伪逆:pinv(A)
矩阵的三角分解(LU分解):LU=lu(A)
eye()生成单位矩阵
例:
>> syms a b c;A=[1,1,1;a,b,c;a^2,b^2,c^2];
>> det(A);simplify(factor(ans)) % simplify函数可以对符号表达式进行简化
>> B=inv(A);simplify(B*A-eye(3)) % A乘以A的逆矩阵结果为单位阵,减去单位阵恰好等于零
>> p=charpoly(A)
矩阵的指数函数:expm(A)
注意方程式内的变量要声明为符号变量sym(A)
线性方程的求解
AX=B X=inv(A)*B
null(A) % 得出A矩阵的化零空间(基础解系)
pinv(A) % 特解
如果无解则使用最小二乘的方法得出近似解
基本行变换求解:rref()函数
通过求伪逆的方式(奇异矩阵或非方阵的矩阵不存在逆矩阵)
微分方程求解方法
连续系统一般是由微分方程解出
一阶显式微分方程的数值解法
微分方程数值解算法
步骤:
将微分方程变换成标准型
用MATLAB描述微分方程
- 函数或匿名函数(f=@(t,x)[…])
求解:
[t,x]=ode45()
验证:odeset()函数
例:非线性微分方程
变换x1=x, x2=y, x3=z
>> [f=@(t,x)[-x(2)-x(3);x(1)+0.2*x(2);0.2+(x(1)-5.7)*x(3)];](mailto:f=@(t,x)[-x(2)-x(3);x(1)+0.2*x(2);0.2+(x(1)-5.7)*x(3)];)
高阶微分方程变换
注意:一定要转换成标准型,即x=[]矩阵
x与x的导数的曲线:相轨迹曲线(增大到某一个封闭的曲线就是极限环)
数值求解方法:
描述微分方程(不能用匿名函数)
微分方程检验:odeset
RelTol:[]相对误差限(默认值为千分之一)
微分方程的解析解:
注:solve() 函数是用于求解代数方程的
D?y 表示y的?阶导数,或者是实用diff命令来求导
simplify() % 化简结果
最优化问题
无约束最优化问题求解
求解步骤:
写标准型
描述目标函数:M-函数或匿名函数
直接求解(边界约束求解fminsearchbnd())
有约束最优化问题求解
fmincon() 函数
注意分清楚哪个是目标函数哪个是约束条件,哪个是目标函数
约束条件要转化为小于等于零的不等式
使用 fmincon() 函数返回的前两个量第一个是
线性规划、二次型规划等其他最优化规划问题
全局最优解的尝试
可以使用进化类算法求解,如遗传算法等
最优曲线拟合
lsqcurvefit()
Laplace变换与Z变换
数学基础:t域到s域的变换
正变换和反变换
>> syms a t, f=1-(1+a*t)*exp(-a*t);
>> laplace(f)
如果得不到拉氏变换或者拉氏反变换的解析解,可以采用数值解的方式
无理系统的闭环阶跃响应
阶跃响应计算:没有解析解,必须求数值解
Z变换与反变换
Z变换采用求和而不是积分
把时间序列变成Z域的函数(正变换)
反变换
ztrans()
iztrans()
线性控制系统的建模实例
系统数学模型的分类
传递函数、状态方程、时间延迟、采样周期
连续系统模型的输入
线性系统的常系数线性常微分方程模型:
如果ai和bi都是常数,则系统又称为定长系统
m<=n,则为物理可实现系统
传递函数的MATLAB表示
传递函数即放大倍数:G(s)=Y(s)/U(s)
MATLAB的传递函数对象
传递函数对象属性:新版本get(tf)
传递函数属性修改
G.ioDelay=3
或
set(G, ‘ioDelay’, 3)
传递函数参数提取
由于使用单元数组,直接用G.num不行
将数值提取出来,之后调用tfdata即可显示分子分母多项式
传递函数输入小结
传递函数的定义与两种输入方法
- 调用tf函数直接输入
- 定义s算子,再输入传递函数
可以提取传递函数的分子与分母tfdata
状态方程模型
注意:这里必须是物理可实现系统(即t时刻的输出不能由t往后的时间输入决定)
一些特殊线性模型不存在状态方程
引入描述符系统
(若物理可实现系统,则E为单位阵)
MATLAB输入方法:ss(A, B, C, D)
通过调用ss函数,构造状态方程对象
带时间延迟的状态方程
线性系统的零极点模型
离散模型输入方法
离散模型有自己的采样周期,而连续系统的采样周期是零