typst-itmo/chastotnie-methods/lab1/Егор_Капралов_5_1.typ
2024-09-17 00:28:11 +03:00

926 lines
49 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#import "../lab-template.typ"
#import lab-template: *
#import "@preview/cetz:0.2.2": canvas, plot
#show: doc => lab(
num: 1,
name: [Ряды Фурье],
doc
)
= Вещественные функции
Придумайте числа $a, b, t_0, t_1, t_2$ такие, что $a, b > 0$ и $t_2 > t_1 > t_0 > 0$. Рассмотрите следующие функции $f : RR -> RR$ и для каждой из функции:
- Постройте график $f(t)$
- Рассмотрите частичные суммы Фурье $F_N$ и $G_N$ вида
$ F_N (t) = a_0/2 + sum^N_(n=1) (a_n cos(omega_n t) + b_n sin(omega_n t)) $
$ G_N (t) = sum^N_(n=-N) c_n e^(i omega_n t) $
где $omega_n = (2 pi n)/T$
- Приведите формулы для вычисления коэффициентов $(a_n, b_n)$ и $c_n$ для каждого случая. Если значения некоторых из них очевидны, укажите это. Для первой функции (квадратная волна) и $n=0, 1, 2$ вычислите значения указанных коэффициентов вручную.
- Напишите программу, которая вычисляет коэффициениты Фурье $(a_n, b_n)$ и $c_n$ для произвольного $N$. Приведите в отчёте коэффициенты для случая $N = 3$.
- Постройте графики $F_N (t)$ и $G_N (t)$ для пяти различных значений $N$. Сравните их друг с другом и с графиком исходной функции $f(t)$.
- Проверьте выполнение равенства Парсеваля для коэффициентов $(a_n, b_n)$ и $c_n$.
== *Квадратная волна* <sq-wave>
Периодическая функция с периодом $T = t_2 - t_0$ такая, что
$ f(t) = cases(
a\, & t in [t_0, t_1),
b\, & t in [t_1, t_2)
) $
Пусть $a = 1, b = 2$ и $t_0 = 1, t_1 = 2, t_2 = 3$. В таком случае конечная функция будет вида:
$ f(t) = cases(
1\, & t in [1, 2),
2\, & t in [2, 3)
) $
Построим график данной функции:
#figure(
canvas(length: 0.9cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -3, x-max: 3,
y-min: 0, y-max: 3,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$f(t)$],
{
plot.add(domain: (-2.99, 2.99), t => {
let (t0, t1, t2) = (1, 2, 3)
if t < 0 { t = -t + 1 }
let abs_rem = calc.rem(t, t2 - t0)
if abs_rem >= t0 and abs_rem < t1 {
return 1
} else {
return 2
}
}, line: "hvh", samples: 100)
}
)
}), caption: [График квадратной волны $f(t)$]
) <sq_wave>
#pagebreak()
Период функции равен $T = t_2 - t_0 = 2$, рассмотрим функцию на промежутке $[1; 3]$ и найдём коэффициенты $a_0, a_n, b_n, c_n$:
$ a_0 &= 1/(T/2) integral^(3)_(1) f(t)upright(d)t = integral^3_1 f(t)upright(d)t = (integral^2_1 1 + integral^3_2 2)upright(d)t = (lr(t|)^2_1 + lr(2t|)^3_2) \
&= 2 - 1 + 6 - 4 = 3 $
$ a_n &= 1/(T/2) integral^3_1 f(t)cos(omega_n t)upright(d)t = integral^3_1 f(t)cos(pi n t)upright(d)t \
&= (integral^2_1 cos(pi n t) + integral^3_2 2cos(pi n t))upright(d)t = lr(sin(pi n t)/(pi n)|)^2_1 + lr((2sin(pi n t))/(pi n)|)^3_2 \
&= overbrace(sin(2pi n)/(pi n), 0) - overbrace(sin(pi n)/(pi n), 0) + (2overbrace(sin(3pi n), 0))/(pi n) - overbrace((2sin(2pi n))/(pi n), 0) = 0 $
$ b_n &= 1/(T/2) integral^3_1 f(t)sin(omega_n t)upright(d)t = integral^3_1 f(t)sin(pi n t)upright(d)t \
&= (integral^2_1 sin(pi n t) + integral^3_2 2sin(pi n t))upright(d)t = lr(-cos(pi n t)/(pi n)|)^2_1 - lr((2cos(pi n t))/(pi n)|)^3_2 \
&= -cos(2pi n)/(pi n) + cos(pi n)/(pi n) - (2cos(3pi n))/(pi n) + (2cos(2pi n))/(pi n) \
&= cos(2pi n)/(pi n) + cos(pi n)/(pi n) - (2cos(pi n))/(pi n) = 1/(pi n) - cos(pi n)/(pi n) = (1 - (-1)^n)/(pi n) \
&= cases(
0\, & n = 2k,
2/(pi n)\, & n = 2k - 1
), k in ZZ $
$ c_n &= 1/T integral^3_1 f(t)e^(-i omega_n t) = 1/2 integral^3_1 f(t)e^(-i pi n t) = 1/2 (integral^2_1 e^(-i pi n t) + integral^3_2 2e^-(i pi n t))upright(d)t \
&= 1/2 (lr(-(i e^(-i pi n t))/(pi n)|)^2_1 - lr((2i e^(-i pi n t))/(pi n)|)^3_2) = -(i e^(-2i pi n))/(2pi n) + (i e^(-i pi n))/(2pi n) - (2i e^(-3i pi n))/(2pi n) + (2i e^(-2i pi n))/(2pi n) \
&= (i e^(-2i pi n))/(2pi n) - (i e^(-i pi n))/(2pi n) = i/(2pi n) - (i(-1)^n)/(2pi n) = (i(1 - (-1)^n))/(2pi n) \
&= cases(
0\, & n = 2k,
i/(pi n)\, & n = 2k - 1
), k in ZZ $
$ a_0 &= 3, a_n = 0, c_0 = a_0\/2 = 1.5 \
b_n &= cases(
0\, & n = 2k,
2/(pi n)\, & n = 2k - 1
), k in ZZ \
c_n &= cases(
0\, & n = 2k,
i/(pi n)\, & n = 2k - 1
), k in ZZ $
Вычислим значения коэффициентов для $n = 0, 1, 2$:
$ A = vec(a_0, a_1, a_2) = vec(3, 0, 0), B = vec(b_0, b_1, b_2) = vec(0, 2/pi, 0), C = vec(c_0, c_1, c_2) = vec(3, i/pi, 0) $
Вручную считать тяжко, поэтому напишем программу на _Python_, которая будет принимать на вход $N$ и считать коэффициенты по найденным формулам:
#figure(```python
from sys import argv
from math import pi
function_formulas = [
# 1. Square wave
{
'an': lambda n: 3 if n == 0 else 0,
'bn': lambda n: 0 if n % 2 == 0 else 2 / (pi * n),
'cn': lambda n: 3 if n == 0 else (0 if n % 2 == 0 else 1j / (pi * n))
}
]
index, nn = int(argv[1]), int(argv[2])
formulas = function_formulas[index - 1]
coefficients = {'an': [], 'bn': [], 'cn': []}
for coefficient in coefficients:
for n in range(0, nn + 1):
calc = formulas[coefficient](n)
coefficients[coefficient].append(f'{n}: {calc:.5g}')
if coefficient == 'cn' and n != 0:
calc = formulas[coefficient](-n)
coefficients[coefficient].insert(0, f'{-n}: {calc:.5g}')
for coefficient in coefficients:
print(f'{coefficient} values: ', coefficients[coefficient])
```, caption: "Код программы для подсчета коэффициентов") <prog>
Программа принимает на вход номер задания соответствующей функции и произвольное $N$ и выводит подсчитанные коэффициенты $a_n, b_n, c_n$ для $n = 0,1,2...N$. Список _function_formulas_ хранит формулы для расчетов коэффитциентов в виде лямда выражений для каждой функции, данный список будет расширяться по мере нахождения формул для других функций.
Воспользуемся программой для нахождения коэффициентов для $N = 3$, нас интересует функция 1 - квадратная волна, вызывыаем программу с аргументами _1_ и _3_:
#figure(```
$ python fourier.py 1 3
an values: ['0: 3', '1: 0', '2: 0', '3: 0']
bn values: ['0: 0', '1: 0.63662', '2: 0', '3: 0.21221']
cn values: ['-3: -0-0.1061j', '-2: 0', '-1: -0-0.31831j', '0: 3', '1: 0+0.31831j', '2: 0', '3: 0+0.1061j']
```, caption: "Ввывод программы для первой функции")
Значения коэффициентов для $n = 0, 1, 2$ совпадают с посчитанными вручную, значит высока вероятность, что программа работает корректно. Также стоит заметить, что программа округляет коэффициенты до 5 знаков после запятой и считает дополнительно коэффициенты $c_n$ для отрицательных $n$
Запишем частичные суммы Фурье $F_3$ и $G_3$ с учётом подсчитанных коэффициентов:
$ F_3(t) = 3/2 + 0.63662sin(pi t) + 0.21221sin(3pi t) $
$ G_3(t) = -0.1061i e^(-3i pi t) -0.31831i e^(-i pi t) + 3/2 + 0.31831i e^(i pi t) + 0.1061i e^(3i pi t) $
С помощью программы из @prog, подсчитаем также коэффициенты для $N = 5, 7, 9$, после чего построим график $F_N (t)$ для значений $N = 1, 3, 5, 7, 9$ и сравним их с $f(t)$. Графики $G_N (t)$ получатся аналогичны $F_N (t)$, поскольку изначальная функция не является комплексной (вещественная часть будет совпадать, а комплексной части - нет):
#figure(
canvas(length: 1.75cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -3, x-max: 3,
y-min: 0, y-max: 3,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$F_N (t)$],
{
plot.add(domain: (-2.99, 2.99), t => {
let (t0, t1, t2) = (1, 2, 3)
if t < 0 { t = -t + 1 }
let abs_rem = calc.rem(t, t2 - t0)
if abs_rem >= t0 and abs_rem < t1 {
return 1
} else {
return 2
}
}, line: "hvh", samples: 100, label: [$f(t)$#v(1em)])
plot.add(domain: (-2.99, 2.99), t => {
3/2 + 0.63662*calc.sin(calc.pi*t)
}, line: "spline", samples: 100, label: [$F_1(t)$#v(1em)])
plot.add(domain: (-2.99, 2.99), t => {
3/2 + 0.63662*calc.sin(calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_3(t)$#v(1em)])
plot.add(domain: (-2.99, 2.99), t => {
3/2 + 0.63662*calc.sin(calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t) + 0.12732*calc.sin(5*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_5(t)$#v(1em)])
plot.add(domain: (-2.99, 2.99), t => {
3/2 + 0.63662*calc.sin(calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t) + 0.12732*calc.sin(5*calc.pi*t) + 0.090946*calc.sin(7*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_7(t)$#v(1em)])
plot.add(domain: (-2.99, 2.99), t => {
3/2 + 0.63662*calc.sin(calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t) + 0.12732*calc.sin(5*calc.pi*t) + 0.090946*calc.sin(7*calc.pi*t) + 0.070736*calc.sin(9*calc.pi*t)
}, line: "spline", samples: 100, style: (stroke: purple), label: [$F_9(t)$])
}
)
}), caption: [Графики частичных сумм Фурье первой функции $F_N (t)$ и $f(t)$]
)
Из графиков видно, что сумма Фурье $F_N (t)$ сходится к исходной функции $f(t)$ при $N -> infinity$ - коэффициенты $a_n, b_n, c_n$ подсчитаны верно.
Проверим выполнение равенства Парсеваля:
$ 1/(T/2) integral^3_1 (f(t))^2 upright(d)t = a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^2) $
Вычислим левую часть:
$ 1/(T/2) integral^3_1 (f(t))^2 upright(d)t = (integral^2_1 1^2 + integral^3_2 2^2) upright(d)t = lr(t|)^2_1 + lr(4t|)^3_2 = 2 - 1 + 12 - 8 = 5 $
#pagebreak()
Подробнее рассмотрим ряд из правой части равенства:
$ sum^infinity_(n=1) (a_n^2 + b_n^2) = sum^infinity_(n=1) b_n^2 $
Коэффициент $b_n$ задан частями, при чётных $n$ он равен $0$, а при нечётных $2/(pi n)$. В таком случае можно игнорировать все чётные значения $n$ ($2k$) и рассматривать лишь нечётные ($2k - 1$):
$ sum^infinity_(n=1) b_n^2 = sum^infinity_(k=1) (2/(pi(2k - 1)))^2 = 4/pi^2 sum^infinity_(k=1) 1/(2k - 1)^2 $
Полученный нами ряд состоит из элементов ${1, 1/9, 1/25, 1/49...}$. Рассмотрим ряды ${1/k^2; k in NN}$ и ${1/(4k^2); k in NN}$. Они состоят соответсвенно из элементов ${1, 1/4, 1/9, 1/16, 1/25, 1/36, 1/49...}$ и ${1/4, 1/16, 1/36...}$. Заметим, что исключив из ряда ${1/k^2; k in NN}$ элементы ряда ${1/(4k^2); k in NN}$, мы получим наш исходный ряд, следовательно, сумма элементов исходного ряда будет равна разности сумм элементов рядов ${1/k^2; k in NN}$ и ${1/(4k^2); k in NN}$:
$ sum^infinity_(k=1) 1/(2k - 1)^2 = sum^infinity_(k=1) 1/k^2 - sum^infinity_(k=1) 1/(4k^2) = 3/4 sum^infinity_(k=1) 1/k^2 = 3/4 dot pi^2/6 = pi^2/8 $
$ sum^infinity_(n=1) (a_n^2 + b_n^2) = sum^infinity_(n=1) b_n^2 = 4/pi^2 dot pi^2/8 = 1/2 $
$ a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^2) = 9/2 + 1/2 = 10/2 = 5 $
$ underbrace(integral^3_1 (f(t))^2 upright(d)t, 5) = underbrace(a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^2), 5) $
Левая и правая части равны - равенство Парсеваля выполняется.
== Любая *чётная* периодическая функция по вашему выбору
Проанализируем следующую чётную функцию:
$ f(t) = cases(
t + 1\, & t in [-2; 0),
-t + 1\, & t in [0; 2)
) $
Построим график данной функции:
#figure(
canvas(length: 0.85cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -5, x-max: 5,
y-min: -2, y-max: 2,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$f(t)$],
{
plot.add(domain: (-4.99, 4.99), t => {
let (t0, t1, t2) = (-2, 0, 2)
let tt = calc.rem(calc.abs(t) - t0, t2 - t0) + t0
if tt >= t0 and tt < t1 {
return tt + 1
} else {
return -tt + 1
}
}, line: "linear", samples: 1000)
}
)
}), caption: [График треугольной волны $f(t)$]
)
По графику данной функции видно, что это - треугольная волна, $T = 4$, $omega_n = (pi n)/2$. Рассмотрим функцию на промежутке $[-2; 2]$ и найдём коэффициенты $a_0, a_n, b_n, c_n$, пользуясь свойствами чётности функции:
$ a_0 &= 1/(T/2) integral^2_(-2) underbrace(f(t), "even") upright(d)t = 1/2 dot 2integral^2_0 f(t) upright(d)t = integral^2_0 (-t + 1) upright(d)t \
&= 2lr((-t^2/2 + t)|)^2_0 = -4 + 4 = 0 $
$ a_n &= 1/(T/2) integral^2_(-2) underbrace(underbrace(f(t), "even")underbrace(cos(omega_n t), "even"), "even") upright(d)t = 1/2 dot 2integral^2_0 (-t + 1)cos(omega_n t) upright(d)t = integral^2_0 cos(omega_n t) upright(d)t - integral^2_0 t cos(omega_n t) upright(d)t \
&= lr((sin(omega_n t))/omega_n|)^2_0 - lr((t sin(omega_n t))/omega_n|)^2_0 + integral^2_0 sin(omega_n t)/omega_n upright(d)t \
&= (2overbrace(sin(pi n), 0))/(pi n) - (2overbrace(sin(0), 0))/(pi n) - (4overbrace(sin(pi n), 0))/(pi n) - lr((cos(omega_n t))/omega_n^2|)^2_0 = -(4cos(pi n))/(pi^2 n^2) + (4cos(0))/(pi^2 n^2) \
&= (4(1 - (-1)^n))/(pi^2 n^2) = cases(
0 \, & n = 2k,
8/(pi^2 n^2) \, & n = 2k - 1,
), k in ZZ $
Поскольку интеграл нечётной функции (которая получается в результате умножения чётной и нечётной) на симметричном интервале равен 0, то $b_n$ также равен 0:
$ b_n = 1/(T/2) integral^2_(-2) underbrace(underbrace(f(t), "even")underbrace(sin(omega_n t), "odd"), "odd") upright(d)t = 0 $
Для подсчёта коэффициента $c_n$ воспользуемся способом отличным от пункта 1 - вычислим его с помощью уже известных нам коэффициентов $a_n$ и $b_n$:
$ c_0 = a_0/2 = 0 $
$ c_n = (a_n - i b_n)/2 = a_n/2 = cases(
0 \, & n = 2k,
4/(pi^2 n^2) \, & n = 2k - 1,
), k in ZZ $
$ c_(-n) = (a_n + i b_n)/2 = a_n/2 = cases(
0 \, & n = 2k,
4/(pi^2 n^2) \, & n = 2k - 1,
), k in ZZ $
#pagebreak()
Дополним программу @prog новой чётной функцией:
#figure(```python
...
function_formulas = [
...
# 2. Even func
{
'an': lambda n: 0 if n == 0 else (0 if n % 2 == 0 else 8 / (pi ** 2 * n ** 2)),
'bn': lambda n: 0,
'cn': lambda n: 0 if n == 0 else (0 if n % 2 == 0 else 4 / (pi ** 2 * n ** 2))
}
...
]
...
```, caption: "Дополнение программы чётной функцией")
Вновь воспользуемся программой для вычисления коэффициентов для $N=3$ и запишем частичные суммы Фурье:
#figure(```
$ python fourier.py 2 3
an values: ['0: 0', '1: 0.81057', '2: 0', '3: 0.090063']
bn values: ['0: 0', '1: 0', '2: 0', '3: 0']
cn values: ['-3: 0.045032', '-2: 0', '-1: 0.40528', '0: 0', '1: 0.40528', '2: 0', '3: 0.045032']
```, caption: "Ввывод программы для второй функции")
$ F_3(t) = 0.81057cos(pi/2 t) + 0.090063cos((3pi)/2 t) $
$ G_3(t) = 0.045032e^(-(3i pi)/2 t) + 0.40528e^(-(i pi)/2 t) + 0.40528e^((i pi)/2 t) + 0.045032e^((3i pi)/2 t) $
С помощью программы из @prog, подсчитаем также коэффициенты для $N = 5, 7, 9$, после чего построим график $F_N (t)$ для значений $N = 1, 3, 5, 7, 9$ и сравним их с $f(t)$:
#figure(
canvas(length: 1.75cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -5, x-max: 5,
y-min: -2, y-max: 2,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$F_N (t)$],
{
plot.add(domain: (-4.99, 4.99), t => {
let (t0, t1, t2) = (-2, 0, 2)
let tt = calc.rem(calc.abs(t) - t0, t2 - t0) + t0
if tt >= t0 and tt < t1 {
return tt + 1
} else {
return -tt + 1
}
}, line: "linear", samples: 1000, label: [$f(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.81057*calc.cos(calc.pi/2*t)
}, line: "spline", samples: 100, label: [$F_1(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.81057*calc.cos(calc.pi/2*t) + 0.090063*calc.cos(3*calc.pi/2*t)
}, line: "spline", samples: 100, label: [$F_3(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.81057*calc.cos(calc.pi/2*t) + 0.090063*calc.cos(3*calc.pi/2*t) + 0.032423*calc.cos(5*calc.pi/2*t)
}, line: "spline", samples: 100, label: [$F_5(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.81057*calc.cos(calc.pi/2*t) + 0.090063*calc.cos(3*calc.pi/2*t) + 0.032423*calc.cos(5*calc.pi/2*t) + 0.016542*calc.cos(7*calc.pi/2*t)
}, line: "spline", samples: 100, label: [$F_7(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.81057*calc.cos(calc.pi/2*t) + 0.090063*calc.cos(3*calc.pi/2*t) + 0.032423*calc.cos(5*calc.pi/2*t) + 0.016542*calc.cos(7*calc.pi/2*t) + 0.010007*calc.cos(9*calc.pi/2*t)
}, line: "spline", samples: 100, style: (stroke: purple), label: [$F_9(t)$])
}
)
}), caption: [Графики частичных сумм Фурье треугольной волны $F_N (t)$ и $f(t)$]
)
#pagebreak()
Из графиков видно, что сумма Фурье $F_N (t)$ сходится к исходной функции $f(t)$ при $N -> infinity$ - коэффициенты $a_n, b_n, c_n$ подсчитаны верно.
Проверим выполнение равенства Парсеваля:
$ 1/(T/2) integral^2_(-2) (f(t))^2 upright(d)t = a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^2) $
$ 1/(T/2) integral^2_(-2) (f(t))^2 upright(d)t &= 1/2 integral^2_(-2) underbrace(underbrace(f(t), "even")underbrace(f(t), "even"), "even") upright(d)t = integral^2_0 (f(t))^2 upright(d)t = integral^2_0 (-t + 1)^2 upright(d)t \
&= integral^2_0 (t^2 - 2t + 1) upright(d)t = lr((t^3/3-t^2+t)|)^2_0 = 8/3 - 4 + 2 = 2/3 $
$ a^2_0/2 + sum^infinity_(n=1) (a^2_n + b^2_n) &= sum^infinity_(n=1) a^2_n = sum^infinity_(n=1) (cases(
0 \, & n = 2k,
8/(pi^2 n^2) \, & n = 2k - 1,
), k in ZZ)^2 = sum^infinity_(k=1) 64/(pi^4 (2k-1)^4) \
&= 64/pi^4 underbracket(sum^infinity_(k=1) 1/(2k - 1)^4, #[@sq-wave]) = 64/pi^4 (sum^infinity_(k=1) 1/k^4 - sum^infinity_(k=1) 1/(2k)^4) = 64/pi^4 sum^infinity_(k=1) 15/16k^4 \
&= 60/pi^4 sum^infinity_(k=1) 1/k^4 = 60/pi^4 dot pi^4/90 = 2/3 $
Левая часть равняется правой, значит равенство выполняется - коэффициенты подсчитаны верно.
== Любая *нечётная* периодическая функция по вашему выбору
Проанализируем следующую нечётную функцию:
$ f(t) = t, t in [-1; 1) $
Построим график данной функции:
#figure(
canvas(length: 1.25cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -5, x-max: 5,
y-min: -2, y-max: 2,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$f(t)$],
{
plot.add(domain: (-4.99, 4.99), t => {
let (t0, t2) = (-1, 1)
if t < 0 {
-calc.rem(-t - t0, t2 - t0) - t0
} else {
calc.rem(t - t0, t2 - t0) + t0
}
}, line: "linear", samples: 1000)
}
)
}), caption: [График треугольной волны $f(t)$]
)
#pagebreak()
Период функции $T = 2$, $omega_n = pi n$. Рассмотрим функцию на промежутке $[-1; 1]$ и найдём коэффициенты $a_0, a_n, b_n, c_n$, пользуясь свойствами нечётности функции:
Поскольку интеграл нечётной фнукции на симметричном интервале равен 0, то $a_0$ и $a_n$ также равны 0:
$ a_0 = 1/(T/2) integral^1_(-1) underbrace(f(t), "odd") upright(d)t = 0 $
$ a_n = 1/(T/2) integral^1_(-1) underbrace(underbrace(f(t), "odd")underbrace(cos(omega_n t), "even"), "odd") = 0 $
$ b_n &= 1/(T/2) integral^1_(-1) underbrace(underbrace(f(t), "odd")underbrace(sin(omega_n t), "odd"), "even") = 2integral^1_0 t sin(omega_n t) = -lr((2t cos(omega_n t))/omega_n|)^1_0 + 2integral^1_0 cos(omega_n t)/omega_n upright(d)t \
&= -lr((2t cos(omega_n t))/omega_n|)^1_0 + lr((2sin(omega_n t))/omega_n^2|)^1_0 = lr((2sin(omega_n t) - 2t omega_n cos(omega_n t))/omega_n^2|)^1_0 \
&= (2overbrace(sin(pi n), 0) - 2pi n cos(pi n))/(pi^2 n^2) - (2pi n overbrace(sin(0), 0))/(pi^2 n^2) = (-2(-1)^n)/(pi n) = (2(-1)^(n+1))/(pi n) $
$ c_0 = a_0/2 = 0 $
$ c_n = (a_n - i b_n)/2 = -(i b_n)/2 = (-1)^n/(pi n) $
$ c_(-n) = (a_n + i b_n)/2 = (i b_n)/2 = (-1)^(n+1)/(pi n) $
Дополним программу @prog новой нечётной функцией:
#figure(```python
...
function_formulas = [
...
# 3. Odd func
{
'an': lambda n: 0,
'bn': lambda n: 0 if n == 0 else 2 * (-1) ** (n + 1) / (pi * n),
'cn': lambda n: 0 if n == 0 else (-1) ** n / (pi * n) if n > 0 else (-1) ** (n + 1) / (pi * n)
}
...
]
...
```, caption: "Дополнение программы нечётной функцией")
#pagebreak()
Вновь воспользуемся программой для вычисления коэффициентов для $N=3$ и запишем частичные суммы Фурье:
#figure(```
$ python fourier.py 3 3
an values: ['0: 0', '1: 0', '2: 0', '3: 0']
bn values: ['0: 0', '1: 0.63662', '2: -0.31831', '3: 0.21221']
cn values: ['-3: -0.1061', '-2: 0.15915', '-1: -0.31831', '0: 0', '1: -0.31831', '2: 0.15915', '3: -0.1061']
```, caption: "Ввывод программы для третьей функции")
$ F_3(t) = 0.63662sin(pi t) - 0.31831sin(2pi t) + 0.21221sin(3pi t) $
$ G_3(t) = -0.1061e^(-3i pi t) + 0.15915e^(-2i pi t) - 0.31831e^(-i pi t) - 0.31831e^(i pi t) + 0.15915e^(2i pi t) - 0.1061e^(3i pi t) $
С помощью программы из @prog, подсчитаем также коэффициенты для $N = 5, 7, 9$, после чего построим график $F_N (t)$ для значений $N = 1, 3, 5, 7, 9$ и сравним их с $f(t)$:
#figure(
canvas(length: 1.75cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -5, x-max: 5,
y-min: -2, y-max: 2,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$F_N (t)$],
{
plot.add(domain: (-4.99, 4.99), t => {
let (t0, t2) = (-1, 1)
if t < 0 {
-calc.rem(-t - t0, t2 - t0) - t0
} else {
calc.rem(t - t0, t2 - t0) + t0
}
}, line: "linear", samples: 1000, label: [$f(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.63662*calc.sin(calc.pi*t)
}, line: "spline", samples: 100, label: [$F_1(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.63662*calc.sin(calc.pi*t) - 0.31831*calc.sin(2*calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_3(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.63662*calc.sin(calc.pi*t) - 0.31831*calc.sin(2*calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t) - 0.15915*calc.sin(4*calc.pi*t) + 0.12732*calc.sin(5*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_5(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.63662*calc.sin(calc.pi*t) - 0.31831*calc.sin(2*calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t) - 0.15915*calc.sin(4*calc.pi*t) + 0.12732*calc.sin(5*calc.pi*t) - 0.1061*calc.sin(6*calc.pi*t) + 0.090946*calc.sin(7*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_7(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
0.63662*calc.sin(calc.pi*t) - 0.31831*calc.sin(2*calc.pi*t) + 0.21221*calc.sin(3*calc.pi*t) - 0.15915*calc.sin(4*calc.pi*t) + 0.12732*calc.sin(5*calc.pi*t) - 0.1061*calc.sin(6*calc.pi*t) + 0.090946*calc.sin(7*calc.pi*t) - 0.039789*calc.sin(8*calc.pi*t) + 0.070736*calc.sin(9*calc.pi*t)
}, line: "spline", samples: 100, style: (stroke: purple), label: [$F_9(t)$])
}
)
}), caption: [Графики частичных сумм Фурье чётной функции $F_N (t)$ и $f(t)$]
)
Из графиков видно, что сумма Фурье $F_N (t)$ сходится к исходной функции $f(t)$ при $N -> infinity$ - коэффициенты $a_n, b_n, c_n$ подсчитаны верно.
Проверим выполнение равенства Парсеваля:
$ 1/(T/2) integral^1_(-1) (f(t))^2 upright(d)t = a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^2) $
$ 1/(T/2) integral^1_(-1) (f(t))^2 upright(d)t = integral^1_(-1) underbrace(underbrace(f(t), "odd")underbrace(f(t), "odd"), "even") upright(d)t = 2integral^1_0 (f(t))^2 upright(d)t = 2integral^1_0 t^2 upright(d)t = lr((2t^3)/3|)^1_0 = 2/3 $
$ a^2_0/2 + sum^infinity_(n=1) (a^2_n + b^2_n) = sum^infinity_(n=1) b^2_n = sum^infinity_(n=1) ((2(-1)^(n+1))/(pi n))^2 = 4/pi^2 sum^infinity_(n=1) 1/n^2 = 4/pi^2 dot pi^2/6 = 2/3 $
Левая часть равняется правой, равенство выполняется - коэффициенты подсчитаны верно.
#pagebreak()
== Любая периодическая функция по вашему выбору, график которой состоит не только из прямых линий, и которая не является *ни чётной, ни нечётной*
Проанализируем следующую функцию, которая не является ни чётной, ни нечётной:
$ f(t) = cases(
-t^2 - 2t\, t in [-2; 0),
2t^2 - 4t\, t in [0; 2)
) $
Построим график данной функции:
#figure(
canvas(length: 1.25cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -5, x-max: 5,
y-min: -3, y-max: 3,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$f(t)$],
{
plot.add(domain: (-4.99, 4.99), t => {
let (t0, t1, t2) = (-2, 0, 2)
if t < t0 { t = -t + t0 }
let tt = calc.rem(t - t0, t2 - t0) + t0
if tt >= t0 and tt < t1 {
return -tt*tt - 2*tt
} else {
return 2*tt*tt - 4*tt
}
}, line: "linear", samples: 1000)
}
)
}), caption: [График четвёртой функции $f(t)$]
)
Период функции $T = 4$, $omega_n = (pi n)/2$. Рассмотрим функцию на промежутке $[-2; 2]$ и найдём коэффициенты $a_0, a_n, b_n, c_n$:
$ a_0 &= 1/(T/2) integral^2_(-2) f(t) upright(d)t \
&= ... \
&= -2/3 $
$ a_n &= 1/(T/2) integral^2_(-2) f(t)cos(omega_n t) upright(d)t \
&= ... \
&= (4(1+(-1)^n))/(pi^2 n^2) = cases(
8/(pi^2 n^2)\, & n in 2k,
0\, & n in 2k - 1
) $
$ b_n &= 1/(T/2) integral^2_(-2) f(t)sin(omega_n t) upright(d)t \
&= ...\
&= (24((-1)^n - 1))/(pi^3 n^3) = cases(
0\, & n in 2k,
-48/(pi^3 n^3)\, & n in 2k - 1
) $
$ c_0 = a_0/2 = -1/3 $
$ c_n = (a_n - i b_n)/2 = cases(
4/(pi^2 n^2)\, & n in 2k,
(24i)/(pi^3 n^3)\, & n in 2k - 1
) $
$ c_(-n) = (a_n + i b_n)/2 = cases(
4/(pi^2 n^2)\, & n in 2k,
-(24i)/(pi^3 n^3)\, & n in 2k - 1
) $
Дополним программу @prog новой функцией:
#figure(```python
...
function_formulas = [
...
# 4. Not odd and not even func
{
'an': lambda n: -2/3 if n == 0 else (8 / (pi ** 2 * n ** 2) if n % 2 == 0 else 0),
'bn': lambda n: 0 if n % 2 == 0 else -48 / (pi ** 3 * n ** 3),
'cn': lambda n: -1/3 if n == 0 else (
(4 / (pi ** 2 * n ** 2) if n % 2 == 0 else 24j / (pi ** 3 * n ** 3))
if n > 0 else
(4 / pi ** 2 * n ** 2) if n % 2 == 0 else -24j / (pi ** 3 * n ** 3))
)
}
...
]
...
```, caption: "Дополнение программы четвёртой функцией")
#figure(```
$ python fourier.py 4 3
an values: ['0: -0.66667', '1: 0', '2: 0.20264', '3: 0']
bn values: ['0: 0', '1: -1.5481', '2: 0', '3: -0.057336']
cn values: ['-3: -0+0.028668j', '-2: 0.10132', '-1: -0+0.77404j', '0: -0.33333', '1: 0+0.77404j', '2: 0.10132', '3: 0+0.028668j']
```, caption: "Ввывод программы для четвёртой функции")
$ F_3(t) = -0.66667 - 1.5481sin(pi/2 t) + 0.20264cos(pi t) -0.057336sin((3pi)/2 t) $
$ G_3(t) =& 0.028668i e^(-(3i pi)/2 t) + 0.10132e^(-i pi t) - 0.77404i e^(-(i pi)/2 t) - 0.33333 + \
+& 0.77404i e^((i pi)/2 t) + 0.10132e^(i pi t) + 0.028668i e^((3i pi)/2 t) $
С помощью программы из @prog, подсчитаем также коэффициенты для $N = 4, 5$, после чего построим график $F_N (t)$ для значений $N = 1, 2, 3, 4, 5$ и сравним их с $f(t)$:
#pagebreak()
#figure(
canvas(length: 1.75cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -5, x-max: 5,
y-min: -3, y-max: 3,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [$F_N (t)$],
{
plot.add(domain: (-4.99, 4.99), t => {
let (t0, t1, t2) = (-2, 0, 2)
if t < t0 { t = -t + t0 }
let tt = calc.rem(t - t0, t2 - t0) + t0
if tt >= t0 and tt < t1 {
return -tt*tt - 2*tt
} else {
return 2*tt*tt - 4*tt
}
}, line: "linear", samples: 1000, label: [$f(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
-1/3 - 1.5481*calc.sin(calc.pi/2*t)
}, line: "spline", samples: 100, label: [$F_1(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
-1/3 - 1.5481*calc.sin(calc.pi/2*t) + 0.20264*calc.cos(calc.pi*t)
}, line: "spline", samples: 100, label: [$F_3(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
-1/3 - 1.5481*calc.sin(calc.pi/2*t) + 0.20264*calc.cos(calc.pi*t) - 0.057336*calc.sin(3*calc.pi/2*t)
}, line: "spline", samples: 100, label: [$F_5(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
-1/3 - 1.5481*calc.sin(calc.pi/2*t) + 0.20264*calc.cos(calc.pi*t) - 0.057336*calc.sin(3*calc.pi/2*t) + 0.050661*calc.cos(2*calc.pi*t)
}, line: "spline", samples: 100, label: [$F_7(t)$#v(1em)])
plot.add(domain: (-4.99, 4.99), t => {
-1/3 - 1.5481*calc.sin(calc.pi/2*t) + 0.20264*calc.cos(calc.pi*t) - 0.057336*calc.sin(3*calc.pi/2*t) + 0.050661*calc.cos(2*calc.pi*t) - 0.012385*calc.sin(5*calc.pi/2*t)
}, line: "spline", samples: 100, style: (stroke: purple), label: [$F_9(t)$])
}
)
}), caption: [Графики частичных сумм Фурье четвёртой функции $F_N (t)$ и $f(t)$]
)
Из графиков видно, что сумма Фурье $F_N (t)$ сходится к исходной функции $f(t)$ при $N -> infinity$ - коэффициенты $a_n, b_n, c_n$ подсчитаны верно.
Проверим выполнение равенства Парсеваля:
$ 1/(T/2) integral^2_(-2) (f(t))^2 upright(d)t = a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^2) $
$ 1/(T/2) integral^2_(-2) (f(t))^2 upright(d)t &= 1/2 integral^0_(-2) (-t^2 - 2t)^2 upright(d)t + 1/2 integral^2_0 (2t^2 - 4t)^2 upright(d)t \
&= 1/2 integral^0_(-2) (t^4 + 4t^3 + 4t^2) upright(d)t + 1/2 integral^2_0 (4t^4 - 16t^3 + 16t^2) upright(d)t \
&= lr((t^5/10 + t^4/2 + (2t^3)/3)|)^0_(-2) + lr(((2t^5)/5 - 2t^4 + (8t^3)/3)|)^2_0 \
&= 32/10 - 8 + 16/3 + 64/5 - 32 + 64/3 = -40 + 80/3 + 80/5 = 8/3 $
$ a^2_0/2 + sum^infinity_(n=1) (a^2_n + b^2_n) &= 2/9 + sum^infinity_(k=1) (8/(pi^2 4k^2))^2 + sum^infinity_(k=1) (-48/(pi^3 (2k-1)^3))^2 \
&= 2/9 + 4/pi^4 sum^infinity_(k=1) 1/k^4 + 2304/pi^6 sum^infinity_(k=1) 1/(2k-1)^6 \
&= 2/9 + 4/pi^4 dot pi^4/90 + 2304/pi^6 dot pi^6/960 = 2/9 + 2/45 + 12/5 = 120/45 = 8/3 $
Левая часть равняется правой, равенство выполняется - коэффициенты подсчитаны верно.
#pagebreak()
= Комплексная функция
Задайтесь числами $R, T > 0$ и рассмотрите комплекснозначную функцию $f: RR -> CC$ с периодом $T$ такую, что
$ upright("Re")f(t) = cases(
R\, & t in [-T/8; T/8),
2R - (8R t)/T\, & t in [T/8; (3T)/8),
-R\, & t in [(3T)/8; (5T)/8),
-6R + (8R t)/T\, & t in [(5T)/8; (7T)/8)
) #h(3em) upright("Im")f(t) = cases(
(8R t)/T\, & t in [-T/8; T/8),
R\, & t in [T/8; (3T)/8),
4R - (8R t)/T\, & t in [(3T)/8; (5T)/8),
-R\, & t in [(5T)/8; (7T)/8)
) $
Для рассматриваемой функции $f$:
- Постройте параметрический график $f(t)$ (кривую на комплексной плоскости).
- Рассмотрите частичные суммы Фурье $G_N (t) = sum^N_(n=-N) c_n e^(i omega_n t)$, где $omega_n = (2pi n)/T$
- Вычислите вручную коэффициенты $c_n$ для $n = 0, 1, 2$
- Напишите программу, которая вычисляет коэффициенты Фурье $c_n$ для произвольного $N$. Приведите в отчёте коэффициенты для случая $N = 3$.
- Постройте параметрические графики $G_N (t)$ для $N = 1, 2, 3, 10$. Сравните их друг с другом и с параметрическим графиком исходной функции $f(t)$.
- Проверьте выполнение равенства Парсеваля
Пусть $R = 1$, $T = 8$, получим следующую функцию:
$ upright("Re")f(t) = cases(
1\, & t in [-1; 1),
2 - t\, & t in [1; 3),
-1\, & t in [3; 5),
-6 + t\, & t in [5; 7)
) #h(3em) upright("Im")f(t) = cases(
t\, & t in [-1; 1),
1\, & t in [1; 3),
4 - t\, & t in [3; 5),
-1\, & t in [5; 7)
) $
Построим график данной функции на вещественной и комплексной плоскостях:
#figure(
canvas(length: 1.25cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -10, x-max: 10,
y-min: -3, y-max: 3,
x-grid: true, y-grid: true,
x-label: [t], y-label: [$f(t)$],
{
plot.add(domain: (-9.99, 9.99), t => {
let (t0, t1, t2, t3, t4) = (-1, 1, 3, 5, 7)
if t < t0 { t = -t + t0 + 1 }
let tt = calc.rem(t - t0, t4 - t0) + t0
if tt >= t0 and tt < t1 {
return 1
} else if tt >= t1 and tt < t2 {
return 2 - tt
} else if tt >= t2 and tt < t3 {
return -1
} else {
return -6 + tt
}
}, line: "linear", samples: 1000, label: [Re$f(t)$#v(1em)])
plot.add(domain: (-9.99, 9.99), t => {
let (t0, t1, t2, t3, t4) = (-1, 1, 3, 5, 7)
if t < t0 { t = -t + t0 - 3 }
let tt = calc.rem(t - t0, t4 - t0) + t0
if tt >= t0 and tt < t1 {
return tt
} else if tt >= t1 and tt < t2 {
return 1
} else if tt >= t2 and tt < t3 {
return 4-tt
} else {
return -1
}
}, line: "linear", samples: 1000, label: [Im$f(t)$], style: (stroke: yellow))
}
)
}), caption: [График комплексной функции $f(t)$]
)
#pagebreak()
Период функции $T = 8$, $omega_n = (pi n)/4$. Рассмотрим функцию на промежутке $[-1; 7]$ и найдём коэффициент $c_n$:
$ c_n &= 1/T integral^7_(-1) f(t)e^(-i omega_n t) upright(d)t \
&= 1/8(integral^1_(-1) (1+i t)e^(-i omega_n t) upright(d)t + integral^3_1 (2-t+i)upright(d)t + integral^5_3 (-1+i(4-t))upright(d)t + integral^7_5 (-6+t-i)upright(d)t) \
&= 1/8(integral^1_(-1) e^(-i omega_n t)upright(d)t + 2integral^3_1 e^(-i omega_n t)upright(d)t + i integral^3_1 e^(-i omega_n t)upright(d)t - integral^5_3 e^(-i omega_n t)upright(d)t + 4i integral^5_3 e^(-i omega_n t)upright(d)t \
&- 6integral^7_5 e^(-i omega_n t)upright(d)t - i integral^7_5 e^(-i omega_n t)upright(d)t + i integral^1_(-1) t e^(-i omega_n t)upright(d)t - integral^3_1 t e^(-i omega_n t)upright(d)t - i integral^5_3 t e^(-i omega_n t)upright(d)t + integral^7_5 t e^(-i omega_n t)upright(d)t) \
&= lr((i e^(-i omega_n t))/(8omega_n)|)^1_(-1) + lr((2i e^(-i omega_n t))/(8omega_n)|)^3_1 - lr((e^(-i omega_n t))/(8omega_n)|)^3_1 - lr((i e^(-i omega_n t))/(8omega_n)|)^5_3 - lr((4 e^(-i omega_n t))/(8omega_n)|)^5_3 - lr((6i e^(-i omega_n t))/(8omega_n)|)^7_5 + lr((e^(-i omega_n t))/(8omega_n)|)^7_5 \
&+ lr((e^(-i omega_n t)(i-omega_n t))/(8omega_n^2)|)^1_(-1) - lr((e^(-i omega_n t)(1+i omega_n t))/(8omega_n^2)|)^3_1 - lr((e^(-i omega_n t)(i-omega_n t))/(8omega_n^2)|)^5_3 + lr((e^(-i omega_n t)(1+i omega_n t))/(8omega_n^2)|)^7_5 \
&= ((-i-omega_n-i omega_n)e^(i omega_n) + (i+1)e^(-i omega_n) + (i-1)e^(-3i omega_n) + (-i-1)e^(-5i omega_n) + (omega_n + 1 + i omega_n)e^(-7i omega_n))/(8omega_n^2) \
&= ((-i-(pi n)/4-i (pi n)/4)e^(i (pi n)/4) + (i+1)e^(-i (pi n)/4) + (i-1)e^(-3i (pi n)/4) + (-i-1)e^(-5i (pi n)/4) + ((pi n)/4 + 1 + i (pi n)/4)e^(-7i (pi n)/4))/((pi^2 n^2)/2) $
$ c_0 &= 1/T integral^7_(-1)f(t)upright(d)t \
&= 1/8(integral^1_(-1) (1+i t) upright(d)t + integral^3_1 (2-t+i) upright(d)t + integral^5_3 (-1+i(4-t)) upright(d)t + integral^7_5 (-6+t-i) upright(d)t) \
&= 1/8(lr((t+(i t^2)/2)|)^1_(-1) + lr((2t+i t-t^2/2)|)^3_1 + lr((-t+4i t-(i t^2)/2)|)^5_3 + lr((-6t+t^2/2-i t)|)^7_5) \
&= 1/8(1+i/2+1-i/2+6+3i-9/2-2-i+1/2-5+20i-(25i)/2+3-12i+(9i)/2-42+49/2 \
&-7i+30-25/2+5i) = 0 $
#pagebreak()
Дополним программу @prog новой комплексной функцией:
#figure(```python
...
function_formulas = [
...
# 5. Complex func
{
'an': lambda n: 0,
'bn': lambda n: 0,
'cn': lambda n: 0 if n == 0 else (
complex(-pi * n / 4, -1 - pi * n / 4) * e ** (1j * pi * n / 4)
+ (1j + 1) * e ** (-1j * pi * n / 4)
+ (1j - 1) * e ** (-3j * pi * n / 4)
+ (-1j - 1) * e ** (-5j * pi * n / 4)
+ complex(1 + pi * n / 4, pi * n / 4) * e ** (-7j * pi * n / 4)
) / (pi ** 2 * n ** 2 / 2)
}
...
]
...
```, caption: "Дополнение программы комплексной функцией")
#figure(```
$ python fourier.py 5 3
an values: ['0: 0', '1: 0', '2: 0', '3: 0']
bn values: ['0: 0', '1: 0', '2: 0', '3: 0']
cn values: ['-3: -0.12737+3.9996e-17j', '-2: 1.1249e-17+1.1249e-17j', '-1: 1.1249e-17+2.2498e-17j', '0: 0', '1: 1.1463+1.3499e-16j', '2: -6.7493e-17-6.7493e-17j', '3: 3.9996e-17+1.9998e-17j']
```, caption: "Ввывод программы для копмлексной функции")
Из-за погрешностей чисел с плавающей точкой (float), программа выводит очень маленькое число ($~10^(-17)$) в некоторых случаях. В таких ситуациях мы будем воспринимать коэффициент $c_n$ равным нулю.
$ G_3(t) = -0.12737e^((-3i pi t)/4) + 1.1463e^((i pi t)/4) $
С помощью программы из @prog, подсчитаем также коэффициенты для $N = 10$, после чего построим график $G_N (t)$ для значений $N = 1, 2, 3, 10$ и сравним их с $f(t)$:
#pagebreak()
#figure(
canvas(length: 1.75cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -10, x-max: 10,
y-min: -3, y-max: 3,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [Re$G_N (t)$],
{
plot.add(domain: (-9.99, 9.99), t => {
let (t0, t1, t2, t3, t4) = (-1, 1, 3, 5, 7)
if t < t0 { t = -t + t0 + 1 }
let tt = calc.rem(t - t0, t4 - t0) + t0
if tt >= t0 and tt < t1 {
return 1
} else if tt >= t1 and tt < t2 {
return 2 - tt
} else if tt >= t2 and tt < t3 {
return -1
} else {
return -6 + tt
}
}, line: "linear", samples: 1000, label: [Re$f(t)$#v(1em)])
plot.add(domain: (-9.99, 9.99), t => {
1.1463*calc.cos(calc.pi*t/4)
}, line: "spline", samples: 100, label: [Re$G_1(t)$#v(1em)])
plot.add(domain: (-9.99, 9.99), t => {
-0.12737*calc.cos(3*calc.pi*t/4) + 1.1463*calc.cos(calc.pi*t/4)
}, line: "spline", samples: 100, label: [Re$G_2(t)$#v(1em)])
plot.add(domain: (-9.99, 9.99), t => {
-0.12737*calc.cos(3*calc.pi*t/4) + 1.1463*calc.cos(calc.pi*t/4)
}, line: "spline", samples: 100, label: [Re$G_3(t)$#v(1em)], style: (stroke: purple))
plot.add(domain: (-9.99, 9.99), t => {
0.023394*calc.cos(7*calc.pi*t/4) - 0.12737*calc.cos(3*calc.pi*t/4) + 1.1463*calc.cos(calc.pi*t/4) - 0.045853*calc.cos(5*calc.pi*t/4) + 0.014152*calc.cos(9*calc.pi*t/4)
}, line: "spline", samples: 100, label: [Re$G_10(t)$#v(1em)])
}
)
}), caption: [Графики частичных сумм Фурье комплексной функции $G_N (t)$ и $f(t)$ (Вещественная плоскость)]
)
#figure(
canvas(length: 1.75cm, {
plot.plot(size: (8, 4),
x-tick-step: 1, y-tick-step: 1,
x-min: -10, x-max: 10,
y-min: -3, y-max: 3,
x-grid: true, y-grid: true,
x-label: [$t$], y-label: [Im$G_N (t)$],
{
plot.add(domain: (-9.99, 9.99), t => {
let (t0, t1, t2, t3, t4) = (-1, 1, 3, 5, 7)
if t < t0 { t = -t + t0 - 3 }
let tt = calc.rem(t - t0, t4 - t0) + t0
if tt >= t0 and tt < t1 {
return tt
} else if tt >= t1 and tt < t2 {
return 1
} else if tt >= t2 and tt < t3 {
return 4-tt
} else {
return -1
}
}, line: "linear", samples: 1000, label: [Im$f(t)$#v(1em)], style: (stroke: yellow))
plot.add(domain: (-9.99, 9.99), t => {
1.1463*calc.sin(calc.pi*t/4)
}, line: "spline", samples: 100, label: [Im$G_1(t)$#v(1em)])
plot.add(domain: (-9.99, 9.99), t => {
0.12737*calc.sin(3*calc.pi*t/4) + 1.1463*calc.sin(calc.pi*t/4)
}, line: "spline", samples: 100, label: [Im$G_2(t)$#v(1em)])
plot.add(domain: (-9.99, 9.99), t => {
0.12737*calc.sin(3*calc.pi*t/4) + 1.1463*calc.sin(calc.pi*t/4)
}, line: "spline", samples: 100, label: [Im$G_3(t)$#v(1em)], style: (stroke: purple))
plot.add(domain: (-9.99, 9.99), t => {
-0.023394*calc.sin(7*calc.pi*t/4) + 0.12737*calc.sin(3*calc.pi*t/4) + 1.1463*calc.sin(calc.pi*t/4) - 0.045853*calc.sin(5*calc.pi*t/4) + 0.014152*calc.sin(9*calc.pi*t/4)
}, line: "spline", samples: 100, label: [Im$G_10(t)$#v(1em)])
}
)
}), caption: [Графики частичных сумм Фурье комплексной функции $G_N (t)$ и $f(t)$ (Комплексаня плоскость)]
)
Из графиков видно, что сумма Фурье $G_N (t)$ сходится к исходной функции $f(t)$ при $N -> infinity$ - коэффициент $c_n$ подсчитан верно.
#pagebreak()
Проверим выполнение равенства Парсеваля:
$ 1/(T/2) integral^7_(-1) (f(t))^2 upright(d)t = sum^infinity_(n=-infinity) |c_n|^2 $
$ 1/(T/2) integral^7_(-1) (f(t))^2 upright(d)t &= 1/4(integral^1_(-1) (1+i t)^2 upright(d)t + integral^3_1 (2-t+i)^2 upright(d)t integral^5_3 (-1+i(4-t))^2 upright(d)t + integral^7_5 (-6+t-i)^2 upright(d)t) \
&= 1/4(lr((t+i t^2-t^3/3)|)^1_(-1) + lr((3t+4i t-2t^2-i t^2+t^3/3)|)^3_1 \
&+ lr((-15t-8i t+i t^2+4t^2-t^3/3)|)^5_3 + lr((t^3/3-6t^2-i t^2+35t+12i t)|)^7_5)\
&= 1/4(1+i-1/3+1-i-1/3+9+12i-18-9i+9-3-4i+2+i-1/3\
&-75-40i+25i+100-125/3+45+24i-9i-36+9+343/3-294-49i\
&+245+84i-125/3+150+25i-175-60i) = 0 $
$ sum^infinity_(n=-infinity) |c_n|^2 &= sum^infinity_(n=-infinity) lr(|cases(
(8sqrt(2))/(pi^2 n^2)\, & n = 8k-7,
-(8sqrt(2))/(pi^2 n^2)\, & n = 8k-3
)|)^2, k in ZZ = sum^infinity_(n=-infinity) ((8sqrt(2))/(pi^2 n^2))^2, n = 4k-3, k in ZZ \
&= 128/pi^4 sum^infinity_(k=-infinity) 1/(4k-3)^2 = 128/pi^4 dot pi^4/96 = 4/3 $
Левая и правая часть не равны, поскольку функция $f(t)$ не соответствует условию Дирихле.