gpt4 book ai didi

python - 矩阵乘法在 Python (SciPy/PyLab) 中给出了不正常的结果

转载 作者:太空狗 更新时间:2023-10-30 00:37:21 24 4
gpt4 key购买 nike

我是 Python 的新手,对我的线性代数有点生疏,所以也许这是一个简单的问题。我试图在矩阵上实现泰勒级数展开来计算 exp(A),其中 A 只是一个简单的 3x3 矩阵。这个扩展的公式顺便说一句是总和(A^n/n!)。

我的例程在 n=9 之前工作正常,但在 n=10 时,矩阵中的数字突然变为负数。这就是问题所在。

A**9 matrix([[ 250130371, 506767656, 688136342], [ 159014912, 322268681, 437167840], [ 382552652, 775012944, 1052574077]])

A**10 matrix([[-1655028929, 1053671123, -1327424345], [ 1677887954, -895075635, 319718665], [ -257240602, -409489685, -1776533068]])

凭直觉,A^9 * A 应该为矩阵的每个成员生成更大的数字,但如您所见,A^10 并未给出该结果。

有什么想法吗?

from scipy import *
from numpy import *
from numpy.linalg import *
#the matrix I will use to implement exp(A)
A = mat('[1 3 5; 2 5 1; 2 3 8]')
#identity matrix
I = mat('[1 0 0; 0 1 0; 0 0 1]')
#first step in Taylor Expansion (n=0)
B = I
#second step in Taylor Expansion (n=1)
B += A
#start the while loop in the 2nd step
n = 2
x=0
while x<10:
C = (A**n)/factorial(n)
print C
print " "
n+=1
B+= C
print B
x+=1

print B

感谢您提供的任何帮助!

最佳答案

您的矩阵是使用 int32(32 位整数)类型的元素创建的。您可以通过打印 A.dtype 的值来查看这一点。 32 位整数最多只能容纳约 20 亿的值,因此之后它们将环绕为负值。

如果 64 位整数足够大,您可以改用它们:

A = mat('[1 3 5; 2 5 1; 2 3 8]', dtype=numpy.int64)

否则,您可以使用 float 。它们具有更大的最大值,但精度有限,因此可能存在一些误差。

A = mat('[1 3 5; 2 5 1; 2 3 8]', dtype=float)

在这种情况下, float 可能是最佳选择,因为您不希望除以 n! 后的结果是整数。

关于python - 矩阵乘法在 Python (SciPy/PyLab) 中给出了不正常的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4910453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com