7.14 Решение дифференциальных уравнений – команда dsolve
Для решения обыкновенных дифференциальных уравнений (систем уравнений) MATLAB имеет команду
r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v').
Она возвращает аналитическое решение дифференциальных уравнений eq1, eq2,..., использующих v как независимую переменную, с граничными и (или) начальными условиями cond1, cond2,... . По умолчанию независимой переменной считается переменная t, обычно обозначающая время. Если в выражениях eqI (condI) не используется знак равенства, то полагается, что eqI (condI) = 0.
Символ D обозначает производную по независимой переменной, то есть d/dt, при этом D2 означает d2/dt2 и т. д. Имя независимой переменной не должно начинаться с буквы D.
Начальные условия задаются в виде равенств 'y(a) = b' или 'Dy(a) = b' , где у – зависимая переменная, a и b – константы, которые могут быть и символьными. Могут быть символьными и константы в уравнениях. Если число начальных условий меньше порядка уравнения, то в решении будут присутствовать произвольные постоянные C1, C2 и т. д. Формы вывода результата такие же, как и для команды solve. Справку по dsolve можно получить, введя команду doc dsolve.
Пример:
Решить дифференциальные уравнения
1) x'' = -2x',2)y'' = -ax+y', y(0) = b, 3)y(4) - y = 5exsinx+x4, 4)y''+4y'+3y = cost, y(0) = 1, y'(0) = 0.
Решения 3- го и4- го уравнений проверить подстановкой.
Решение:
>> dsolve('D2x=-2*x')
ans =
C1*cos(2^(1/2)*t)+C2*sin(2^(1/2)*t)
>> dsolve('D2y=-a*x+y','y(0)=b','x')
ans =
a*x+C1*sinh(x)+b*cosh(x)
>> syms x
>> S=dsolve('D4y-y-5*exp(x)*sin(x)-x^4','x');
>> [R]=simple(S)
R =
-24-x^4-exp(x)*sin(x)+C1*exp(x)+C2*sin(x)+C3*cos(x)+C4*exp(-x)
Проверка 3-го решения:
>> diff(R,x,4)-R-5*exp(x)*sin(x)-x^4
ans =
0
>> S=dsolve('D2y+4*Dy+3*y=cos(t)','y(0)=1','Dy(0)=0','t')
S =
1/10*cos(t)+1/5*sin(t)-7/20*exp(-3*t)+5/4*exp(-t)
Проверка 4-го решения:
>> syms t
>> diff(S,t,2)+4*diff(S,t)+3*S
ans =
cos(t)
Проверка выполнения начальных условий 4 - го решения:
>> subs(S,t,0)
ans =
1
>> subs(diff(S,t),t,0)
ans =
0
Пример:
Решить систему линейных дифференциальных уравнений
Решение:
>> S=dsolve('Dx = y', 'Dy = -x')
S =
x: [1x1 sym]
y: [1x1 sym]
>> disp([S.x, S.y ])
[ cos(t)*C1+sin(t)*C2, -sin(t)*C1+cos(t)*C2]
Пример:
Решить систему линейных дифференциальных уравнений с начальными условиями и проверить решение
Решение:
>> S=dsolve('Dx = y', 'Dy = -x','x(0)=1','y(0)=2')
S =
x: [1x1 sym]
y: [1x1 sym]
>> disp([S.x S.y])
[ cos(t)+2*sin(t), -sin(t)+2*cos(t)]
Получено решение:x = cost+2sint, y = -sint+2cost.
Проверка решения:
syms t
>> diff(S.x,t)-S.y
ans =
0
>> diff(S.y,t)+S.x
ans =
0
Проверка выполнения начальных условий:
>> subs(S.x,t,0)
ans =
1
>> subs(S.y,t,0)
ans =
2
Команда dsolveне позволяет получить аналитическое решение дифференциального уравнения произвольного вида.
Пример:
Найти аналитическое решение уравнения Ван-дер-Поля
y'' - (1 - y2)y'+y = 0, y(0) = 2, y'(0) = 0.
Решение:
Обращение к dsolveвыдает сообщение о том, что решение не найдено:
>> dsolve('D2y-(1-y^2)*Dy+y=0','y(0)=2','Dy(0)=0')
ans =
[ empty sym ]
В некоторых случаях dsolveвозвращает решение, выраженное через специальные функции.
Пример:
Найти аналитическое решение уравнения Бесселя x2y''+xy'+(x2 - v2)y = 0.
Решение:
>> dsolve('x^2*D2y+x*Dy+(x^2-v^2)*y=0','x')
ans =
C1*besselj(v,x)+C2*bessely(v,x)
Решение выражается через функции Бесселя. Информацию о функциях Бесселя можно получить с помощью команды doc besselj.
- Основы работы и программирования, компьютерная математика Учебный курс
- Isbn ооо «Харвест», 2008
- Предисловие
- Введение
- Глава 1 знакомство с matlab и простейшие вычисления
- 1.1. Рабочая средаMatlab
- 1.2. Арифметические вычисления
- 1.3. Вещественные числа
- 1.4. Форматы вывода результата вычислений
- 1.5 Комплексные числа
- 1.6 Векторы и матрицы
- 1.7 Встроенные функции. Функции, задаваемые пользователем
- 1.8 Сообщения об ошибках и их исправление
- 1.9 Просмотр и сохранение переменных
- 1.10 Матричные и поэлементные операции над векторами и матрицами
- 1.11 Решение систем линейных уравнений
- Вопросы для самопроверки
- Глава 2 работа с массивами
- 2.1 Создание векторов и матриц
- 2.2 Применение команд обработки данных к векторам и матрицам
- 2.3 Создание специальных матриц
- 2.4 Создание новых массивов на основе существующих
- 2.5 Вычисление собственных значений и собственных векторов. Решение типовых задач линейной алгебры
- Вопросы для самопроверки
- Глава 3 м-файлы
- 3.1 Файл-программы
- 3.2 Файл-функции
- Вопросы для самопроверки
- Глава 4 программирование
- 4.1 Операторы отношения и логические операторы
- 4.2 Операторы цикла
- 4.3 Операторы ветвления
- 4.4 Оператор переключения switch
- 4.5 Оператор прерывания цикла break
- 4.6 Пример сравнения быстродействия матричных и скалярных операций
- Вопросы для самопроверки
- Глава 5 высокоуровневая графика
- 5.1 2D графика
- 5.1.1 Графики в линейном масштабе
- 5.2 Специальные виды 2d - графиков
- 5.2.1 Представление функции в виде дискретных отсчетов
- 5.2.2 Лестничные графики
- 5.2.3 Графики с указанием погрешности
- 5.2.4 Графики в логарифмическом и полулогарифмическом масштабах
- 5.2.5 Графики параметрических функций
- 5.3 3D графика
- 5.3.1 Линейчатые поверхности
- 5.3.2 Каркасные поверхности
- 5.3.3 Контурные графики
- 5.3.4 Сплошная освещенная поверхность
- 5.4 Оформление, экспорт и анимация
- 5.4.1 Оформление графиков
- 5.4.2 Сохранение и экспорт графиков
- 5.4.3 Анимация
- Вопросы для самопроверки
- Глава 6 прикладная численная математика
- 6.1 Операции с полиномами
- 6.2 Решение уравнений и их систем
- 6.3 Минимизация функции одной переменной
- 6.4 Минимизация функции нескольких переменных
- 6.5 Вычисление определенных интегралов
- 6.6 Решение дифференциальных уравнений
- 6.7 Аппроксимация и интерполяция данных
- 6.8 Интерполяция двумерных и многомерных данных
- Вопросы для самопроверки
- Глава 7 символьные вычисления
- 7.1 Символьные переменные, константы и выражения
- 7.2 Вычисления с использованием арифметики произвольной точности
- 7.3 Команды упрощения выражений – simplify, simple
- 7.4 Команда расширения выражений – expand
- 7.5 Разложение выражений на простые множители – команда factor
- 7.6 Приведение подобных членов – команда collect
- 7.7 Обеспечение подстановок – команда subs
- 7.8 Вычисление пределов – команда limit
- 7.9 Вычисление производных – команда diff
- 7.10 Вычисление интегралов – команда int
- 7.11 Разложение в ряд Тейлора – команда taylor
- 7.12 Вычисление суммы ряда – команда symsum
- 7.13 Решение уравнений и их систем – команда solve
- 7.14 Решение дифференциальных уравнений – команда dsolve
- 7.15 Прямое и обратное преобразования Лапласа – команды laplace,ilaplace
- 7.16 Графики символьных функций – команды ezplot, ezpolar
- 7.17 Прямой доступ к ядру системы Maple – командаmaple
- 7.18 Разложение рациональной дроби на сумму простейших дробей
- 7.19 Интерполяционный полином Лагранжа
- 7.20 Решение неравенств и систем неравенств
- 7.21 Разложение в ряд Тейлора функции нескольких переменных
- 7.22 Решение дифференциальных уравнений с помощью степенных рядов
- 7.23 Решение тригонометрических уравнений
- Вопросы для самопроверки
- Приложения Приложение 1. Справочная система matlab
- Приложение 2. Знакомство с пакетами расширения системыMatlab
- Приложение 3. Задания для самостоятельной работы
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Варианты
- Литература