想当爷爷的孙子 2020-05-04 12:34 采纳率: 66.7%
浏览 334
已采纳

python 用雅可比方法求解稀疏矩阵,完全不会写,求助a

图片说明

import numpy as np
def Jacobi(A, b, iter_n, initial_guess=0):
n = len(A)

D = np.diag(A)
R = A - np.diag(D)
x_i = initial_guess * np.ones(n)
for i in range(iter_n):
    print('x_',i,'=',x_i)
    x_i = (b - R.dot(x_i)) / D

return x_i

def A_ij(n):
A = np.empty((n, n))
for i in range(n):
A[i, i] = 2
for i in range(n-1):
A[i,i+1]=A[i+1,i]=1
return A
def b_i(n):
b=np.empty(n)
b[0]=1
b[n-1]=-1
return b
def x0(n):
return np.zeros(n)
print(Jacobi(A,b,100,x0))

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-05-04 12:56
    关注
    # -*- coding: utf-8 -*-
    
    #Jacobi迭代法 输入系数矩阵mx、值矩阵mr、迭代次数n、误差c(以list模拟矩阵 行优先)
    
    def Jacobi(mx,mr,n=100,c=0.0001):
        if len(mx) == len(mr):  #若mx和mr长度相等则开始迭代 否则方程无解
            x = [] #迭代初值 初始化为单行全0矩阵
            for i in range(len(mr)):
                x.append([0])
            count = 0 #迭代次数计数
            while count < n:
                nx = [] #保存单次迭代后的值的集合
                for i in range(len(x)):
                    nxi = mr[i][0]
                    for j in range(len(mx[i])):
                        if j!=i:
                            nxi = nxi+(-mx[i][j])*x[j][0]
                    nxi = nxi/mx[i][i]
                    nx.append([nxi]) #迭代计算得到的下一个xi值
                lc = [] #存储两次迭代结果之间的误差的集合
                for i in range(len(x)):
                    lc.append(abs(x[i][0]-nx[i][0]))
                if max(lc) < c:
                    return nx #当误差满足要求时 返回计算结果
                x = nx
                count = count + 1
            return False #若达到设定的迭代结果仍不满足精度要求 则方程无解
        else:
            return False
    
    #调用 Jacobi(mx,mr,n=100,c=0.001) 示例
    mx = [[8,-3,2],[4,11,-1],[6,3,12]]
    
    mr = [[20],[33],[36]]
    print(Jacobi(mx,mr,100,0.00001))
    
    

    https://blog.csdn.net/cswfqxs_/article/details/84067711

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 请详细说明问题背景 4月14日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