Задачи высшей математики с Maxima
3.8.6 Численные методы решения ОДУ
Однако в ряде случаев отыскать символьное решение ОДУ в достаточно компактном виде невозможно. В этом случае целесообразно использовать численные методы. Maxima включает пакет расширения dynamics, позволяющий проинтегрировать систему ОДУ методом Рунге-Кутта.
Начиная с версии 5.12, Maxima включает пакет dynamics (его необходимо загружать перед использованием). Помимо метода Рунге- Кутта, пакет dynamics включает ряд функций для построения различных фракталов.
Метод Рунге-Кутта реализует функция . Синтаксис вызова её вызова:
, где
— список правых частей уравнений;
— список зависимых переменных;
— список начальных значений;
— список
, содержащий символьное обозначение независимой переменной
, её начальное значение
, конечное значение
, шаг интегрирования
.
Пример:
Решить ОДУ

![t = [0\dots4],\ x(0)=-1,25,\ y(0)=0,75](/sites/default/files/tex_cache/d2cdbb2ba6ea6d54ca50d5b183f2256e.png)
Используем пакет dynamics.
(%i1) load(''dynamics'')$
Выбираем шаг интегрирования 0,02.
(%i2) sol:rk([4*x^2-4*y^2,y^2-x^2+1],[x,y], [-1.25,0.75],[t,0,4,0.02]);
В результате решения получаем список значений в формате [[]].
(%i1) load("dynamics")$ (%i2) rp1:4*x^2-4*y^2;

(%i3) rp2:y^2-x^2+1;

(%i4) sol:rk([rp1,rp2],[x,y],[-1.25,0.75],[t,0,4,0.02])$
Список не выводим на экран (он достаточно длинный, поэтому завершаем ввод команды символом $).
Для построения графика решения преобразуем полученный список, построив отдельно список значений (список
в примере),
(список
),
(список
). При построении графика используем опцию
.
(%i5) len:length(sol);

(%i6) xg:makelist(sol[k][1],k,1,len)$ (%i7) yg1:makelist(sol[k][2],k,1,len)$ (%i8) yg2:makelist(sol[k][3],k,1,len)$ (%i9) plot2d([[discrete,xg,yg1],[discrete,xg,yg2]]);
Результат решения представлен на рис. 3.16
Аналогичный, хотя и несколько более сложный пример — моделирование аттрактора Лоренца.
3.9 Ряды Фурье по ортогональным системам
Пакет Мaxima включает достаточно широкие возможности для работы как с классическими тригонометрическими рядами Фурье, так и с рядами Фурье по другим ортогональным системам. Рассмотрим краткое введение, необходимое для понимания приводимых примеров.
3.9.1 Понятие ряда Фурье
Пусть даны две функции и
, произведение которых интегрируемо на отрезке [
]. Функции
и
, называются ортогональными на [
], если выполняется условие


Функциональная последовательность называется ортогональной на [
], если выполняется условие:

Функциональная последовательность называется ортонормированной на [
], если

Часто используемая последовательность из тригонометрических функций . ортогональна на отрезке
с весовой функцией
.
Проверим свойство ортогональности, вычисляя соответствующие интегралы. При получаем:

Если же , то

Следовательно, .. Аналогичным образом устанавливаем, что
..
Остаётся вычислить интеграл ..
Поскольку подинтегральная функция является нечётной, то

Как следует из приведённых равенств, любые две различные функции тригонометрической последовательности ортогональны на отрезке .
Другой широко используемой последовательностью ортогональный функций является последовательность полиномов Лежандра. Полином Лежандра степени n можно представить через формулу Родрига в виде:

Они также могут быть вычислены по рекуррентной формуле:

Полиномы Лежандра ортогональны на отрезке [-1, 1] с весом :

Ещё одной важной последовательностью ортогональных функций является последовательность полиномов Чебышёва. Полиномы Чебышёва первого рода степени n можно определить с помощью равенства:

или, что почти эквивалентно,

Они также могут быть вычислены по рекуррентной формуле:

Полиномы Чебышёва ортогональны на отрезке [-1, 1] с весом :

3.9.2 Вычисление коэффициентов тригонометрических рядов Фурье
Члены тригонометрического ряда




