- •Вычислительная математика
- •Оглавление
- •3. Численное интегрирование…………………………………………………...51
- •4. Уравнения в частных производных…………………………………………65
- •5. Численные методы линейной алгебры……………………………………...73
- •1. Численные методы решения обыкновенных дифференциальных уравнений Основные понятия
- •Элементы теории погрешностей
- •Численное дифференцирование. Аппроксимационные формулы
- •Задача Коши для обыкновенного дифференциального уравнения 1-го порядка. Метод Эйлера
- •Задача Коши для обыкновенных дифференциальных уравнений 1-го порядка. Методы Рунге-Кутта
- •Краевые задачи для обыкновенного дифференциального уравнения 2-го порядка
- •Метод Галеркина для обыкновенных дифференциальных уравнений 2-го порядка
- •2. Аппроксимация функций Интерполяционный многочлен Лагранжа
- •Многочлены Чебышева
- •Минимизация погрешности интерполяции полинома Лагранжа
- •Интерполяция с равноотстоящими узлами
- •Кусочная аппроксимация
- •Сплайн- интерполяция
- •Метод наименьших квадратов
- •Ортогональные полиномы
- •3. Численное интегрирование Простейшие квадратурные формулы
- •Квадратурные формулы Ньютона-Котеса
- •Экстраполяция по Ричардсону
- •Квадратурные формулы Гаусса, Чебышева
- •Метод Монте-Карло
- •4. Уравнения в частных производных
- •5. Численные методы линейной алгебры
- •Матрицы и действия над ними
- •Клеточные матрицы
- •Разложение матрицы на произведение двух треугольных матриц
- •Итерационные методы
- •Метод Якоби
- •Метод Зейделя
- •Практикум по вычислительной математике Лабораторные работы для Mathcad 2001i Professional Лабораторная работа № 1 Обращение матриц
- •Лабораторная работа №2 Решение системы нелинейных уравнений
- •Лабораторная работа №3 Построение уравнений регрессии
- •Лабораторная работа № 4 Разложение функций в ряд Фурье пополиномам Лежандра
- •Лабораторная работа № 5 Решение дифференциального уравнения второго порядка
- •Лабораторная работа № 6 «Аппроксимации»
- •Лабораторная работа № 7 Решение слау с помощью lu разложения
- •Лабораторная работа № 11 Метод прогонки
- •Синтаксис среды Maple
- •Данные множественного типа
- •Решение дифференциальных уравнений в среде Maple Примеры решения уравнений встроенными функциями
- •Примеры численного решения оду
- •Лабораторная работа №1 Решение оду различными методами
- •Задания для самостоятельного решения
- •Лабораторная работа № 2 Интерполяция функции полиномами Лежандра
- •Лабораторная работа № 3 Метод наименьших квадратов
- •Лабораторная работа № 4 Применение системы Maple в сопротивлении материалов
- •Эпюра q
- •Эпюра q
- •Эпюра q
- •Эпюра q Лабораторная работа № 5 Решение системы методом прогонки
- •Библиографический список
Примеры численного решения оду
1. Получить численное
решение уравнения
,
при
,
.
Построить график решения.
Решение. Переменной а присваиваем значение необходимого дифференциального уравнения
> a:=diff(y(x),x$2)+13*diff(y(x),x)+10=0;
Для получения численного решения также используется функция dsolve. Для того, чтобы указать на то, что требуется численное решение, необходимо дописать дополнительный параметр numeric. По умолчанию в системе Maple используется в этом случае метод Рунге-Кутта 4–5 порядка. Для указания на конкретный метод дописывается параметр следующего вида: method=<метод>. О методах, используемых в Maple можно узнать из справки системы.
Затем переменной присваиваем результат функции. Параметр range используется для определения интервала интегрирования уравнения.
> re:=dsolve({a,y(0)=10,D(y)(0)=4},y(x),numeric, range=0..1);
Результат, возвращаемый функцией dsolve с таким набором параметров – процедура с одним параметром, вычисляющая список значений (функции и производных) в точке, определяемой вносимым в параметр значением.
Для построения графика решения используется функция odeplot, которая позволяет построить график как значений функции, так и производных до порядка уравнения. После решения следующим параметром может указываться необязательный параметр – список переменных, по которым будет построен график. odeplot входит в состав пакета plots. Пакеты в Maple подключаются функцией with(<параметр>[,<функция>]), где параметром является пакет, а далее (не обязательно) можно писать список функций этого пакета, которые необходимо подключить к программе. Если список опустить, будут подключены все функции
> odeplot(re,[x,y(x)],color=blue);
Для получения графика производной в данном случае следует указать следующий список переменных: [x,D(y)(x)]. Можно также воспользоваться формой производной с использованием diff. Если в списке указать три параметра, то по ним будет построен трехмерный график. Если список будет опущен в описании, система сама выберет систему координат.
Лабораторная работа №1 Решение оду различными методами
Задача: решить
уравнение следующего вида:
,
где
и
при
.
1. Решение методом неопределенных коэффициентов
Для начала отменим все определения и зададим функции p(x) и q(x), используя оператор функциональной зависимости.
> restart;
q:=x->cos(x);
p:=x->-tan(x);
Обозначим
переменными ur[1]
и ur[2]
заданное уравнение и его однородную
форму. Через xp
и yp
обозначим
условие
,
то есть
.
Функция
lhs(<уравнение>)
возвращает левую часть уравнения. rhs
– правую.
> ur[1]:=D(y)(x)+p(x)*y(x)=q(x);
ur[2]:=lhs(ur[1])=0;
xp:=0;
yp:=2;
Получим общее однородное решение уравнения, возьмем его правую часть. Заменим в ней постоянную _С1 произвольной переменной С, зависящей от x и присвоим полученное выражение переменной igr. Один из способов производить замену – это использование функции eval с двумя параметрами, где первый – выражение, а второй – список равенств, в соответствии с которыми будет произведена замена.
> rhs(dsolve(ur[2],y(x)));
igr:=eval(%,[_C1=C(x)]);
Затем возьмем
производную полученного общего решения,
для того, чтобы, заменив
и
в полном уравнении, определить С(х).
Обозначим производную переменной igr1.
> igr1:=diff(%,x);
Произведем
замену. Для нахождения С(х)
решим дополнительное дифференциальное
уравнение по С(х)
с граничными условием
.
> eval(ur[2],[y(x)=igr,D(y)(x)=igr1]);
dsolve({lhs(%)=rhs(ur[1]),C(xp)=yp},C(x));
Таким образом мы получили функцию С(х). Подставив ее в общее решение, мы получим полное решение уравнения:
> 'y(x)'=eval(igr,[C(x)=rhs(%)]);
2. Решение методом
замены
Отличием от предыдущего решения будет использование функции declare пакета PDEtools, которая заменит все представления производной апострофами, соответствующими порядку производной.
> restart;
PDEtools[declare](y(x),u(x),v(x),prime=x):
q:=x->cos(x);
p:=x->-tan(x);
xp:=0;
yp:=2;
Обозначим переменной ur[1] заданное уравнение.
> ur[1]:=D(y)(x)+p(x)*y(x)=q(x);
Преобразуем
уравнение к виду с производной. Произведем
замену
.
С помощью функции collect
(collect(<выражение>,<переменная>))
соберем коэффициенты при
.
Полученное уравнение обозначим переменной
urav:
> convert(ur[1],diff);
eval(%,[y(x)=u(x)*v(x)]);
urav:=collect(%,v(x));
Функции
и
мы можем выбирать произвольным образом.
Легко заметить, что уравнение заметно
упрощается, если
.
Это условие обозначим как ur[1],
а оставшееся выражение – ur[2].
> ur[1]:=lhs(eval(urav,[v(x)=1]))=0;
ur[2]:=lhs(urav)-lhs(ur[1])*v(x)=rhs(urav);
Решим уравнение для . Функции произвольные, поэтому константу в решении примем равной единице.
> u(x):=eval(rhs(dsolve(ur[1],u(x))),[_C1=1]);
Решим уравнение для . Константу заменим переменной C:
> v(x):=eval(rhs(dsolve(ur[2],v(x))),[_C1=C]);
Умножив полученные результаты, получим общее неоднородное решение заданного уравнения:
> y(x):=u(x)*v(x);
Подставим граничные условия и получим значение C:
> C:=solve(eval(y(x),[x=xp])=yp,C);
Подставив С, получим частное неоднородное решение:
> 'y(x)'=eval(y(x));
Теперь воспользуемся функцией plot из пакета plots, чтобы построить график решения.
plot(y(x),x=xp-1..xp+1);
График аналитического решения.
3. Решение встроенными средствами Maple.
Отменим все определения.
> restart; xp:=0;
yp:=2;
Воспользуемся операторной формой записи уравнения с граничными условиями. Применим dsolve:
> dsolve([D(y)(x)+p(x)*y(x)=q(x),y(xp)=yp],y(x));
4. Решение численными методами.
Воспользуемся для этого параметрами numeric и range (см. Примеры численного решения ОДУ). Полученную процедуру обозначим как re1.
>re1:=dsolve({D(y)(x)+p(x)*y(x)=q(x),y(xp)=yp},y(x),numeric, range=xp-1..xp+1);
Построим график решения. > with(plots):
o deplot(re1);
Численное решение, судя по графику, соответствует точному решению.
