【发布时间】:2021-11-03 05:07:36
【问题描述】:
这是我的python代码:
import numpy as np
matrix = np.array([[2.0, -1.0], [1.0, 5.0]], dtype=np.float64)
ind = np.array([3.0, 1.0])
matrix2 = np.array([[2.0, 3.0], [-1.0, 1.0]])
ind2 = np.array([1.0, 2.0])
#------
tol = 0.1
xini = np.zeros(matrix.shape[0])
iters = 30
#------
def jacobi(matris, ind, tol, xini, iters):
dimenciones = matris.shape #una tupla de la forma (filas, columnas)
filas = dimenciones[0]
cols = dimenciones[1]
xprev = xini
xactual = np.zeros(filas) #~un array de la forma [0, 0, 0, 0, ..., 0]
it = 1
while it <= iters:
for i in range(filas):
sum = 0.0
for j in range(i):
sum += matris[i, j]*xprev[j]/matris[i,i]
for j in range(i+1, cols):
if (i+1 != cols):
sum += matris[i, j]*xprev[j]/matris[i,i]
xactual[i] = ind[i]/matris[i,i] - sum
i = i + 1
mod = np.linalg.norm(np.array(xactual) - np.array(xprev))
if (mod < tol):
print("(jacobi)Solucion aproximada encontradada,", xactual, "Iteraciones:", it+1)
return xactual
xprev = np.copy(xactual)
print("(jacobi)cantidad maxima de iters alcansada")
def gseidel(matris, ind, tol, xini, iters):
dimenciones = matris.shape #una tupla de la forma (filas, columnas)
filas = dimenciones[0]
cols = dimenciones[1]
xprev = xini
xactual = np.zeros(filas) #~un array de la forma [0, 0, 0, 0, ..., 0]
it = 1
while it <= iters:
for i in range(filas):
sum = 0.0
for j in range(i):
sum += matris[i, j]*xactual[j]/matris[i,i]
for j in range(i+1, cols):
if (i+1 != cols):
sum += matris[i, j]*xprev[j]/matris[i,i]
xactual[i] = ind[i]/matris[i,i] - sum
i = i + 1
mod = 0
mod = np.linalg.norm(np.array(xactual) - np.array(xprev))
if (mod < tol):
print("(seidel)Solucion aproximada encontradada,", xactual, "Iteraciones:", it+1)
return xactual
xprev = np.copy(xactual)
print("(seidel)cantidad maxima de iters alcansada")
print("corrida con datos: 30 iters, tol = 0.1, Xini =", xini)
print("matris")
print(matrix)
print("terminos independientes =", ind)
jacobi(matrix, ind, tol, xini, iters)
gseidel(matrix, ind, tol, xini, iters)
print("corrida con datos: 30 iters, tol = 0.1, Xini =", xini)
print("matris2")
print(matrix2)
print("terminos independientes =", ind2)
jacobi(matrix2, ind2, tol, xini, iters)
gseidel(matrix2, ind2, tol, xini, iters)
这些是出现警告的行:
Warning (from warnings module):
sum += matris[i, j]*xprev[j]/matris[i,i]
RuntimeWarning: overflow encountered in double_scalars
Warning (from warnings module):
mod = np.linalg.norm(np.array(xactual) - np.array(xprev))
RuntimeWarning: invalid value encountered in subtract
我尝试了很多公式,但没有任何效果。
【问题讨论】:
标签: python python-3.x numpy overflow