2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 [MATLAB] Решение ДУ
Сообщение15.05.2015, 21:27 


14/05/15
29
Нужно научиться решать в системе MATLAB различные ДУ в численном виде. Что посоветуете для изучения?
Также буду рад услышать про преимущества разных пакетов программ для решения ДУ.

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 21:57 


21/03/10
43
beardy в сообщении #1015704 писал(а):
Что посоветуете для изучения?

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

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

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

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:24 


14/05/15
29
Я так понимаю, что ode45 решает только ДУ 1-го порядка, разрешенные относительно производной и системы ДУ, состоящие из таких уравнений?
Если требуется решить уравнение второго и выше порядка, то уравнение должно быть разрешаемым относительно старшей производный, что бы мы могли придставить в виде системы ДУ 1-го порядка?

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:42 


21/03/10
43
beardy в сообщении #1015751 писал(а):
Я так понимаю, что ode45 решает только ДУ 1-го порядка, разрешенные относительно производной и системы ДУ, состоящие из таких уравнений?

Да

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

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

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение15.05.2015, 22:43 
Заслуженный участник
Аватара пользователя


11/04/08
2748
Физтех
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 


14/05/15
29
Встречаются ли ДУ 1-го порядка, которые нельзя разрешить отностительно производной? Как их решать в таком случае?

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:22 
Заслуженный участник


11/05/08
32166
beardy в сообщении #1015751 писал(а):
Я так понимаю, что ode45 решает только ДУ 1-го порядка, разрешенные относительно производной и системы ДУ, состоящие из таких уравнений?

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

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

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

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

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:34 


21/03/10
43
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 
Аватара пользователя


28/01/12
467
vasya321 в сообщении #1015820 писал(а):
Получаем ДУ 1-го порядка относительно $p$:
$$p' = \frac{p}{2p - 1}$$
А не так:$$p' = \frac{p}{-2p - 1}$$

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:56 


21/03/10
43
NT2000
Да, спасибо.

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 00:59 


14/05/15
29
ewert в сообщении #1015815 писал(а):
Однако проблема тут не столько в методе решения, сколько в выборе ветки уравнения. В случае неявного дифуравнения или системы при заданных начальных условиях нужно ещё найти соответствующие им значения производной или производных; но это уже -- вопрос решения никакого не дифура, а просто обычного нелинейного уравнения или системы. Т.е. вопрос сугубо самостоятельный, и его никак не обойти.

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

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение16.05.2015, 19:27 


21/03/10
43
Например, рассмотрим уравнение $(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 


14/05/15
29
Можете еще пояснить, когда мы передаем в функцию ode45 начальное условия, то это должно быть значение функции в точке 0?

 Профиль  
                  
 
 Re: [MATLAB] Решение ДУ
Сообщение17.05.2015, 19:00 


21/03/10
43
В 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 


14/05/15
29
vasya321 в сообщении #1016518 писал(а):
или при том $t$, которое вы указали в tspan(1)

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group