python求雅可比矩阵_【Python实现雅可比&高斯-赛德尔&超松弛迭代法】

#!/usr/bin/python

# _*_ coding: UTF-8 _*_

#author:Gouzy

#date:2019年3月25日14:54:37

import numpy as np

#雅可比迭代法

def Jacobi(n,A,B,x0,x,eps,k):

"""雅可比迭代法

Args:

n: 矩阵阶数

A:为方程组的系数矩阵

B:为方程组右端的列向量

x:为迭代初值构成的列向量

x:迭代向量

eps :精度误差

k:最大迭代次数

Returns:

times:迭代次数

x:Array数组x的解

Raises:

"""

times = 0

while times

for i in range(n):

temp = 0

for j in range(n):

if i != j:

temp += x0[j] * A[i][j]

x[i] = ((B[i] - temp) / A[i][i])

error = max(abs(x - x0))

times += 1

if error < eps:

print("精确度等于", eps, "时,雅可比迭代法需要迭代", times, "次收敛")

return (x, times)

else:

x0 = x.copy()

print("在最大迭代次数内不收敛","最大迭代次数后的结果为",x)

return None

#高斯-赛德尔迭代法

def gseid(n,A,B,x0,x,eps,k):

"""高斯-赛德尔迭代法

Args:

n: 矩阵阶数

A:为方程组的系数矩阵

B:为方程组右端的列向量

x:为迭代初值构成的列向量

x:迭代向量

eps :精度误差

k:最大迭代次数

Returns:

times:迭代次数

x:Array数组x的解

Raises:

"""

times = 1

while times

for i in range(n):

temp = 0

temps =x0.copy()

for j in range(n):

if i != j:

temp += x0[j] * A[i][j]

x[i] = (B[i] - temp) / A[i][i]

x0[i] = x[i].copy()

error = max(abs(x - temps))

times += 1

if error < eps:

print("精确度等于", eps, "时,高斯-赛德尔迭代法需要迭代", times, "次收敛")

return (x, times)

else:

x0 = x.copy()

print("在最大迭代次数内不收敛", "最大迭代次数后的结果为", x)

return None

#超松弛迭代法

def sor(n,A,B,x0,x,eps,k,w):

"""超松弛迭代法

Args:

n: 矩阵阶数

A:为方程组的系数矩阵

B:为方程组右端的列向量

x:为迭代初值构成的列向量

x:迭代向量

eps :精度误差

k:最大迭代次数

w:松弛因子

Returns:

times:迭代次数

x:Array数组x的解

Raises:

"""

times = 1

while times < k:

for i in range(n):

temp = 0

temps = x0.copy()

for j in range(n):

if i != j:

temp += x0[j] * A[i][j]

x[i] = w*((B[i] - temp) / A[i][i])

x0[i] = x[i].copy()

calTemp = max(abs(x - temps))

times += 1

if calTemp < eps:

print("精确度等于", eps, "时,超松弛迭代法需要迭代", times, "次收敛")

return (x, times)

else:

x0 = x.copy()

print("在最大迭代次数内不收敛", "最大迭代次数后的结果为", x)

return None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值