Finished task 1 in lab1
This commit is contained in:
parent
90d1f589b5
commit
39965f1ac7
2 changed files with 486 additions and 29 deletions
|
@ -1,16 +1,38 @@
|
|||
import sys
|
||||
import math
|
||||
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 / (math.pi * n),
|
||||
'cn': lambda n: 3 if n == 0 else (0 if n % 2 == 0 else 1j / (math.pi * n))
|
||||
'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))
|
||||
},
|
||||
# 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))
|
||||
},
|
||||
# 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)
|
||||
},
|
||||
# 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))
|
||||
)
|
||||
}
|
||||
]
|
||||
|
||||
index, nn = int(sys.argv[1]), int(sys.argv[2])
|
||||
index, nn = int(argv[1]), int(argv[2])
|
||||
|
||||
formulas = function_formulas[index - 1]
|
||||
coefficients = {'an': [], 'bn': [], 'cn': []}
|
||||
|
|
|
@ -26,7 +26,10 @@ $ G_N (t) = sum^N_(n=-N) c_n e^(i omega_n t) $
|
|||
|
||||
- Проверьте выполнение равенства Парсеваля для коэффициентов $(a_n, b_n)$ и $c_n$.
|
||||
|
||||
1. *Квадратная волна*. Периодическая функция с периодом $T = t_2 - t_0$ такая, что
|
||||
== *Квадратная волна* <sq-wave>
|
||||
|
||||
Периодическая функция с периодом $T = t_2 - t_0$ такая, что
|
||||
|
||||
$ f(t) = cases(
|
||||
a\, & t in [t_0, t_1),
|
||||
b\, & t in [t_1, t_2)
|
||||
|
@ -42,7 +45,7 @@ $ f(t) = cases(
|
|||
Построим график данной функции:
|
||||
|
||||
#figure(
|
||||
canvas(length: 1.25cm, {
|
||||
canvas(length: 0.9cm, {
|
||||
plot.plot(size: (8, 4),
|
||||
x-tick-step: 1, y-tick-step: 1,
|
||||
x-min: -3, x-max: 3,
|
||||
|
@ -73,8 +76,7 @@ $ a_0 &= 1/(T/2) integral^(3)_(1) f(t)upright(d)t = integral^3_1 f(t)upright(d)t
|
|||
|
||||
$ 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 \
|
||||
&= sin(2pi n)/(pi n) - sin(pi n)/(pi n) + (2sin(3pi n))/(pi n) - (2sin(2pi n))/(pi n) \
|
||||
&= 0 "(т.к. " sin(3pi n) = sin(2pi n) = sin(pi n) = 0")" $
|
||||
&= 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 \
|
||||
|
@ -110,20 +112,19 @@ $ 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
|
|||
Вручную считать тяжко, поэтому напишем программу на _Python_, которая будет принимать на вход $N$ и считать коэффициенты по найденным формулам:
|
||||
|
||||
#figure(```python
|
||||
import sys
|
||||
import math
|
||||
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 / (math.pi * n),
|
||||
'cn': lambda n: 3 if n == 0 else (0 if n % 2 == 0 else 1j / (math.pi * n))
|
||||
|
||||
'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(sys.argv[1]), int(sys.argv[2])
|
||||
index, nn = int(argv[1]), int(argv[2])
|
||||
|
||||
formulas = function_formulas[index - 1]
|
||||
coefficients = {'an': [], 'bn': [], 'cn': []}
|
||||
|
@ -132,10 +133,13 @@ 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: "Код программы для подсчета коэффициентов")
|
||||
```, caption: "Код программы для подсчета коэффициентов") <prog>
|
||||
|
||||
Программа принимает на вход номер задания соответствующей функции и произвольное $N$ и выводит подсчитанные коэффициенты $a_n, b_n, c_n$ для $n = 0,1,2...N$. Список _function_formulas_ хранит формулы для расчетов коэффитциентов в виде лямда выражений для каждой функции, данный список будет расширяться по мере нахождения формул для других функций.
|
||||
|
||||
|
@ -146,7 +150,7 @@ $ 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: "Ввывод программы для первой функции") <prog>
|
||||
```, caption: "Ввывод программы для первой функции")
|
||||
|
||||
Значения коэффициентов для $n = 0, 1, 2$ совпадают с посчитанными вручную, значит высока вероятность, что программа работает корректно. Также стоит заметить, что программа округляет коэффициенты до 5 знаков после запятой и считает дополнительно коэффициенты $c_n$ для отрицательных $n$
|
||||
|
||||
|
@ -193,18 +197,18 @@ $ G_3(t) = -0.1061i e^(-3i pi t) -0.31831i e^(-i pi t) + 3/2 + 0.31831i e^(i pi
|
|||
}, line: "spline", samples: 100, style: (stroke: purple), label: [$F_9(t)$])
|
||||
}
|
||||
)
|
||||
}), caption: [Графики частичных сумм Фурье $F_N (t)$ и $f(t)$]
|
||||
) <sq_wave_F>
|
||||
}), caption: [Графики частичных сумм Фурье первой функции $F_N (t)$ и $f(t)$]
|
||||
)
|
||||
|
||||
Из графиков видно, что сумма Фурье $F_N (t)$ сходится к исходной функции $f(t)$ при $N -> infinity$ - коэффициенты $a_n, b_n, c_n$ подсчитаны верно.
|
||||
|
||||
Проверим выполнение равенства Парсеваля:
|
||||
|
||||
$ 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 = a_0^2/2 + sum^infinity_(n=1) (a_n^2 + b_n^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 $
|
||||
$ 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()
|
||||
|
||||
|
@ -216,7 +220,7 @@ $ sum^infinity_(n=1) (a_n^2 + b_n^2) = sum^infinity_(n=1) b_n^2 $
|
|||
|
||||
$ 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, 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 $
|
||||
|
||||
|
@ -226,17 +230,448 @@ $ 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) $
|
||||
|
||||
Левая и правая часть равны - равенство Парсеваля выполняется.
|
||||
Левая и правая части равны - равенство Парсеваля выполняется.
|
||||
|
||||
2. Любая *чётная* периодическая функция по вашему выбору.
|
||||
== Любая *чётная* периодическая функция по вашему выбору
|
||||
|
||||
#lorem(50)
|
||||
Проанализируем следующую чётную функцию:
|
||||
|
||||
3. Любая *нечётная* периодическая функция по вашему выбору.
|
||||
$ f(t) = cases(
|
||||
t + 1\, & t in [-2; 0),
|
||||
-t + 1\, & t in [0; 2)
|
||||
) $
|
||||
|
||||
#lorem(50)
|
||||
Построим график данной функции:
|
||||
|
||||
4. Любая периодическая функция по вашему выбору, график которой состоит не только из прямых линий, и которая не является *ни чётной, ни нечётной*.
|
||||
#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)$]
|
||||
)
|
||||
|
||||
#lorem(50)
|
||||
По графику данной функции видно, что это - треугольная волна, $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_n &= 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 $
|
||||
|
||||
Левая часть равняется правой, равенство выполняется - коэффициенты подсчитаны верно.
|
||||
|
||||
|
|
Loading…
Reference in a new issue