gpt4 book ai didi

python - python 在 matlab 中是否有对应的 digits() 和 vpa() 函数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:24 24 4
gpt4 key购买 nike

假设我需要非常高的计算精度,或者我正在处理的程序对数值错误非常敏感。在 Matlab 中,我可以这样做:

d = 30;
digits(d);
t = vpa(1);
H = vpa(zeros(2, 2));
H(2, 1) = t;
H(1, 2) = t;
eigenvalues = vpa(eig(H));

当然上面的程序很简单,但是对于更大的矩阵和更多的变量情况也是一样的。

如何在 python 中重写它,我在 python 包中找不到任何对应的东西。

最佳答案

SymPy 以符号方式进行计算,您可以请求以任意精度进行评估。

>>> A
Matrix([
[ 1, 1, 1, 1, 0],
[-1, 1, 1, 1, 1],
[ 0, -1, 1, 1, 1],
[ 0, 0, -1, 1, 1],
[ 0, 0, 0, -1, 1]])
>>> evals = solve(A.charpoly().as_expr())
>>> evals[0].n(30)
1.44482461851856062804340583653

在这种情况下,5 阶多项式的形式无法被 eigenvals 例程识别,因此 A.eigenvals() 将产生错误。但是,如果您的矩阵不存在此类困难,则可以更直接地生成特征值:

>>> A = Matrix([[75, 74], [73,  4]])
>>> _.eigenvals()
{79/2 - 9*sqrt(329)/2: 1, 79/2 + 9*sqrt(329)/2: 1}
>>> list(_.keys())[0]
79/2 - 9*sqrt(329)/2
>>> _.n(30)
-42.1226071624767447920482826638

关于python - python 在 matlab 中是否有对应的 digits() 和 vpa() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58799103/

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