【发布时间】:2021-11-29 16:37:52
【问题描述】:
我有当前代码:
from math import cos, sin, pi
import numpy as np
import matplotlib.pyplot as plt
def f(x):
values = []
s = 0
for n in range(1, 6, 1):
s += -((2/(n*pi))*(((cos((n*pi)/2))-1)*(sin((n/2)*x))))
values.append(s)
return values
x = np.linspace(-2*pi, 6*pi, 500)
plt.plot(f(x))
我应该绘制 f(x),但是当我运行代码时,我得到了这个错误:
TypeError:只有 size-1 的数组可以转换为 Python 标量
关于我做错了什么有什么想法吗?
任何帮助将不胜感激!
【问题讨论】:
-
这是一个从您的
f实施中冒出来的错误。 (你可以单独运行f,而不用绘图,看看发生了什么。)s应该代表什么? -
@navneethc 哦,我可能应该提到这一点。在前一个任务中,我们被告知在 python 中实现 f(x) 的总和(表达式 -((2/(npi))*(((cos((npi)/2 ))-1)*(sin((n/2)*x)))) 在 n 的范围内是我想要求和的)。我还尝试设置“x = 5”,然后打印“f(x)”,这给了我一个包含五个总和的列表。这可能是一个混乱的答案,但我对编码很陌生,而且对术语也很陌生。希望它仍然可以解决问题。
-
是的,
x=5有效,因为您可以在int、float等上应用math.sin和math.cos。一个标量,一个单一的数值,基本上。而在您的代码中,您传递的是整个 numpy 数组;这是行不通的,因为x,如上所述,其中有 500 个点。错误消息说,您可以使用具有 1 个标量但不超过该标量的数组。 -
了解您尝试编写的实际数学过程会有所帮助。
-
@navneethc 添加了一个图片链接,向您展示它的样子
标签: python function plot typeerror linspace