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

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日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?