You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:27:04