在涉及 for 循环的 Python 中复制 MATLAB 代码时出现问题

Problem reproducing MATLAB code in Python involving a for loop

提问人:slow_learner 提问时间:12/2/2019 最后编辑:CDJBslow_learner 更新时间:2/8/2020 访问量:52

问:

我使用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, '*')

它用于计算切比雪夫阶多项式的节点,并将其存储在名为 的向量中。 我需要在 Python 中重现它。我对解决方案的尝试是numeroa

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

python matlab numpy for-loop sympy

评论

0赞 bcosta12 12/2/2019
请发布您的预期输出

答:

3赞 CDJB 12/2/2019 #1

问题出现在这一行中:

for i in range(numero+2)

相比于:

for i=1:numero+1

变量从 开始,实际上我们希望它从 开始。我们可以看到,这导致了以下错误:i01

>>> -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]

不出所料。