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

Python实现x绝对值近似函数 输出不同n值对应数组用于绘图

问题根因

你现有代码的核心问题有两个:

  • 函数传入的参数n没有被实际使用,反而在函数内部强制遍历了完整的n_values = [1,2,3,4]列表,所以无论你调用时传入n=2还是其他值,都会循环计算到n=4才停止
  • 变量作用域逻辑错误,第一次写的代码把y_values定义在全局,每次调用都会不断追加内容,第二次写的代码每次循环都会覆盖y_values,自然只能拿到最后一次n=4的结果

修正方案

第一步:修正近似计算函数

先把函数逻辑改对,输入参数n对应累加的项数,只计算到指定n为止:

import numpy as np
import matplotlib.pyplot as plt

x_values = np.linspace(-np.pi, np.pi, 101)

def abs_approx(x, n):
    s = 0
    # 循环到输入的n值为止,不要遍历固定的n_values
    for i in range(1, n+1):
        s += np.cos((2*i - 1)*x) / (2*i -1)**2
    value = np.pi/2 - (4/np.pi)*s
    return value

第二步:批量计算不同n的结果并绘图

n_values = [1,2,3,4]
# 计算真实绝对值
y_true = np.abs(x_values)

# 绘图
plt.figure(figsize=(10,6))
plt.plot(x_values, y_true, label='真实值 np.absolute', linewidth=2, linestyle='--')
for n in n_values:
    y_approx = abs_approx(x_values, n)
    plt.plot(x_values, y_approx, label=f'n={n} 近似值')

plt.xlabel('x')
plt.ylabel('|x|')
plt.legend()
plt.title('|x|的傅里叶级数近似效果对比')
plt.grid(alpha=0.3)
plt.show()

效果说明

修正后调用abs_approx(x_values, 2)就会返回n=2对应的近似结果,长度和x_values一致,你可以分别取出任意n的结果单独处理,也可以直接循环绘图对比不同n的近似精度,n越大拟合效果越好。

内容的提问来源于stack exchange,提问作者Milena Ljubisic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:15:01