如何修改函数使参数λ支持向量输入以批量验证离散系统稳定性
Matlab离散系统稳定性验证多λ支持改造方案
原代码问题梳理
- 存在硬编码bug:函数接收输入参数k后,第一行直接赋值
k=5,会覆盖所有输入的取值,导致参数传入无效 - 稳定判据逻辑反向:离散LTI系统稳定要求所有极点模长≤1,原代码判断
max(pm)>1时输出稳定,和实际判据相反 - 仅支持单个λ值传入,无法批量验证
核心改造思路
- 移除参数硬编码语句,保留输入参数的有效性
- 新增向量输入遍历逻辑,循环处理每个λ取值
- 替换已弃用的
roundn函数为兼容新版Matlab的round函数,保留4位小数的精度要求 - 增加带λ取值标识的格式化输出,可区分不同取值的验证结果
- 保留可选的零极点绘图能力,可按需开启
改造后完整代码
function stable2(lambda_vec) % 输入参数 lambda_vec: 包含多个待验证λ取值的向量 % 遍历所有输入的λ取值 for idx = 1:length(lambda_vec) k = lambda_vec(idx); % 构造系统传递函数分子分母 b = [0 0 k 0 0]; a = [1 -4 k+6 -4 1]; % ---------- 可选:开启后为每个λ生成单独的零极点图 ---------- % figure('Name', sprintf('λ=%.4f 零极点分布', k)); % zplane(b,a); % % 可选:自动保存零极点图到当前目录 % saveas(gcf, sprintf('lambda_%.4f_zplane.png', k)); % --------------------------------------------------------- % 计算极点并判断稳定性 p = roots(a); pm = round(abs(p), 4); % 等价于原roundn(abs(p), -4),兼容新版Matlab if max(pm) <= 1 fprintf('λ=%.4f | 系统稳定\n', k); else fprintf('λ=%.4f | 系统不稳定\n', k); end end end
使用示例
如果需要验证λ取1、1.5、2、3时的稳定性,直接在Matlab命令行执行:
stable2([1, 1.5, 2, 3])
即可一次性输出所有取值对应的稳定性结果。
内容的提问来源于stack exchange,提问作者WilliamW
相关产品推荐
相关产品推荐