Предположим, что –периодическую функцию
можно разложить в тригонометрический ряд, равномерно сходящийся на отрезке
.
![]() |
( 3.1) |
Рассмотрим вопрос об определении коэффициентов и
. Для этого применим теорему о почленном интегрировании функционального ряда. Проинтегрируем обе части равенства в пределах от
до
:
![\[\int _{-\pi }^{\pi }f\left(x\right)dx=\frac{a_{0} }{2} \int _{-\pi }^{\pi
}dx+\sum _{n=1}^{\infty }\left(a_{n} \int _{-\pi }^{\pi }\cos (nx)dx+b_{n} \int
_{-\pi }^{\pi }\sin (nx)dx \right) .\]](/sites/default/files/tex_cache/62562202903cebff8b6f8733dcff1c94.png)
Из результатов вычисления интегралов, приведённых выше, следует, что все слагаемые, встречающиеся в правой части под знаком суммы равны нулю, поэтому
![\[\int _{-\pi }^{\pi }f(x)dx=\pi a_{0} .\]](/sites/default/files/tex_cache/5178f3ca08d08463003c603f8214ea94.png)
Следовательно,
![]() |
( 3.2) |
Для того чтобы найти , обе части этого равенства умножим на cos(mx) и проинтегрируем на отрезке
. Поскольку система тригонометрических функций ортогональна, то
![\[\int _{-\pi }^{\pi }\cos (mx)\cos (nx)dx=0,\ \ \int _{-\pi }^{\pi }\cos
(mx)\sin (nx)dx=0 \]](/sites/default/files/tex_cache/77469358e65fa23bf53bc380d369bfb8.png)


Это означает что все с интегралы, встречающиеся в правой части, будут равны нулю, исключение составляет интеграл, который получается при . Этот интеграл равен
. Поэтому
![\[\int _{-\pi }^{\pi }f\left(x\right)\cos (nx)dx=a_{n} \int _{-\pi }^{\pi }\cos
^{2} (nx)dx=\pi a_{n} ,\]](/sites/default/files/tex_cache/314f1de4cf5a3fdc5c833647d0e92430.png)

Аналогично, умножив обе части равенства на и проинтегрировав на отрезке
, получаем, что
Итак, если функцию можно представить в виде тригонометрического ряда, то коэффициенты
вычисляются по приведённым формулам и называются коэффициентами Фурье для функции
(а ряд — соответственно рядом Фурье для
).
Промежуток интегрирования для периодической с периодом
функции можно заменить любым промежутком
,
, длина которого равна
.
Функция называется кусочно-гладкой на отрезке [
] если функция
и её производная на [
] имеют конечное число точек разрыва первого рода.
Достаточные условия разложимости функции в ряд Фурье даёт теорема Дирихле: если — периодическая с периодом
кусочногладкая на
функция, то её ряд Фурье сходится в любой точке этого отрезка и его сумма равна:
- значению функции
, когда
— точка непрерывности функции
;
-
, когда
— точка разрыва функции
, при этом
Отметим, что на практике чаще всего встречаются функции, которые удовлетворяют условиям теоремы Дирихле.
Пример: периодическую с периодом функцию
разложить в ряд Фурье.
Вычислим коэффициенты Фурье (используем Maxima):
(%i1) n:5;

(%i2) f(x):=x;

(%i3) a0:1/%pi*integrate(f(x),x,-%pi,%pi);

(%i4) for k:1 thru n do a[k]:1/%pi*integrate(f(x)*cos(k*x),x,-%pi,%pi);

(%i5) for k:1 thru n do b[k]:1/%pi*integrate(f(x)*sin(k*x),x,-%pi,%pi);

(%i6) for k:1 thru n do display(a[k],b[k]);


(%i7) fun(x):=a0/2+sum(a[k]*cos(k*x),k,1,n)+sum(b[k]*sin(k*x),k,1,n);

(%i8) wxplot2d([f(x),fun(x)], [x,-5,5], [nticks,20]);
Данная функция удовлетворяет условиям теоремы Дирихле, её график в сравнении с графиком частичной суммы ряда Фурье
изображён на рис. 3.17.
3.9.3 Ряды Фурье для чётных и нечётных функций
Предположим, что — нечётная
–периодическая функция. В этом случае
— чётная функция, поскольку верно равенство
, a
— нечётная функция, так как
Поэтому коэффициент ряда Фурье
равны:


Следовательно, ряд Фурье чётной функции содержит только косинусы, т.е. .. Аналогично, если
— нечётная функция, то
— нечётная, а
— чётная функция.
Поэтому
Следовательно, ряд Фурье нечётной функции содержит только синусы, т.е. .
Пример: Разложить в ряд Фурье периодическую с периодом функцию, заданную на отрезке
равенством
.
увеличить изображение
Рис. 3.18. График функции (точки) и суммы первых пяти членов ряда Фурье (сплошная линия)
Данная функция является чётной (рис. 3.18), поэтому её ряд Фурье содержит только косинусы. Вычисляем коэффициенты этого ряда:
Для вычисления коэффициентов ряда Фурье создаём функцию
, входными параметрами которой являются имя независимой переменной (в примере это
), число суммируемых членов ряда (
, в дальнейшем функция вызывается при
) и символьное выражение, определяющее функцию, для которой строится разложение (
, функция
вызывается с
).
(%i1) fun(x,n,f):=(for k:0 thru n do a[k]:1/%pi*integrate(f*cos(k*x),x,-%pi,%pi), a[0]/2 +sum(a[k]*cos(k*x),k,1,n))$
(%i2) fun(x,5,x^2);

