Matlab求传递函数的零极点及增益并绘制零极点图 2

题目:

代码:

Matlab 复制代码
clc;clear all;close all;

num=[1 4 11];%定义传递函数的分子的系数s^2+4s+11
den=conv([1 6 3],[1 2 0]);%conv()函数是两个多项式的乘积,
                          % 即(s^2+6s+3)*(s^2+2s)
sys=tf(num,den);%tf()函数创建传递函数
[z,p,k]=tf2zp(num,den);%tf2zp()函数用于求系统的零极点和增益
disp('Zero:');%零点
disp(z);
disp('Poles:');%极点
disp(p);
disp('Gain:');%增益
disp(k);

figure%创建一张新的图
pzmap(sys);%pzmap()用于绘制图
title('Pole_Zero Map');

%找到零极点
[z,p,~]=tf2zp(num,den);
%标注极点
for i=1:length(z)
    text(real(z(i)),imag(z(i)),['' num2str(z(i),'%.2f')],'Color','blue');
end
%标注极点
for i=1:length(p)
    text(real(p(i)),imag(p(i)),['' num2str(p(i),'%.2f')],'Color','red');
end

实验结果:

1. 清空环境与命令窗口

Matlab 复制代码
clc;
clear all;
close all;

功能

  • clc:清空命令窗口,让屏幕更整洁。
  • clear all:清除工作区所有变量,避免之前的变量对当前代码产生干扰。
  • close all:关闭所有打开的图形窗口,防止残留的图影响后续结果显示。

2. 定义传递函数的分子和分母系数

Matlab 复制代码
num=[1 4 11];%定义传递函数的分子的系数s^2+4s+11
den=conv([1 6 3],[1 2 0]);%conv()函数是两个多项式的乘积,即(s^2+6s+3)*(s^2+2s)

功能

  • num :分子系数向量,对应多项式 \(s^2 + 4s + 11\)。
    • 向量中的元素按降幂排列,即 [s²的系数, s的系数, 常数项]
  • den :分母系数向量,通过 conv 函数计算两个多项式的乘积。

conv 函数

  • 用于计算两个向量的卷积,在多项式运算中相当于多项式乘法
  • 语法:conv(a, b),其中 ab 是两个多项式的系数向量(降幂排列)。

3. 创建传递函数模型

Matlab 复制代码
sys=tf(num,den);%tf()函数创建传递函数

功能

  • tf(num, den) 是 MATLAB 控制工具箱(Control System Toolbox)中的核心函数,用于创建传递函数模型
  • sys 是一个 tf 类型的对象,包含了传递函数的所有信息(分子、分母、采样时间等),后续可用于分析(如求零极点、绘制响应曲线等)。

用法示例

Matlab 复制代码
num = [1 2];    % 分子:s + 2
den = [1 3 2];  % 分母:s² + 3s + 2
sys = tf(num, den);  % 传递函数:(s+2)/(s²+3s+2)

4. 求系统的零极点和增益

Matlab 复制代码
[z,p,k]=tf2zp(num,den);%tf2zp()函数用于求系统的零极点和增益

功能

  • tf2zp(num, den) 用于将传递函数从多项式形式 转换为零极点形式

参数说明

  • 输入:num(分子系数向量)、den(分母系数向量)。
  • 输出:
    • z:零点向量(每个元素是一个零点)。
    • p:极点向量(每个元素是一个极点)。
    • k:增益(标量)。

5. 显示零极点和增益

Matlab 复制代码
disp('Zero:');%零点
disp(z);
disp('Poles:');%极点
disp(p);
disp('Gain:');%增益
disp(k);

功能

  • disp('字符串'):在命令窗口显示提示信息。
  • disp(z)disp(p)disp(k):分别显示零点、极点和增益的具体数值。

示例输出

Matlab 复制代码
Zero:
   -2.0000 + 2.6458i
   -2.0000 - 2.6458i

Poles:
    0.0000
   -2.0000
   -3.0000 + 2.4495i
   -3.0000 - 2.4495i

Gain:
     1

6. 绘制零极点图

