Задачи высшей математики с Maxima
3.8.6 Численные методы решения ОДУ
Однако в ряде случаев отыскать символьное решение ОДУ в достаточно компактном виде невозможно. В этом случае целесообразно использовать численные методы. Maxima включает пакет расширения dynamics, позволяющий проинтегрировать систему ОДУ методом Рунге-Кутта.
Начиная с версии 5.12, Maxima включает пакет dynamics (его необходимо загружать перед использованием). Помимо метода Рунге- Кутта, пакет dynamics включает ряд функций для построения различных фракталов.
Метод Рунге-Кутта реализует функция . Синтаксис вызова её вызова: , где — список правых частей уравнений; — список зависимых переменных; — список начальных значений; — список , содержащий символьное обозначение независимой переменной , её начальное значение , конечное значение , шаг интегрирования .
Пример:
Решить ОДУ
при .Используем пакет 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) |
Рассмотрим вопрос об определении коэффициентов и . Для этого применим теорему о почленном интегрировании функционального ряда. Проинтегрируем обе части равенства в пределах от до :
Из результатов вычисления интегралов, приведённых выше, следует, что все слагаемые, встречающиеся в правой части под знаком суммы равны нулю, поэтому
Следовательно,
( 3.2) |
Для того чтобы найти , обе части этого равенства умножим на cos(mx) и проинтегрируем на отрезке . Поскольку система тригонометрических функций ортогональна, то
для , если .Это означает что все с интегралы, встречающиеся в правой части, будут равны нулю, исключение составляет интеграл, который получается при . Этот интеграл равен . Поэтому
откудаАналогично, умножив обе части равенства на и проинтегрировав на отрезке , получаем, что
Итак, если функцию можно представить в виде тригонометрического ряда, то коэффициенты вычисляются по приведённым формулам и называются коэффициентами Фурье для функции (а ряд — соответственно рядом Фурье для ).
Промежуток интегрирования для периодической с периодом функции можно заменить любым промежутком , , длина которого равна .
Функция называется кусочно-гладкой на отрезке [] если функция и её производная на [] имеют конечное число точек разрыва первого рода.
Достаточные условия разложимости функции в ряд Фурье даёт теорема Дирихле: если — периодическая с периодом кусочногладкая на функция, то её ряд Фурье сходится в любой точке этого отрезка и его сумма равна:
- значению функции , когда — точка непрерывности функции ;
- , когда — точка разрыва функции , при этом
Отметим, что на практике чаще всего встречаются функции, которые удовлетворяют условиям теоремы Дирихле.
Пример: периодическую с периодом функцию разложить в ряд Фурье.
Вычислим коэффициенты Фурье (используем 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,π]
Пусть определена на отрезке . Для того, чтобы функцию разложить в ряд Фурье на этом отрезке, доопределим эту функцию произвольным образом на интервале . Рассмотрим два случая:
Функцию , заданную на , продолжим на интервал так, что вновь полученная функция , была чётной:
В таком случае говорят, что продолжена на чётным образом. Поскольку — чётная на функция, то её ряд Фурье содержит только косинусы:
Поскольку на отрезке имеет место равенство , то ряд Фурье для функции будет и рядом Фурье для на
Функцию , заданную на , продолжим на интервал нечётным образом:
Поскольку — нечётная на функция, то её ряд Фурье содержит только синусы:
Так как при , то полученный ряд Фурье для и будет рядом Фурье для на .
Пример: Функцию , определённую на отрезке , разложить в ряд Фурье: 1)по косинусам; 2)по синусам.
1) Функцию продолжим на чётным образом, т.е. составим новую функцию по формуле:
Вычисляем коэффициенты Фурье для этой функции при помощи функции :
(%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 при нечётном продолжении и суммы семи членов соответствующего ряда Фурье