2024-05-14 20:34:18 发布
网友
我需要用python计算特征值和特征向量。纽比和希比不起作用。他们都写Illegal instruction (core dumped)。我发现要解决这个问题我需要检查我的blas/lapack。所以,我认为写一个小函数来解决特征值问题可能是一个更简单的方法。有人知道这样的解决方案是否存在吗?
Illegal instruction (core dumped)
任何有效的解决方案都会在内部使用相同的blas/lapack库。我仍然认为修复你的libs并不难。
但如果你觉得更容易,你可以实现这些http://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Eigenvalue_algorithms中的任何一个。
我认为最容易实现的是power algorithm,但我怀疑它是否有效。
编写一个程序来解决特征值问题的工作量大约是修复库失配问题的100倍。
可以使用sympy(python计算机代数系统)来解决特征值问题,而无需使用Berkowitz方法的本机库。它不是很快,但是如果你有少量的小矩阵,那就不是问题了。
示例:
>>> from sympy import Matrix >>> m = Matrix([[10,2,3], [3,12,5], [5,5,8]]) >>> print m.eigenvals() # this gets the eigenvalues along with their multiplicity {10 - (-77/2 + sqrt(1019751)*I/18)**(1/3) - 50/(3*(-77/2 + sqrt(1019751)*I/18)**(1/3)): 1, 10 - (-77/2 + sqrt(1019751)*I/18)**(1/3)*(-1/2 + sqrt(3)*I/2) - 50/(3*(-77/2 + sqrt(1019751)*I/18)**(1/3)*(-1/2 + sqrt(3)*I/2)): 1, 10 - 50/(3*(-77/2 + sqrt(1019751)*I/18)**(1/3)*(-1/2 - sqrt(3)*I/2)) - (-77/2 + sqrt(1019751)*I/18)**(1/3)*(-1/2 - sqrt(3)*I/2): 1} >>> print map(complex, m.eigenvals().keys()) [(8.374025140524024+2.117582368135751e-22j), (3.8835463038416105-2.117582368135751e-22j), (17.742428555634365-1.0587911840678754e-22j)] # check with numpy >>> import numpy as np >>> print np.linalg.eigvals(np.array(m.tolist(), dtype=float)) array([ 17.74242856, 8.37402514, 3.8835463 ])
任何有效的解决方案都会在内部使用相同的blas/lapack库。我仍然认为修复你的libs并不难。
但如果你觉得更容易,你可以实现这些http://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Eigenvalue_algorithms中的任何一个。
我认为最容易实现的是power algorithm,但我怀疑它是否有效。
编写一个程序来解决特征值问题的工作量大约是修复库失配问题的100倍。
可以使用sympy(python计算机代数系统)来解决特征值问题,而无需使用Berkowitz方法的本机库。它不是很快,但是如果你有少量的小矩阵,那就不是问题了。
示例:
相关问题 更多 >
编程相关推荐