Scilab定义分段函数触发空矩阵相加警告的问题求解
问题根源
- 函数未提前初始化输出变量
y,首次赋值时如果find返回空矩阵(比如调用myTest(1)时,find(t<0)没有匹配结果,返回空),此时执行y([]) = 0会将y初始化为空矩阵,后续给其他位置赋值时需要扩展空矩阵,就会触发你收到的警告。 - 即使绘图时看起来结果正常,也是因为传入数组
t后每段find都有匹配结果,没有碰到空索引赋值的场景,一旦输入值落在分段边界或者只覆盖部分分段,就会出问题。
修复方法
在函数开头新增一行代码预初始化y为和输入t维度一致的数组即可,修复后的完整代码如下:
function y = myTest(t) // 预初始化y,维度和输入t完全一致,初始值设为0 y = zeros(size(t)); // First Part y(find(t < 0)) = 0; // Middle Part y(find(0 <= t & t <= 1)) = 1; // Middle Part ti3 = find(1 < t & t <= 3); y(ti3) = -1*t(ti3) + 2; // Middle Part y(find(3 < t & t <= 4)) = -1; // Middle Part ti5 = find(4 < t & t <= 6); y(ti5) = +1*t(ti5) -5; // Middle Part y(find(6 < t & t <= 8)) = 1; // Last Part y(find(8 < t)) = 0; endfunction myTest(1) t = 0:0.1:10; plot(t',myTest(t))
修复后再运行代码就不会出现警告,且单值调用、数组调用的结果都符合预期。
内容的提问来源于stack exchange,提问作者Dr. Manuel Kuehner
相关产品推荐
相关产品推荐

