jacobi迭代法、高斯赛德尔迭代法python实现

jacobi迭代法

代码

#程序目的:实现jacobi迭代法
import numpy as np
import matplotlib.pyplot as plt

def draw_fuction():
	x=np.arange(0,8,0.01)
	y=np.arange(0,8,0.01)
	x,y=np.meshgrid(x,y)
	z=4*x+y-24
	w=2*x+5*y-30
	plt.contour(x,y,z,0)
	plt.contour(x,y,w,0)
def Jacobi(A,b,x_0,n):#记录未知数个数
	x=x_0.copy()
	y=x_0.copy()
	k=0
	key_value=[x]
	while(k<6):
		for i in range(n):
			sum_value=0
			for j in range(n):
				if j!=i:
					sum_value=sum_value+A[i][j]*x[j]
			y[i]=(b[i]-sum_value)/A[i][i]
		x=y.copy()
		k=k+1
		key_value.append(x)
	return x,key_value

A_value=[[4,1],[2,5]]
b=[24,30]
x_0=np.zeros(2)
experiment_value=Jacobi(A_value,b,x_0,2)[0]#输入系数矩阵、向量组右端值
key=Jacobi(A_value,b,x_0,2)[1]
print(key)
x=[]
y=[]
for i in range(7):
	x.append(int(key[i][0]))
	y.append(int(key[i][1]))
print(x)
print(y)

step=np.zeros((13,2))
#路线扩充
for i in range(13):
	if i%2==0:
		step[i]=key[i//2]
	else:
		step[i]=[key[(i+1)//2][0],key[i//2][1]]
print(step)

append_x=[]
append_y=[]
for i in range(13):
	append_x.append(step[i][0])
	append_y.append(step[i][1])
print(append_x)
print(append_y)

for i in range(5):
	plt.scatter(key[i][0],key[i][1], color='b')
	
draw_fuction()
# print(key[])
plt.plot(append_x,append_y,color='r')

plt.show()

结果

在这里插入图片描述

高斯赛德尔迭代法

代码

#程序目的:实现jacobi迭代法
import numpy as np
import matplotlib.pyplot as plt

def draw_fuction():
	x=np.arange(2,7,0.01)
	y=np.arange(2,7,0.01)
	x,y=np.meshgrid(x,y)
	z=4*x+y-24
	w=2*x+5*y-30
	plt.contour(x,y,z,0)
	plt.contour(x,y,w,0)
def Jacobi(A,b,x_0,n):#记录未知数个数
	x=x_0.copy()
	y=x_0.copy()
	k=0
	key_value=[x]
	while(k<6):
		for i in range(n):
			sum_value=0
			for j in range(i):
				if (i!=j):
					sum_value=sum_value+A[i][j]*y[j]
			for j in range(i+1,n):
				sum_value=sum_value+A[i][j]*x[j]
			print(sum_value)
			y[i]=(b[i]-sum_value)/A[i][i]
		x=y.copy()
		k=k+1
		key_value.append(x)
	return x,key_value

A_value=[[4,1],[2,5]]
b=[24,30]
x_0=np.zeros(2)
experiment_value=Jacobi(A_value,b,x_0,2)[0]#输入系数矩阵、向量组右端值
key=Jacobi(A_value,b,x_0,2)[1]
print(key)
x=[]
y=[]
for i in range(7):
	x.append(int(key[i][0]))
	y.append(int(key[i][1]))
print(x)
print(y)

step=np.zeros((13,2))
#路线扩充
for i in range(13):
	if i%2==0:
		step[i]=key[i//2]
	else:
		step[i]=[key[(i+1)//2][0],key[i//2][1]]
print(step)

append_x=[]
append_y=[]
for i in range(13):
	append_x.append(step[i][0])
	append_y.append(step[i][1])
print(append_x)
print(append_y)

for i in range(6):
	plt.scatter(key[i][0],key[i][1], color='b')
	
draw_fuction()
# print(key[])
plt.plot(append_x,append_y,color='r')

plt.show()

结果

高斯赛德尔迭代过程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值