如何解决MATLAB中ode23运行时的数组索引报错问题?
解决MATLAB ode23求解器中“数组索引必须为正整数或逻辑值”的错误
我一眼就揪出问题啦——MATLAB的数组索引是从1开始的,你代码里用了y(0)这种0下标,这是Python这类语言的习惯,放到MATLAB里直接就触发索引错误了。
咱们看报错信息也能明确指向:错误出在diffsys函数的第11行-4*y(0)+4*y(1)+1*y(2),这里的y(0)是非法索引,MATLAB根本不允许用0作为数组下标。
给你修正后的完整代码:
tr = [0 1]; %时间范围 p = [0;0;1]; %初始条件向量 [t, y] = ode23(@diffsys, tr, p); plot(t,y); grid on; title('lab'); legend('y0','y1','y2'); function dp = diffsys(t, y) dp = [ -4*y(1)+4*y(2)+1*y(3); 2*y(1)-7*y(2)+3*y(3); 2*y(1)+3*y(2)-4*y(3); ]; end
核心修改点:
- 把
diffsys函数里的y(0)全部替换成y(1) y(1)替换成y(2)y(2)替换成y(3)
这样调整后,索引完全符合MATLAB的规则,ode23就能正常求解,你也能得到对应的数值解和图像了。
内容的提问来源于stack exchange,提问作者Настя Грант
相关产品推荐
相关产品推荐

