【问题标题】:python warnings for overflow溢出的python警告
【发布时间】: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


    【解决方案1】:

    可能是除以 0 的问题

    【讨论】:

    • nono.. 代码工作正常。如果我更改矩阵的数据,它工作正常。问题是当我将小数字放入矩阵时
    猜你喜欢
    • 2013-09-19
    • 2022-01-23
    • 2019-09-23
    • 2021-03-03
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多