Octave中lsim函数报错‘无法找到@is_real_matrix函数’求助
解决Octave中lsim命令报错
invalid function handle, unable to find function for @is_real_matrix 问题原因
该报错源于control包的lsim函数调用了is_real_matrix函数,但在Octave 6.4.0 + control 3.2.0的组合环境中,这个函数无法被正确识别或缺失,属于版本兼容性问题。
解决方案
1. 重新确认control包加载状态
先执行命令确保control包被正确加载,避免加载失败导致的函数缺失:
pkg load control
执行无报错后,重新运行你的代码。
2. 手动实现is_real_matrix函数
创建名为is_real_matrix.m的文件,写入以下内容:
function bool = is_real_matrix(A) bool = ismatrix(A) && isreal(A); endfunction
将该文件放在Octave当前工作目录,或通过addpath('文件所在目录')命令添加到Octave搜索路径,之后重新运行代码即可。
3. 先创建传递函数对象再调用lsim
修改代码,先将分子分母转换为传递函数对象,再传入lsim:
n=3*[2 125]; d=[1 9 45 125]; t=0:0.01:5; x=3*ones(size(t)); sys = tf(n, d); % 创建传递函数对象 y=lsim(sys, x, t);
这种方式可绕过直接传递分子分母时的函数调用问题。
4. 升级Octave或control包版本
- 升级Octave到7.0.0及以上版本
- 或升级control包到3.3.0及以上版本
新版本通常会修复旧版本的兼容性问题,从根本上解决该报错。
内容的提问来源于stack exchange,提问作者user4819461
相关产品推荐
相关产品推荐

