python实现SOR迭代法

 

照着上面的式子写 

def SOR(A,b,x,e,w,times=100):
    #A为方程组系数矩阵
    #b为右端向量
    #x为初始解
    #e为误差大小
    #w为松弛因子
    #times为迭代次数
    D = np.mat(np.diag(np.diag(A)))
    L = np.triu(A, 1)
    U = np.tril(A, -1)
    Sw = (D+w*L).I*((1-w)*D-w*U)
    fw = w*((D+w*L).I)*b
    x0=x
    x = Sw * x0 + fw
    k = 1
    while k < times:
        if abs(np.max(abs(x-x0), axis=0))>e:
            x0=x
            x = Sw * x0 + fw
            k += 1
        else:
            print('当w为', w, '时,SOR在%d次内收敛' % k)
            break
    print('SOR迭代解为\n', x)
#例子
A = np.mat([[4,-6,2,-8],[-6,10,-6,14],[2,-6,35,-15],[-8,14,-15,22]])
b = np.mat('-8;12;16;13')
x = np.mat('0;0;0;0')
e = pow(10,-6)
times = 500
w = 1.5
SOR(A,b,x,e,w,times)

结果

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值