我使用 MATLAB 构建了以下代码:
numero=60;
a=zeros(numero,1)
b=zeros(numero+1,1)
for i=1:numero+1
a(i)=-cos(pi*(i-1)/numero)
end
figure
plot(a,b, '*')
它用于计算 numero
阶切比雪夫多项式的节点,并将其存储在名为 a
的向量中。
我需要用 Python 重现这个。我尝试的解决方案是
from mpmath import chebyt, chop, taylor
import numpy as np
import sympy as sp
numero=60
nodes = []
for i in range(numero+2):
auxiliary=-np.cos(np.pi*(i-1)/numero)
nodes.append(auxiliary)
[float(i) for i in nodes]
nodes.sort()
print(nodes)
但是,python 的输出存在问题。首先是列表的第二个数字 -0.9986295347545738
出现了两次,它也是节点的第三个元素。我不知道为什么会发生这种情况,我想知道是否有人可以告诉我如何避免这个错误。
最佳答案
问题出现在这一行:
for i in range(numero+2)
相比:
for i=1:numero+1
变量i
从0
开始,我们实际上希望它从1
开始。我们可以看到这会导致以下错误:
>>> -np.cos(np.pi*(0-1)/numero)
-0.9986295347545738
>>> -np.cos(np.pi*(1-1)/numero)
1.0
>>> -np.cos(np.pi*(2-1)/numero)
-0.9986295347545738
等等。所以修复方法是切换到:
for i in range(1, numero+2)
您还可以省略这些行:
[float(i) for i in nodes]
nodes.sort()
这给出了输出:
[-1.0, -0.9986295347545738, -0.9945218953682733, -0.9876883405951378, ..., 0.9876883405951377, 0.9945218953682734, 0.9986295347545738, 1.0]
正如预期的那样。
关于python - 在 Python 中重现涉及 for 循环的 MATLAB 代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141054/