Для аналитического вычисления коэффициентов ряда Фурье функции функцию
необходимо немного изменить, предусмотрев различные выражения для подинтегрального выражения на полуинтервалах
(выражения
и
в списке параметров функции). Текст программы на макроязыке Maxima:
fun12(x,n,f1,f2):=(for k:0 thru n do a[k]:1/%pi*(integrate(f1*cos(k*x),x,-%pi,0)+ integrate(f2*cos(k*x),x,0,%pi)), a[0]/2+sum(a[k]*cos(k*x),k,1,n))$
увеличить изображение
Рис. 3.19. График функции y = |x| (точки) и суммы первых пяти членов ряда Фурье (сплошная линия)
Функция является также является чётной (рис. 3.19), поэтому её ряд Фурье содержит только косинусы.
Результаты вычисления коэффициентов ряда Фурье для этой функции:
(%i1) fun12(x,5,-x,x);

Для построения графика функции создаём функцию
, которая использована для построения графика на рис. 3.19.
(%i3) fg(x):=if x>0 then x else -x$
3.9.4 Разложение функций в ряд Фурье на отрезке [0,π]
Пусть определена на отрезке
. Для того, чтобы функцию
разложить в ряд Фурье на этом отрезке, доопределим эту функцию произвольным образом на интервале
. Рассмотрим два случая:
Функцию , заданную на
, продолжим на интервал
так, что вновь полученная функция
, была чётной:
![f_{1} = \begin{cases}
f(-x), &\mbox{если } \, x\in [-\pi ,0] \\
f(x), &\mbox{если } \, x\in [0,\pi ]
\end{cases}.](/sites/default/files/tex_cache/65fb239b8cdc20558d134c3466410c60.png)
В таком случае говорят, что продолжена на
чётным образом. Поскольку
— чётная на
функция, то её ряд Фурье содержит только косинусы:
![\[f_{1} (x)=\frac{a_{0} }{2} +\sum _{n=1}^{\infty }a_{n} \cos (nx).\]](/sites/default/files/tex_cache/1c9ee5271d5b273946c4b7b6f7e8e569.png)
Поскольку на отрезке имеет место равенство
, то ряд Фурье для функции
будет и рядом Фурье для
на
Функцию , заданную на
, продолжим на интервал
нечётным образом:
![f_{2} = \begin{cases}
-f(-x), &\mbox{если } \, x\in [-\pi ,0[ \\
f(x), &\mbox{если } \, x\in [0,\pi]
\end{cases}.](/sites/default/files/tex_cache/2f66596044f24b6ecf106bc147ebd603.png)
Поскольку — нечётная на
функция, то её ряд Фурье содержит только синусы:
![\[f_{2} (x)=\sum _{n=1}^{\infty }b_{n} \sin (nx).\]](/sites/default/files/tex_cache/531bb372989f9ea28d5a6e3a23a0f20c.png)
Так как при
, то полученный ряд Фурье для
и будет рядом Фурье для
на
.
Пример: Функцию , определённую на отрезке
, разложить в ряд Фурье: 1)по косинусам; 2)по синусам.
1) Функцию продолжим на
чётным образом, т.е. составим новую функцию
по формуле:
![f_{1}(x) = \begin{cases}
-2x+1, &\mbox{если } \, x\in [-\pi ,0[ \\
2x+1, &\mbox{если } \, x\in [0,\pi]
\end{cases}.](/sites/default/files/tex_cache/ff27c3a02d9e0a1fac4d5ba5e834b53c.png)
Вычисляем коэффициенты Фурье для этой функции при помощи функции :
(%i1) fleft:-2*x+1;

(%i2 fright:2*x+1;

(%i3) funcos(x,7,fleft,fright);

увеличить изображение
Рис. 3.20. График функции y = 2x+1, продолженной чётным образом, и суммы семи членов соответствующего ряда
Графическое сопоставление результатов суммирования ряда Фурье и аналитического выражения заданной функции представлены на рис. 3.20
2) Функцию продолжим на
нечётным образом. Составим новую функцию
по формуле
Вычислим коэффициенты Фурье для этой функции, используя функцию , аналогичную приведённой выше.
Пример:
(%i1) fleft:2*x-1$ (%i2) fright:2*x+1$ (%i3) f(x):=(if x>0 then fright else fleft)$ (%i4) fun12sin(x,n,f1,f2):=(for k:1 thru n do b[k]:1/%pi*(integrate(f1*sin(k*x),x,-%pi,0) +integrate(f2*sin(k*x),x,0,%pi)), sum(b[k]*sin(k*x),k,1,n))$ (%i5) fun12sin(x,7,fleft,fright);

Графическое сопоставление результатов суммирования ряда Фурье и аналитического выражения заданной функции представлены на рис. 3.21
увеличить изображение
Рис. 3.21. Сравнение графика функции y = 2x + 1 при нечётном продолжении и суммы семи членов соответствующего ряда Фурье