【问题标题】:Problem reproducing MATLAB code in Python involving a for loop在涉及 for 循环的 Python 中重现 MATLAB 代码的问题
【发布时间】:2020-03-27 04:36:23
【问题描述】:

我使用 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 阶 Chebyshev 多项式的节点,并将其存储在名为 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 出现了两次,它也是节点的第三个元素。我不知道为什么会发生这种情况,我想知道是否有人可以告诉我如何避免这个错误。

【问题讨论】:

  • 请发布您的预期输出

标签: python matlab numpy for-loop sympy


【解决方案1】:

问题出在这一行:

for i in range(numero+2)

相比:

for i=1:numero+1

变量i0 开始,我们真的希望它从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]

正如预期的那样。

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多