MATLAB绘制Tent function蛛网图报错:数组索引需为正整数或逻辑值
Tent函数蛛网图MATLAB代码报错分析
错误原因
报错Array indices must be positive integers or logical values的核心问题有两个:
- 变量名冲突+数组索引误用:原函数定义的参数
f被你当成存储Tent函数值的数组覆盖了。当执行f(x(1))时,x(1)是0.8(非整数),你试图用这个小数作为索引去访问数组f,而MATLAB要求数组索引必须是正整数或逻辑值,因此触发报错。 - 函数实现方式错误:你预先把Tent函数的值存在数组
f里,这种方式只能对linspace生成的1000个点计算函数值,无法直接对任意输入值(比如迭代中的0.8、0.3等)计算对应的函数值,必然导致索引错误。
修正后的代码
function cobweb(x0, N) % 初始点与迭代次数 x0 = 0.8; N = 200; % 用于绘制函数曲线的x范围 x_plot = linspace(0, 1, 1000); % 定义Tent匿名函数,支持任意x值的计算 f = @(x) 1.5 * (x <= 0.5).*x + 1.5 * (x > 0.5).*(1 - x); hold on % 绘制Tent函数与y=x参考线 plot(x_plot, f(x_plot), 'k', 'LineWidth', 1.5) plot(x_plot, x_plot, 'r', 'LineWidth', 1.5) xlabel('x(t)') ylabel('x(t+1)') grid on % 迭代绘制蛛网图 x_prev = x0; for i = 1:N x_next = f(x_prev); % 绘制垂直线段 plot([x_prev, x_prev], [x_prev, x_next], 'b', 'LineWidth', 0.5) % 绘制水平线段 plot([x_prev, x_next], [x_next, x_next], 'b', 'LineWidth', 0.5) x_prev = x_next; end hold off end
关键修正点
- 改用匿名函数定义Tent函数,直接对任意输入值计算函数值,彻底避免数组索引错误。
- 避免变量名冲突:不再复用参数
f,也不再用绘图用的x数组存储迭代值,改用独立变量x_prev和x_next。 - 调整蛛网图的线段绘制逻辑,从
(x_prev, x_prev)开始绘制,符合蛛网图的标准绘制流程。
内容的提问来源于stack exchange,提问作者ZYX
相关产品推荐
相关产品推荐

