【发布时间】:2011-06-22 01:55:18
【问题描述】:
我是 Python 新手,对我的线性代数有点生疏,所以也许这是一个简单的问题。我正在尝试在矩阵上实现泰勒级数展开来计算 exp(A),其中 A 只是一个简单的 3x3 矩阵。顺便说一句,这个展开的公式是 sum( A^n / n! )。
我的例程在 n=9 时运行良好,但在 n=10 时,矩阵中的数字突然变为负数。这就是问题所在。
A**9 矩阵([[ 250130371, 506767656, 688136342], [159014912, 322268681, 437167840], [382552652, 775012944, 1052574077]])
A**10 矩阵([[-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
感谢您提供的任何帮助!
【问题讨论】:
-
大数变成负数听起来像是整数溢出。您是否尝试过设置具有更大整数类型的矩阵?
-
您应该避免
from module import *类型的导入。你刚刚用大量函数污染了你的命名空间。
标签: python matrix numpy scipy linear-algebra