提问人:slow_learner 提问时间:12/2/2019 最后编辑:CDJBslow_learner 更新时间:2/8/2020 访问量:52
在涉及 for 循环的 Python 中复制 MATLAB 代码时出现问题
Problem reproducing MATLAB code in Python involving a for loop
问:
我使用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 中重现它。我对解决方案的尝试是numero
a
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
答:
3赞
CDJB
12/2/2019
#1
问题出现在这一行中:
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]
不出所料。
评论