如何提升MATLAB Nyquist图负实轴(-1+0j附近)的数据点精度?
优化MATLAB Nyquist图负实轴区域精度的方案
针对你需要聚焦负实轴(尤其是-1+0j附近)且避免冗余计算的需求,提供两种实用方法:
方法1:手动指定关键频率区间采样
手动划分频率范围,在负实轴交叉对应的频段(相位为±π、±3π等区间)设置密集采样点,其余频段用稀疏点,精准控制计算量。
修改后的代码:
close all; clear all; % 定义系统 G = zpk([],[-0.1 -1 -1],[1]); H = zpk([],[-0.1 -1 -1],[2]); J = zpk([],[-0.1 -1 -1],[4]); % 确定负实轴交叉对应的频率区间:你的系统有3个极点,相位会到-3π,对应两个交叉区域 w_low1 = 0.1; w_high1 = 1; % 相位-π附近的频率范围 w_low2 = 10; w_high2 = 100; % 相位-3π附近的频率范围(按需选择) % 生成混合密度的频率点:关键区密集,其余区稀疏 w = [logspace(-3, log10(w_low1)-0.1, 20), ... % 低频稀疏采样 linspace(w_low1, w_high1, 100), ... % 关键区1密集采样 logspace(log10(w_high1)+0.1, log10(w_low2)-0.1, 20), ... % 中间频段稀疏 linspace(w_low2, w_high2, 100), ... % 关键区2密集采样(可选) logspace(log10(w_high2)+0.1, 3, 20)]; % 高频稀疏采样 % 手动计算各系统的Nyquist值 [G_re, G_im] = nyquist(G, w); [H_re, H_im] = nyquist(H, w); [J_re, J_im] = nyquist(J, w); % 绘图并聚焦-1附近区域 figure; plot(G_re, G_im, 'b', 'LineWidth', 1.5); hold on; plot(H_re, H_im, 'r', 'LineWidth', 1.5); plot(J_re, J_im, 'g', 'LineWidth', 1.5); plot(-1, 0, 'ko', 'MarkerSize', 8); % 标记-1+0j参考点 axis([-5 1 -2 2]); % 限定显示范围,聚焦目标区域 grid on; legend('G', 'H', 'J', '-1+0j'); title('Nyquist Plot with Dense Sampling Near Negative Real Axis');
方法2:利用nyquistplot内置选项调整采样密度(R2021a支持)
通过Control System Toolbox的绘图选项,直接指定在特定相位区域(比如负实轴对应的-π、-3π相位)增加采样点,无需手动生成频率,操作更便捷。
代码示例:
close all; clear all; G = zpk([],[-0.1 -1 -1],[1]); H = zpk([],[-0.1 -1 -1],[2]); J = zpk([],[-0.1 -1 -1],[4]); % 创建Nyquist图并获取绘图选项 fig = figure; h1 = nyquistplot(G); hold on; nyquistplot(H); nyquistplot(J); % 调整采样选项:聚焦负实轴对应的相位区域 opts = getoptions(h1); opts.PhaseTolerance = 0.1; % 相位容差设小(默认1),关键相位区采样更密 opts.FocusedPhases = [-pi, -3*pi]; % 指定只在这两个相位附近增加采样 setoptions(h1, opts); % 标记-1+0j并聚焦显示 plot(-1, 0, 'ko', 'MarkerSize', 8); axis([-5 1 -2 2]); grid on; legend('G', 'H', 'J', '-1+0j'); title('Nyquist Plot with Focused Sampling on Negative Real Axis');
两种方法的优势
- 方法1:完全可控,能精准筛选需要密集采样的频段,最大化减少冗余计算;
- 方法2:无需手动分析频率区间,借助MATLAB内置逻辑自动优化关键区域采样,适合快速调整。
内容的提问来源于stack exchange,提问作者Padit
相关产品推荐
相关产品推荐

