You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python绘制余弦交替级数定义函数遇ValueError错误求解决

问题分析与解决

错误原因

  1. 数组维度不匹配:你定义的func=np.zeros(n)是长度为n的一维数组,但每次循环计算的np.cos((2*count + 1)*input)/(2*count + 1)是和输入x同长度的numpy数组(因为x是数组,numpy会做广播运算),把一个数组赋值给单个数组元素就会触发ValueError。
  2. 符号错误:原级数是交替正负的(+cos(x)/1 -cos(3x)/3 +cos(5x)/5...),你的代码没处理符号,计算结果会偏离目标函数。
  3. 返回值格式错误:最终需要返回和x同长度的函数值数组,而不是存储每一项的二维数组,否则plt.plot无法正确绘图。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 4*np.pi, .01)

def cos_series(input_x, n_terms):
    # 初始化和输入x同长度的零数组,用于累加每一项
    func = np.zeros_like(input_x)
    for count in range(n_terms):
        k = 2 * count + 1
        # 处理交替符号:第count项(从0开始)的符号是(-1)^count
        sign = (-1) ** count
        # 计算当前项并累加
        func += sign * (4 / np.pi) * (np.cos(k * input_x) / k)
    return func

# 绘制前20项的级数近似
plt.plot(x, cos_series(x, 20))
plt.title('Fourier Series Approximation')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.show()

关键修改说明

  • 用np.zeros_like(input_x)初始化结果数组,保证维度和输入x一致,能直接累加每一项的数组结果。
  • 添加sign = (-1) ** count处理交替符号,匹配原级数的正负规则。
  • 改用for循环更简洁(也可以保留while,但for range(n_terms)更符合Python习惯),每次循环把当前项加到结果数组上,最终返回完整的函数值数组。

运行修正后的代码就能正确绘制出目标级数的近似曲线,随着n_terms增大,曲线会逐渐逼近方波函数(这个级数其实是方波的傅里叶余弦展开)。

内容的提问来源于stack exchange,提问作者Lucas Emiliano Bosteels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:35:20