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

MATLAB绘制Tent function蛛网图报错:数组索引需为正整数或逻辑值

Tent函数蛛网图MATLAB代码报错分析

错误原因

报错Array indices must be positive integers or logical values的核心问题有两个:

  1. 变量名冲突+数组索引误用:原函数定义的参数f被你当成存储Tent函数值的数组覆盖了。当执行f(x(1))时,x(1)是0.8(非整数),你试图用这个小数作为索引去访问数组f,而MATLAB要求数组索引必须是正整数或逻辑值,因此触发报错。
  2. 函数实现方式错误:你预先把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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:29