2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 [MATLAB] Решение ДУ
Сообщение15.05.2015, 21:27 
Нужно научиться решать в системе MATLAB различные ДУ в численном виде. Что посоветуете для изучения?
Также буду рад услышать про преимущества разных пакетов программ для решения ДУ.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 21:57 
beardy в сообщении #1015704 писал(а):
Что посоветуете для изучения?

Посмотрите вот этот пример. Думаю, этого будет достаточно, чтобы решить какое-то ДУ или систему ДУ. Ещё можно вспомнить, что такое жёсткие системы ДУ, если будет медленно считаться какое-то ДУ.

beardy в сообщении #1015704 писал(а):
Также буду рад услышать про преимущества разных пакетов программ для решения ДУ.

Тут скорее важны преимущества численных методов. Мне, например для построения силовой линии электрического поля, хватает решателя ode45, в котором используется метод Рунге-Кутты 4 порядка точности с адаптивным временным шагом.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:24 
Я так понимаю, что ode45 решает только ДУ 1-го порядка, разрешенные относительно производной и системы ДУ, состоящие из таких уравнений?
Если требуется решить уравнение второго и выше порядка, то уравнение должно быть разрешаемым относительно старшей производный, что бы мы могли придставить в виде системы ДУ 1-го порядка?

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:42 
beardy в сообщении #1015751 писал(а):
Я так понимаю, что ode45 решает только ДУ 1-го порядка, разрешенные относительно производной и системы ДУ, состоящие из таких уравнений?

Да

beardy в сообщении #1015751 писал(а):
Если требуется решить уравнение второго и выше порядка, то уравнение должно быть разрешаемым относительно старшей производный, что бы мы могли придставить в виде системы ДУ 1-го порядка?

ДУ, неразрешаемые относительно старшей производной, на практике мне попадались. Но мне кажется, что такое ДУ можно свести к системе ДУ первого порядка и на основе её решения определить искомую производную.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:43 
Аватара пользователя
beardy в сообщении #1015704 писал(а):
Что посоветуете для изучения?

Смотрите справку в Матлабе, ссылку вам уже дали: http://www.mathworks.com/help/matlab/ref/ode45. В Матлабе популярны два интегратора: ode45 (метод Рунге-Кутты по Дорманду-Принсу 5(4), 5ый порядок, адаптивный шаг) и ode113 (многошаговый Адамса с переменным порядком и адаптивным шагом). Некоторая информация по интеграторам Матлаба предоставлена в статье Shampine, The Matlab ODE Suite, написанной разработчиками/реализаторами.

Также можете посмотреть книгу Ануфриев, MATLAB 7. Здесь много информации, ее стоит почитать.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:56 
Встречаются ли ДУ 1-го порядка, которые нельзя разрешить отностительно производной? Как их решать в таком случае?

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:22 
beardy в сообщении #1015751 писал(а):
Я так понимаю, что ode45 решает только ДУ 1-го порядка, разрешенные относительно производной и системы ДУ, состоящие из таких уравнений?

А других (из числа "разрешённых") и не бывает. Любое уравнение или система высших порядков стандартно сводится к системе первого порядка.

beardy в сообщении #1015776 писал(а):
Встречаются ли ДУ 1-го порядка, которые нельзя разрешить отностительно производной? Как их решать в таком случае?

А это уже совсем другой вопрос. Естественно, встречаются. Однако проблема тут не столько в методе решения, сколько в выборе ветки уравнения. В случае неявного дифуравнения или системы при заданных начальных условиях нужно ещё найти соответствующие им значения производной или производных; но это уже -- вопрос решения никакого не дифура, а просто обычного нелинейного уравнения или системы. Т.е. вопрос сугубо самостоятельный, и его никак не обойти.

Однако если уж он решён, то дальше -- никаких проблем. Знание значений самой функции и её производных на предыдущем шаге порождает нелинейные уравнения на производные для следующего шага (или полушага, или и т.д.), но они уже вполне эффективно решаются хотя бы методом Ньютона. Эффективно, поскольку дифуры обычно приходится интегрировать всё-таки с маленьким шагом, и значения производных на предыдущем шаге будут хорошими приближениями для их значений на следующем.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:34 
beardy в сообщении #1015776 писал(а):
Встречаются ли ДУ 1-го порядка, которые нельзя разрешить отностительно производной?

Да, конечно. Например, $(y')^2 + y' + y = 0$.

beardy в сообщении #1015776 писал(а):
Как их решать в таком случае?

Можно решить методом введения параметра. Например, в уравнение выше вводится параметр $p=y'$. Полученное выражение можно разрешить относительно $y$: $$y=  -p - p^2 = f(p)$$ Найдем выражение для $y'$ в переменных $(x,p)$: $$\frac{d y}{d x} = \frac{\partial f}{\partial x} + \frac{\partial f}{\partial p} \frac{d p}{d x} = \left(-1 - 2p \right) \frac{d p}{d x} = p$$
Получаем ДУ 1-го порядка относительно $p$:
$$p' = \frac{p}{-2p - 1}$$
После его решения относительно $p$, находим $y =  -p - p^2 $.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:47 
Аватара пользователя
vasya321 в сообщении #1015820 писал(а):
Получаем ДУ 1-го порядка относительно $p$:
$$p' = \frac{p}{2p - 1}$$
А не так:$$p' = \frac{p}{-2p - 1}$$

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:56 
NT2000
Да, спасибо.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:59 
ewert в сообщении #1015815 писал(а):
Однако проблема тут не столько в методе решения, сколько в выборе ветки уравнения. В случае неявного дифуравнения или системы при заданных начальных условиях нужно ещё найти соответствующие им значения производной или производных; но это уже -- вопрос решения никакого не дифура, а просто обычного нелинейного уравнения или системы. Т.е. вопрос сугубо самостоятельный, и его никак не обойти.

Не совсем понятно. Это можно соотнести с примером, который привел vasya321?

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 19:27 
Например, рассмотрим уравнение $(y')^2 + y' + y^2 + y = 0$. Уже не получается выразить $y$ как в примере выше.

Аппроксимируем производную конечной разностью 1-го порядка точности: $$\left( \frac{y_{n+1} - y_n}{\Delta x} \right)^2 +  \frac{y_{n+1} - y_n}{\Delta x}  + y_n^2 + y_n = 0,$$где $n=0,1, \ldots$ — номер шага.

Для определения функции на следующем шаге $y_{n+1}$ необходимо решить нелинейное уравнение выше относительно $y_{n+1}$ при известном значении на предыдущем шаге $y_n$. Для этого можно использовать, например метод Ньютона или свою голову.

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение17.05.2015, 13:46 
Можете еще пояснить, когда мы передаем в функцию ode45 начальное условия, то это должно быть значение функции в точке 0?

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение17.05.2015, 19:00 
В ode45 решается система ДУ вида:
$$
\frac{d y_i}{d t} = f_i (x, y_1, y_2, \ldots), \; i=1,2, \ldots
$$
Вы вызываете функцию командой [T,Y] = ode45(odefun,tspan,y0). Здесь y0 - вектор значений функций $y_i$ при $t=0$ (или при том $t$, которое вы указали в tspan(1)).

 
 
 
 Re: [MATLAB] Решение ДУ
Сообщение17.05.2015, 19:54 
vasya321 в сообщении #1016518 писал(а):
или при том $t$, которое вы указали в tspan(1)

Спасибо, разобрался. В документации сразу не нашел, т. к. это написано в описании tspan, а не y0.

 
 
 [ Сообщений: 15 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group