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

Scilab程序运行报错:维度不兼容问题排查与修复求助

解决Scilab分段函数绘图的维度不兼容错误

问题需求

需要在Scilab中绘制两个分段函数:

  • x(t)分段规则:
    • 0≤t<4时,x=(7/4)t
    • 4≤t<6时,x=7
    • 6≤t<14时,x=-t+13
    • 14≤t<16时,x=-7
    • 16≤t<20时,x=(7/4)t-7
  • y(t)分段规则:
    • 0≤t<2时,y=1
    • 2≤t<4时,y=3

原代码运行时出现维度不兼容错误,以下是原代码:

m=10;N=2^m;
T1=20;
dt1=T1/N;
t1=0:dt1:T1-dt1;
t11=0:dt1:4-dt1;
t12=4:dt1:6-dt1;
t13=6:dt1:14-dt1;
t14=14:dt1:16-dt1;
t15=16:dt1:20-dt1;
x11=(7/4)*t11;
x12=7*ones(1,N/2);
x13=-t13+13;
x14=(-7)* ones(1,N/2);
x15=(7/4)*t15-7;
x=[x11 x12 x13 x14 x15];
T2=4;
dt2=T2/N;
t21=0:dt2:2-dt2;
t22=2:dt2:4-dt2;
t2=[t21 t22]
y21=1*ones(1,N/2);
y22=3*ones(1,N/2);
y=[y21 y22];
figure(1,'BackgroundColor',[1,1,1]);
plot2d2(t1,x,5);
plot2d2(t2,y,3)

错误原因

原代码手动拆分t区间时,错误地用N/2固定生成ones数组的长度,但各区间的实际点数并不等于N/2:

  • 例如x(t)的4≤t<6区间时长为2,总时长T1=20,对应点数应为length(t12),而非N/2;
  • y(t)的0≤t<2区间时长为2,总时长T2=4,对应点数应为length(t21),而非N/2;
  • 这种硬编码长度的方式导致拼接后的x、y数组长度与对应的t数组长度不匹配,触发维度错误。

修正方案

方案1:使用逻辑索引(推荐)

直接对完整的t数组通过逻辑条件赋值,无需手动拆分区间,自动保证维度匹配:

m=10;N=2^m;
// 处理x(t)
T1=20;
dt1=T1/N;
t1=0:dt1:T1-dt1;
x = zeros(size(t1)); // 初始化与t1同维度的数组
x(t1 >=0 & t1 <4) = (7/4)*t1(t1 >=0 & t1 <4);
x(t1 >=4 & t1 <6) = 7;
x(t1 >=6 & t1 <14) = -t1(t1 >=6 & t1 <14)+13;
x(t1 >=14 & t1 <16) = -7;
x(t1 >=16 & t1 <20) = (7/4)*t1(t1 >=16 & t1 <20)-7;

// 处理y(t)
T2=4;
dt2=T2/N;
t2=0:dt2:T2-dt2;
y = zeros(size(t2)); // 初始化与t2同维度的数组
y(t2 >=0 & t2 <2) =1;
y(t2 >=2 & t2 <4) =3;

// 绘图
figure(1,'BackgroundColor',[1,1,1]);
plot2d2(t1,x,5);
plot2d2(t2,y,3);

方案2:修正手动拆分的长度计算

如果坚持手动拆分区间,需用对应t子数组的长度生成ones数组,确保拼接后总长度匹配:

m=10;N=2^m;
T1=20;
dt1=T1/N;
t1=0:dt1:T1-dt1;
t11=0:dt1:4-dt1;
t12=4:dt1:6-dt1;
t13=6:dt1:14-dt1;
t14=14:dt1:16-dt1;
t15=16:dt1:20-dt1;
x11=(7/4)*t11;
x12=7*ones(size(t12)); // 用t12的维度生成数组
x13=-t13+13;
x14=(-7)*ones(size(t14)); // 用t14的维度生成数组
x15=(7/4)*t15-7;
x=[x11 x12 x13 x14 x15];

T2=4;
dt2=T2/N;
t21=0:dt2:2-dt2;
t22=2:dt2:4-dt2;
t2=[t21 t22];
y21=1*ones(size(t21)); // 用t21的维度生成数组
y22=3*ones(size(t22)); // 用t22的维度生成数组
y=[y21 y22];

figure(1,'BackgroundColor',[1,1,1]);
plot2d2(t1,x,5);
plot2d2(t2,y,3);

内容的提问来源于stack exchange,提问作者daladers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:20:34