フーリエ級数展開とバーゼル問題の関係性

フーリエ解析 4/N

公開日: 2022-08-15
更新日: 2024-01-19

  Table of Contents

$f(x)=x^2$を周期的に拡張した関数のフーリエ係数

Problem

$f(x) = x^2 \ \ (-\pi\leq x < \pi)$を$f(x + 2\pi) = f(x)$と周期的に拡張した関数を$\tilde f(x)$としたとき, その拡張した関数のフーリエ係数を求めよ


解答

$\tilde f(x)$は偶関数なのでフーリエ余弦展開のみで十分であるので

\[\begin{align*} a_0 &= \frac{1}{\pi}\int_{-\pi}^\pi x^2\ dx\\[3pt] &= \frac{2}{\pi}\int_{0}^\pi x^2\ dx\\[3pt] &= \frac{2\pi^2}{3}\\ \\ a_n &= \frac{1}{\pi}\int_{-\pi}^\pi x^2\cos nx\ dx\\[3pt] &= \frac{2}{\pi}\int_{0}^\pi x^2\cos nx\ dx\\[3pt] &= 4\frac{(-1)^n}{n^2} \end{align*}\]

従って,

\[\tilde f(x) \sim \frac{\pi^2}{3} + 4\sum_{n=1}^\infty \frac{(-1)^n}{n^2}\cos nx\]

バーゼル問題とフーリエ展開

バーゼル問題

平方数の逆数和は$\displaystyle \frac{\pi^2}{6}$ に収束する. つまり,

\[\sum_{n=1}^\infty\frac{1}{n^2} = \frac{\pi^2}{6}\]

この収束は上でもとめたフーリエ級数展開から理解することができます

\[\tilde f(x) \sim \frac{\pi^2}{3} + 4\sum_{n=1}^\infty \frac{(-1)^n}{n^2}\cos nx\]

に対し, $x = \pi$を代入すると

\[\pi^2 = \frac{\pi^2}{3} + \sum_{n=1}^\infty \frac{4}{n^2}\]

これを整理すると

\[\begin{align*} \frac{2}{3}\pi^2 &= \sum_{n=1}^\infty \frac{4}{n^2}\\[3pt] \Rightarrow \frac{\pi^2}{6} &= \sum_{n=1}^\infty \frac{1}{n^2} \end{align*}\]

従って, バーゼル問題の級数を得ることが出来ました.

Appendix: フーリエ級数展開plot用Pythonプログラム

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import plotly.express as px
import numpy as np

## LaTex記述用
from IPython.display import display, HTML
import plotly

plotly.offline.init_notebook_mode()
display(HTML(
    '<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_SVG"></script>'
))

## 級数展開
def fourier(x, max_n):
    y = np.pi ** 2 / 3
    term = 1
    while max_n + 1 > term:
        y += 4 * ((-1) ** term) * np.cos(term * x) / np.power(term, 2)
        term += 1

    return y

## True Function
def f_x(x):
    if x >= -np.pi and x < np.pi:
        return x ** 2
    elif x < -np.pi:
        return f_x(x+2*np.pi)
    else:
        return f_x(x-2*np.pi)
    

## Plot
x = np.linspace(-3*np.pi*1.1, 3*np.pi*1.1, 1000)
y, y2, y3 = fourier(x, max_n=1), fourier(x, max_n=2), fourier(x, max_n=100)
y4 = np.vectorize(f_x)(x)


fig = px.line(x=x, y=[y, y2, y3, y4], 
              render_mode='SVG', 
              title='フーリエ級数展開例<br><sup>opacity=.6 , n = 1, 2, 100</sup>',
              )
newnames = {'wide_variable_0':'n=1', 
            'wide_variable_1':'n=2',
            'wide_variable_2':'n=3',
            'wide_variable_3':'true'}
fig.update_traces(opacity=.8)
fig.for_each_trace(lambda t: t.update(name = newnames[t.name],
                                      legendgroup = newnames[t.name],
                                      hovertemplate = t.hovertemplate.replace(t.name, newnames[t.name])
                                     )
                  )
fig.update_xaxes(tickangle=0,
                 tickmode = 'array',
                 tickvals = [-3*np.pi, -2*np.pi, -3/2*np.pi, -np.pi, -1/2*np.pi, 
                             0, 1/2*np.pi, np.pi, 3/2*np.pi, 2*np.pi, 3*np.pi],
                 ticktext=['$-3\pi$', '$-2\pi$', '', '$-\pi$', '', '0', '', '$\pi$', '', '$2\pi$', '$3\pi$'])
fig.show()
fig.write_html('test.html')


Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)