《Matlab/Simulink与控制系统仿真》程序指令总结
Matlab_Simulink_BookExample4. 控制系统数学模型表4.4 模型转换函数例题 4_2例题 4_3例题 4_4例题 4_5例题 4_6例题 4_7例题 4_8例题 4_9例题 4_10例题 4_11例题 4_12书中详细实例代码可见:Github
Matlab_Simulink_BookExample
图书:《Matlab/Simulink与控制系统仿真》
4. 控制系统数学模型
ode23
微分方程求解
ode45
微分方程求解
num
分子多项式
den
分母多项式
conv()
多项式乘法函数
roots()
多项式求根函数
poly()
由根创建多项式函数
polyval()
求多项式在给定点的值函数
tf()
建立传递函数模型的函数
sys = tf(num, den)
常规系统 G(s) 的传递函数sys = tf(num, den, 'InputDelay', tau)
建立待时间延迟 G d ( s ) = G ( s ) e − τ s G_d(s)=G(s)e^{-\tau s} Gd(s)=G(s)e−τs 的传递函数,其中InputDelay
为关键词,也可写成OutputDelay
,对于线性 SISO 系统,二者是等价的。
tfdata()
提取模型中分子分母多项式系数的函数
zpk()
建立零极点形式的数学模型
zpkdata()
提取模型中零极点和增益向量的函数
residue()
传递函数模型部分分式展开的函数
功能是对两个多项式的比进行部分展开,以及把传递函数分解为微分单元的形式,其常见的调用格式如下:[r, p, k]=residue(b, a)
其中,向量 b 和 a 是按 s 的降幂排列的多项式系数。部分分式展开后,余数返回到向量 r ,极点返回到列向量 p ,常数项返回到 k 。[b, a] = residue(r, p, k)
可以将部分分式转换为多项式比 p(s)/q(s)。
ss()
建立状态空间模型的函数
ssdata()
提取模型中状态空间矩阵的函数
表4.4 模型转换函数
series(num1, den1, num2, den2)
串联连接函数
parallel(num1, den1, num2, den2)
并联连接函数
feedback(num1, den1, num2, den2, sign)
反馈连接函数
cloop(num, den, sign)
闭环连接函数
例题 4_2
% Page73:求输出值并画出曲线% 程序主函数代码如下:% clear allt0 = 0; tfinal = 10; % 响应时间x0 = [0.2; 0];% 初始化,电感电流0,电容电压0.2% Eg4_2_rlcsys是系统微分方程的描述函数[t, x] = ode45('Eg4_2_rlcsys', [t0 tfinal], x0);% 绘制状态响应图并添加栅格figure(1); subplot(211); plot(t, x(:,1)); gridtitle('电容电压/V'); xlabel('时间/s');% 绘制状态响应图并添加栅格figure(1); subplot(212); plot(t, x(:,2)); gridtitle('电感电流/A'); xlabel('时间/s');figure(2); vc=x(:,1); i=x(:,2);plot(vc, i); gridtitle('电感电流与电容电压的关系曲线');xlabel('电容电压/v'); ylabel('电感电流/A');
子函数代码如下:
% 系统微分方程描述函数% 微分方程函数,状态导数function xdot = Eg4_2_rlcsys(t,x)% 电压、电阻、电感、电容值Vs = 1.5; R=1.6; L=2.1; C=0.30;% 导数关系式xdot = [x(2)/C; 1/L*(Vs-x(1)-R*x(2))];% 格式% function xdot = filename(t, x)% xdot = [表达式1; 表达式2; ...; 表达式n-1]% 表达式1对应 x1'=x2% 表达式2对应 x2'=x3% 表达式3对应 x3'=x4% ...% 表达式n-1对应 xn-1'=xn% 本例中, x(1)=Vo, x(2)=iL, x(1)'=x(2)/c, x(2)'=(Vs-x(1)-R*x(2))/L
例题 4_3
% Page76:求拉氏变换clear;clc;% 定义符号变量syms t s;syms a b positive;% 冲击函数 delta(t-a) 是用 Maple 函数库中的定义是 Dirca(t-a)Dt = str2sym('Dirca(t-a)');% 单位阶跃函数 u(t-b) 是用 Maple 函数库中的定义是 Heaviside(t-b)Ut = str2sym('Heaviside(t-b)');% 建立矩阵Mt = [ Dt, Ut;exp(-a*t)*sin(b*t), t^2*exp(-t);]; % 进行拉氏变换Ms = laplace(Mt);
例题 4_4
% Page83:求传递函数的分子和分母多项式,并求传递函数的特征根clear;clc;% num 为分子多项式,conv()函数采用嵌套形式num = conv([1, 1], conv([1,2,6], [1,2,6]));% den 为分母多项式,conv()函数采用嵌套形式den = conv([1,0,0], conv([1,3],[1,2,3,4]));% r 为分母多项式的根r = roots(den);
例题 4_5
% Page83:根据微分方程建立模型clear;clc;% 分子多项式系数行向量num = [1, 4, 8];% 分母多项式系统行向量den = [1, 11, 11, 10];% 建立传递函数模型G = tf(num, den);
例题 4_6
% Page83:根据传递函数求分母多项式、零极点clear;clc;num = [1 4 8];% 分子多项式系数行向量den = [1 11 11 10];% 分母多项式系数行向量G = tf(num, den); % 建立传递函数模型[tt, ff] = tfdata(G, 'v');% 提取传递函数的分子和分母多项式[z, p, k] = tf2zp(num, den); % 提取传递函数的零极点和增益
例题 4_7
% Page84:根据传递函数求部分分式形式clear;clc;num = [2 0 9 1]; % 分子多项式系数行向量den = [1 1 4 4]; % 分母多项式系数行向量[r, p, k] = residue(num, den);% 求取部分分式表示
例题 4_8
% Page84:已知状态方程和输出方程,求状态空间模型clear;clc;% 系统系数矩阵A = [1 6 9 10;3 12 6 8;4 7 9 11;5 12 13 14;];B = [4 6;2 4;2 2;1 0;];C = [0 0 2 1;8 0 2 2;];D = zeros(2, 2);% 生成状态空间模型G = ss(A, B, C, D);
例题 4_9
% Page85:已知传递函数,利用simulinkclear;clc;% 此行代码需要放在命令行执行[A,B,C,D]=linmod('Eg4_9.slx');% 此行代码需要放在命令行执行[A,B,C,D]=linmod('Eg4_92.slx');
例题 4_10
% Page87:已知零极点模型,求传递函数模型和状态空间模型clear;clc;% 系统的零极点,增益z = [-2];p = [-1,-3,-5];k = 6;% 将零极点模型转换成传递函数模型[num, den] = zp2tf(z, p, k);% 将零极点模型转换成状态空间模型[A, B, C, D] = zp2ss(z, p, k);% 建立零极点模型g_zpk = zpk(z, p, k);% 建立传递函数模型g_tf = tf(num, den);% 建立状态空间模型g_ss = ss(A, B, C, D);
例题 4_11
% Page89:已知两个传递函数,求串联并联clear;clc;num1 = 6 * [1, 2];den1 = conv([1, 1], conv([1, 3], [1, 5]));num2 = [1, 2.5];den2 = conv([1, 1], [1, 4]);% 串联连接[nums, dens] = series(num1, den1, num2, den2);% 并联连接[nump, denp] = parallel(num1, den1, num2, den2);% 生成串联连接传递函数s_tf = tf(nums, dens);% 生成并联连接传递函数p_tf = tf(nump, denp);
例题 4_12
% Page90:已知前向传递函数,求闭环传递函数和负反馈传递函数clear;clc;% 前向传递函数num1 = [1, -1];den1 = [1, -5, -2];% 反馈传递函数num2 = [1, 1];den2 = [1, 3, 2];% 闭环连接[numc, denc] = cloop(num1, den1);% 反馈连接[numf, denf] = feedback(num1, den1, num2, den2);% 生成闭环传递函数c_tf = tf(numc, denc);% 生成反馈连接传递函数f_tf = tf(numf, denf);
如果觉得《P4 控制系统数学模型-《Matlab/Simulink与控制系统仿真》程序指令总结》对你有帮助,请点赞、收藏,并留下你的观点哦!