Matlab 复制代码
figure%创建一张新的图
pzmap(sys);%pzmap()用于绘制图
title('Pole_Zero Map');

功能

  • figure:创建一个新的图形窗口,用于绘制后续图形。
  • pzmap(sys):绘制系统的零极点图 (Pole-Zero Map)。
    • 零极点图是在复平面 (实轴为横坐标,虚轴为纵坐标)上绘制的:
      • 零点用 空心圆(○)表示。
      • 极点用 叉号(×)表示。
    • 该图用于直观分析系统的稳定性(极点是否全部在左半平面)、动态性能(零极点的位置分布)等。
  • title('Pole_Zero Map'):为图形添加标题。

7. 标注零极点的数值

Matlab 复制代码
%找到零极点
[z,p,~]=tf2zp(num,den);
%标注极点
for i=1:length(z)
    text(real(z(i)),imag(z(i)),['' num2str(z(i),'%.2f')],'Color','blue');
end
%标注极点
for i=1:length(p)
    text(real(p(i)),imag(p(i)),['' num2str(p(i),'%.2f')],'Color','red');
end

功能

  • 再次调用 tf2zp(num, den) 获取零极点(~ 表示忽略增益 k,因为之前已获取)。
  • 通过 for 循环遍历每个零点和极点,并用 text 函数在零极点图上标注其数值。

关键函数说明

  • length(z):获取零点向量 z 的长度(即零点的个数)。
  • real(z(i)):获取第 i 个零点的实部(作为标注的横坐标)。
  • imag(z(i)):获取第 i 个零点的虚部(作为标注的纵坐标)。
  • num2str(z(i),'%.2f'):将复数零点 z(i) 转换为字符串,保留 2 位小数。
  • text(x, y, '字符串', 'Color', '颜色'):在图形的 (x, y) 位置添加文本标注,颜色设为蓝色(零点)或红色(极点)。

效果

  • 零极点图上每个零点和极点的旁边会显示其具体数值(如 -2.00 + 2.65i),方便精确读取。

总结

这段代码的核心功能是:

  1. 定义传递函数的分子和分母(通过系数向量和多项式乘法)。
  2. 创建传递函数模型并转换为零极点形式。
  3. 显示零极点和增益的数值。
  4. 绘制零极点图并标注具体数值,用于系统分析。
相关推荐
rit843249914 小时前
有限元法求转子临界转速的MATLAB实现
开发语言·matlab
Matlab程序设计与单片机15 小时前
【机器人最短路径规划】基于标准蚁群算法
matlab·蚁群算法·路径规划问题
Marye_爱吃樱桃15 小时前
MATLAB R2024b的安装、简单设置——保姆级教程
开发语言·matlab
IT猿手1 天前
基于控制障碍函数的多无人机编队动态避障控制方法研究,MATLAB代码
开发语言·matlab·无人机·openclaw·多无人机动态避障路径规划·无人机编队
Evand J1 天前
【MATLAB复现RRT(快速随机树)算法】用于二维平面上的无人车路径规划与避障,含性能分析与可视化
算法·matlab·平面·无人车·rrt·避障
s09071361 天前
【声纳成像】基于滑动子孔径与加权拼接的条带式多子阵SAS连续成像(MATLAB仿真)
开发语言·算法·matlab·合成孔径声呐·后向投影算法·条带拼接
IT猿手1 天前
基于 ZOH 离散化与增量 PID 的四旋翼无人机轨迹跟踪控制研究,MATLAB代码
开发语言·算法·matlab·无人机·动态路径规划·openclaw
IT猿手1 天前
基于控制障碍函数(Control Barrier Function, CBF)的无人机编队三维动态避障路径规划,MATLAB代码
开发语言·matlab·无人机·动态路径规划·无人机编队
SugarFreeOixi1 天前
MATLAB绘图风格记录NP类型
python·matlab·numpy
IT猿手1 天前
基于 CBF 的多无人机编队动态避障路径规划研究,无人机及障碍物数量可以自定义修改,MATLAB代码
开发语言·matlab·无人机·动态路径规划