数值分析实验 实验4-1 高斯-塞德尔迭代法 python3实现

题目

题目

代码

import numpy as np

# 系数矩阵A的行数
m = int(input("请输入系数矩阵A的行数:"))
# 系数矩阵A的列数
n = int(input("请输入系数矩阵A的列数:"))

# 系数矩阵A
a = np.empty([m, n])
print("请输入系数矩阵A:")
for i in range(m):
    a[i] = np.array(list(map(float, input().split())))

# 系数矩阵B
b = np.empty([m, 1])
print("请输入系数矩阵B:")
for i in range(m):
    b[i] = np.array(list(map(float, input().split())))

# 最大迭代次数
max_N = int(input("请输入最大迭代次数:"))

print("请输入初始向量:")
# 初始向量
x0 = np.empty([m, 1])
for i in range(m):
    x0[i] = np.array(list(map(float, input().split())))

# 误差限
e = float(input("请输入误差限:"))

# 系数矩阵 D + L
d_l = np.tril(a)

# 系数矩阵 D + L 的逆矩阵
d_l_1 = np.linalg.inv(d_l)

# 系数矩阵 U
u = np.triu(a, 1)

# 存放上次迭代的解
last_x = x0

# 当前迭代次数
current_N = 1
while True:
    if current_N > max_N:
        print("超出迭代次数!")
        break

    xk1 = np.dot(d_l_1, b) - np.dot(np.dot(d_l_1, u), last_x)

    if abs(xk1 - last_x).max() < e:
        print("解向量为:" + str(xk1))
        break

    last_x = xk1
    current_N += 1

运行结果

运行结果

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值