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

Python线性方程组迭代器循环计数异常问题求助

问题排查与修复

核心问题1:测试代码重复调用迭代方法

你在测试代码里连续调用了两次p_15.Jacobi_iteration():

print('(a) Jacobi solution:',p_15.Jacobi_iteration()[0],'\n iteration count:',p_15.Jacobi_iteration()[1])

第一次调用完成迭代后,第二次调用会重新从初始解开始计算。此时因为第一次迭代已经得到了接近收敛的结果,第二次迭代仅需1步就满足精度要求,所以你看到的itr=1是第二次迭代的次数,并非第一次完整迭代的次数。

核心问题2:Jacobi迭代方法的初始化逻辑错误

在Jacobi_iteration()中,第一次进入循环时就将curr_sol替换为空的next_sol,导致首次计算用的是未初始化的空数组,逻辑完全错误。同时,nthsol_update的参数是1-based索引,但循环中传入的是0-based的i,会引发索引越界问题。

修复后的代码

修正Jacobi迭代方法

def Jacobi_iteration(self):
    curr_sol = copy.deepcopy(self.ini)
    next_sol = np.empty_like(curr_sol)
    acc_test = False
    itr = 0
    
    # 首次迭代:用初始解计算next_sol
    for i in range(curr_sol.shape[0]):                
        next_sol[i,0] = self.nthsol_update(curr_sol, i+1)  # 传入1-based索引
    itr += 1
    acc_test = self.acc_test(curr_sol, next_sol)
    
    # 后续迭代循环
    while not acc_test:
        curr_sol = copy.deepcopy(next_sol)
        for i in range(curr_sol.shape[0]):                
            next_sol[i,0] = self.nthsol_update(curr_sol, i+1)
        acc_test = self.acc_test(curr_sol, next_sol)
        itr += 1
    return(next_sol, itr)

修正测试代码

mat_15=np.array([[4.63,-1.21,3.22],[-3.07,5.48,2.11],[1.26,3.11,4.57]])
p_15=diag_iterator(mat_15,np.array([2.22,-3.17,5.11]),np.zeros(3),1)
sol, itr = p_15.Jacobi_iteration()
print('(a) Jacobi solution:', sol, '\n iteration count:', itr)

仅调用一次迭代方法,将结果存入变量后再打印,避免重复计算。

额外优化建议

  • scarborough方法中,当ini_sol为0时,用0.00001做分母可能引入误差,建议改为直接判断绝对误差:
    def scarborough(self, ini_sol, next_sol, acc):
        if ini_sol != 0:
            return abs((ini_sol - next_sol)/ini_sol) < 0.5*10**(-acc)
        else:
            return abs(next_sol) < 0.5*10**(-acc)
    
  • acc_test方法可改用all()函数简化逻辑,更直观:
    def acc_test(self, ini_vec, next_vec):
        check_list = []
        for i in range(ini_vec.shape[0]):
            check_list.append(self.scarborough(ini_vec[i,0], next_vec[i,0], self.acc+math.log10(2)))
        return all(check_list)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:56:03