python - 在 Python 中重现涉及 for 循环的 MATLAB 代码时出现问题

标签 python matlab numpy for-loop sympy

我使用 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

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

正如预期的那样。

关于python - 在 Python 中重现涉及 for 循环的 MATLAB 代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59141054/

相关文章:

python - 为什么我的协程会阻塞整个 Tornado 实例?

python - Pandas 无法将输入转换为时间戳错误

matlab - 为什么 matlab Bootstrap 评估 N+1 次?

python - 字典更新序列元素错误

python - 如何删除有条件的对象

MATLAB:过滤嘈杂的心电图信号

windows - matlab xlsread 导致 Excel 崩溃 - 如何阻止它?

python - 如何创建 `numpy.array` 的 c 函数?

python - 在 matplotlib 中将直线拟合到对数对数曲线

Python:迭代数组的行和列