文章目录
- 一、rlocus函数核心用途
- 二、系统建模基础写法
- 1. 分子分母系数向量写法(实验报告常用)
- 2. s符号直接建模(复杂系统更简洁)
- 三、rlocus基础绘图语法
- 1. 最简调用,自动绘制完整根轨迹
- 2. 限定增益K范围绘制局部根轨迹
- 四、高频进阶实操用法
- 场景1:添加阻尼比、自然频率参考网格 sgrid
- 场景2:交互式选取增益 rlocfind
- 场景3:多个系统根轨迹同图对比
- 场景4:提取根轨迹数据,不绘图
- 场景5:搭配零极点图辅助分析 pzmap
- 五、离散系统根轨迹绘制
- 六、常见报错与实操避坑
- 七、完整可直接运行综合示例脚本
一、rlocus函数核心用途
rlocus是控制系统工具箱专用函数,用于绘制单位负反馈系统随开环增益K从0到无穷变化时,闭环极点在复平面上的移动轨迹,也就是根轨迹。
通过根轨迹能直观完成三件工程常用工作:
- 判断不同增益下系统是否稳定;
- 根据阻尼比、超调量要求选定合适开环增益K;
- 直观观察零极点对系统动态性能的影响。
使用前提:提前用tf、zpk、ss搭建LTI线性系统,缺少Control System Toolbox会提示函数未定义。
二、系统建模基础写法
根轨迹只针对开环传递函数建模,两种常用写法。
1. 分子分母系数向量写法(实验报告常用)
示例开环传递函数G ( s ) = 1 s ( s + 3 ) G(s)=\frac{1}{s(s+3)}G(s)=s(s+3)1
num=[1];den=conv([10],[13]);G=tf(num,den);多阶分母连续相乘,全部用conv函数嵌套展开,避免手动展开多项式出错。
2. s符号直接建模(复杂系统更简洁)
s=tf('s');G=1/(s*(s+3));三、rlocus基础绘图语法
1. 最简调用,自动绘制完整根轨迹
clear;clc;s=tf('s');G=1/(s*(s+2)*(s+5));figure;rlocus(G);grid on;title('三阶系统开环根轨迹图');xlabel('实轴 σ');ylabel('虚轴 jω');运行后图像横轴复平面实轴,纵轴虚轴;鼠标左键点击轨迹任意一点,弹窗直接显示:增益K、闭环极点坐标、阻尼比、超调量、无阻尼自然振荡频率。
2. 限定增益K范围绘制局部根轨迹
系统增益区间过大时曲线拥挤,可手动指定K上下限,只绘制关注区间轨迹:
K_range=0:0.01:20;rlocus(G,K_range);grid on;四、高频进阶实操用法
场景1:添加阻尼比、自然频率参考网格 sgrid
工程设计一般要求阻尼比0.4~0.7,叠加等值线可快速定位满足动态指标的极点:
s=tf('s');G=1/(s*(s+1)*(s+4));rlocus(G);sgrid(0.6,[]);% 仅绘制阻尼比0.6参考线grid on;title('带阻尼比网格的根轨迹');sgrid(zeta,wn):第一个参数填目标阻尼比,第二个参数填自然频率,留空则只显示阻尼线。
场景2:交互式选取增益 rlocfind
手动点击根轨迹上目标极点,自动返回对应开环增益K,直接生成闭环系统验证阶跃响应:
s=tf('s');G=1/(s*(s+2)*(s+5));rlocus(G);sgrid(0.5,[]);grid on;[K_select,pole]=rlocfind(G);disp(['选中的开环增益 K = ',num2str(K_select)]);% 构建单位负反馈闭环系统G_close=feedback(K_select*G,1);figure;step(G_close);grid on;title(['K=',num2str(K_select),'闭环系统阶跃响应']);运行代码后鼠标点击目标极点,命令行输出增益,同时弹出闭环阶跃曲线,一步完成增益整定与性能验证。
场景3:多个系统根轨迹同图对比
对比校正前后、增加零点/极点后的轨迹变化,区分线型颜色:
clear;clc;s=tf('s');G1=1/(s*(s+4));G2=(s+1)/(s*(s+4));% 增加零点校正figure;rlocus(G1,'r-',G2,'b--');grid on;legend('原系统','增加零点校正后','Location','best');title('校正前后根轨迹对比');场景4:提取根轨迹数据,不绘图
需要批量计算不同K对应的极点坐标时,返回增益向量与极点矩阵:
s=tf('s');G=1/(s*(s+3));K_list=0:0.5:10;[r,K_out]=rlocus(G,K_list);% r每一列对应一个K下的全部闭环极点disp('增益与对应闭环极点:');fori=1:length(K_out)disp(['K=',num2str(K_out(i)),' 极点:',num2str(r(:,i))]);end场景5:搭配零极点图辅助分析 pzmap
绘制根轨迹前先查看开环零极点分布,预判轨迹走向:
s=tf('s');G=1/(s*(s+2)*(s+5));figure;pzmap(G);grid on;title('系统开环零极点分布图(o零点,x极点)');五、离散系统根轨迹绘制
离散系统传递函数建立时指定采样时间Ts,rlocus用法完全一致:
num=[0.1];den=conv([1-1],[1-0.5]);Ts=0.1;Gz=tf(num,den,Ts);figure;rlocus(Gz);grid on;title('离散系统根轨迹图');六、常见报错与实操避坑
- 未定义函数’rlocus’
未安装Control System Toolbox,命令行输入ver control校验,附加功能管理器安装工具箱。 - 根轨迹只有一小段、缺少分支
分母多项式未完整展开,多阶因式相乘必须用conv嵌套,不能直接手写合并多项式。 - rlocfind点击无响应
必须先弹出rlocus绘图窗口,再执行rlocfind;代码中分figure分开绘图,避免多图覆盖。 - 轨迹越过虚轴不知道临界稳定增益
鼠标点击轨迹与虚轴交点,弹窗读取对应K值,该值为系统临界稳定增益。 - 分不清开环闭环
rlocus只输入开环传递函数,闭环系统需要用feedback结合选定K重新构造。
七、完整可直接运行综合示例脚本
% rlocus根轨迹完整仿真代码clear;clc;close all;% 1. 构建三阶开环传递函数s=tf('s');G_open=1/(s*(s+1)*(s+5));disp('开环传递函数:');G_open% 2. 绘制带阻尼网格的根轨迹figure(1);rlocus(G_open);sgrid(0.6,[]);grid on;title('三阶系统根轨迹(阻尼比0.6参考线)');% 3. 交互式选取增益,生成闭环验证动态性能[K,p]=rlocfind(G_open);G_close=feedback(K*G_open,1);figure(2);step(G_close);grid on;title(['K=',num2str(K),'闭环系统阶跃响应曲线']);% 4. 提取指定增益区间的极点数据K_data=0:0.2:15;[pole_mat,K_out]=rlocus(G_open,K_data);disp('前5组增益对应闭环极点:');disp([K_out(1:5),pole_mat(:,1:5)']);