MATLAB绘制二极管串联电阻负载电压时报数组长度不一致问题问询
问题根本原因
问题和MATLAB版本没有任何关系,核心诱因是工作区残留的旧变量v:
- 你运行第一段代码前,工作区已经存在一个长度为1000001的
v数组(大概率是之前跑其他代码、试算时生成的历史变量) - 由于你没有预先初始化
v,循环仅会给v(1)到v(10001)赋值,v剩下的989999个元素会保留旧值,最终v总长度还是1000001,自然和长度为10001的t不匹配,触发画图报错 - 第二段代码能正常运行,是因为你跑那段代码时,工作区没有残留的
y变量,MATLAB会在第一次给y(i)赋值时自动按i的最大值创建对应长度的数组,自然和x长度匹配
验证方法
跑第一段代码前,先在命令行执行clear v清除残留的v变量,再运行原代码不会出现任何报错。你朋友的2016版本能正常运行,只是因为他的工作区没有残留的v变量而已。
最佳实践建议
MATLAB中写循环赋值代码时,最好预先初始化数组,一方面可以避免这类残留变量导致的诡异bug,另一方面也能避免动态扩容带来的运行效率损耗:
% 预先初始化v为和vs同长度的零数组 t = 0:0.001:10; vs = 4*sin(pi * t); v = zeros(size(vs)); for i =1:length(vs) if(vs(i)<=0.7) v(i)=0; else v(i)=vs(i)-0.7; end end plot(t,v)
这类简单的分段运算也可以直接用逻辑索引实现,无需写for循环,更简洁高效:
t = 0:0.001:10; vs = 4*sin(pi*t); v = max(vs - 0.7, 0); % 小于0.7的部分自动置0,一行完成运算 plot(t, v)
内容的提问来源于stack exchange,提问作者sm29
相关产品推荐
相关产品推荐

