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

Python实现雅可比迭代出现IndexError报错如何修复并将迭代结果填入表格

问题修复方案

报错原因

IndexError: Replacement index 4 out of range for positional args tuple

该报错触发原因是你定义的tabel模板包含{0}到{6}共7个占位符,但else分支的print语句中仅给tabel.format()传入了4个参数,剩下的3个误差值被写在了format方法外部,无法匹配模板的占位符要求,导致索引越界。

额外问题排查

你代码中x1函数存在笔误:0.2*3应为0.2*x3,否则x3参数未被使用,迭代计算结果会完全错误。同时代码中使用eval处理格式化后的字符串属于不必要的操作,存在安全隐患且性能低下。

修复后的完整代码

def x1(x2,x3):
    # 修复笔误:0.2*3改为0.2*x3
    return (7.85 + (0.1*x2) + (0.2*x3))/3

def x2 (x1,x3):
    return (-19.3 - (0.1 *x1) + (0.3 *x3))/7

def x3(x1,x2):
    return ((-0.3 * x1) + (0.2 *x2) +71.4)/10

def error(n,o):
    # 新增除零保护,避免i=0时出现运算错误
    if n == 0:
        return "-"
    return ((n-o)/n) *100 

bx1, bx2, bx3 = 0, 0, 0

tabel = "{0:1} | {1:7} | {2:7} | {3:7} | {4:7} | {5:7} | {6:7}"

print(tabel.format("i", "x1", "x2", "x3", "e1", "e2", "e3"))
for i in range (0,5) :
    if i ==0 :
        print(tabel.format(i, bx1, bx2, bx3, "-", "-", "-"))
        cx1 = bx1 
        cx2 = bx2
        cx3 = bx3
        
    else:
        # 移除eval,直接用round保留三位小数
        cx1 = round(x1(bx2, bx3), 3)
        cx2 = round(x2(bx1, bx3), 3)
        cx3 = round(x3(bx1, bx2), 3)
        # 提前计算误差,统一传入format匹配占位符
        e1 = round(error(cx1, bx1), 2)
        e2 = round(error(cx2, bx2), 2)
        e3 = round(error(cx3, bx3), 2)
        print(tabel.format(i, cx1, cx2, cx3, e1, e2, e3))
    # 更新上一轮迭代值,保证下一轮误差计算正确
    bx1, bx2, bx3 = cx1, cx2, cx3

改动说明

  • 修复了x1函数的参数使用笔误,保证雅可比迭代逻辑正确性
  • 给error函数新增除零保护,避免初始值为0时的运算报错
  • 移除不必要的eval调用,改用round方法保留小数位,代码更安全高效
  • 将误差计算结果直接传入tabel.format的参数列表,匹配模板的7个占位符要求,彻底解决IndexError报错
  • 新增迭代后上一轮值的更新逻辑,保证每轮误差计算的准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 20:51:02