|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
03.03.2011, 20:45 | #1 |
Регистрация: 19.11.2009
Сообщений: 9
|
Проблема с ДУ(Рунге-Кутт)
Добрый вечер(день)!
Разбираюсь с методом Рунге-Кутта 4 порядка. Всё предельно ясно и понятно: в правой части должна быть зависимая переменная и независимая(время). Собственно время и является шагом. Но вот беда.. мне необходимо решить уравнение dIe/dt=(E-Re*Ie-Iн*Rн)/Le Как видно, в правой части есть только Ie. Все остальные числа известны. Подскажите, каким образом я могу шагать по времени? Вот материал на Вики |
03.03.2011, 21:52 | #2 |
Пользователь
Регистрация: 03.07.2009
Сообщений: 21
|
Так же как и если бы правая часть явно зависела от времени t. Примерно так:
Код:
Как видно в данном случаи функции f время t предедается, но не используется. И еще - ты написал, что "Собственно время и является шагом" - это не так, время мы постоянно увеличиваем на некий шаг h, который ты выбираешь сам из соображения точности, обычно выбирают h=0.1; h=0.01; и т.д. Последнее - я написал что-то вроде примера, чтобы он работал его нужно немного подредакитровать. P.S. Данное уравнение можно решить методом разделения переменных, т.е получить точное решение. Последний раз редактировалось Stilet; 05.03.2011 в 08:58. |
04.03.2011, 07:39 | #3 |
Регистрация: 19.11.2009
Сообщений: 9
|
Спасибо за разъяснение. т.е. получается, что на каждом шаге я нахожу как бы среднее арифметическое новой точки? но делается это "грубо" т.к. нельзя шагнуть h/2... правильно?
|
04.03.2011, 12:51 | #4 |
Пользователь
Регистрация: 03.07.2009
Сообщений: 21
|
На каждом шаге ты находишь приближенное значение точки, а не среднее, как ты сказал. А насчет слово "грубо", то учитывая, что метод Рунги-Кутты у тебя имеет 4-ый порядок точности (это довольно хорошая точность), то найденное приближенное решение получится близким к точному (т.е решение не грубое). На h/2 ты можешь шагнуть, и вообще на любой другой шаг. В этом случаи сетка не равномерная и моей проге следует как-то указывать как изменяется этот шаг в зависимости от времени t (можно в самом начале цикла while). Но в изменени шага смысла мало, лучше выбирать постоянный шаг. Хотя в некоторых случаях можно и уменьшить - если точность не достигнута, и увеличить, если желаемая точность достигается уже на нескольких точках подряд (для экономии времени).
Последний раз редактировалось pwian; 04.03.2011 в 13:01. |
04.03.2011, 16:31 | #5 |
Регистрация: 19.11.2009
Сообщений: 9
|
pwian, объясните, пожалуйста, о каком шаге идет речь? Ведь если я не могу задать период следования расчетов(квантования... как угодно можно назвать), то как я могу говорить о том, чтобы вычислить при h/2???
Я получаю просто набор ответов, пусть они и представляют экспоненту на графике, но я НИКАК не могу привязать их к оси времени... |
04.03.2011, 16:49 | #6 |
Пользователь
Регистрация: 03.07.2009
Сообщений: 21
|
Есть задача Коши:
y=f(t,y); y(t0)=y0; t0,y0- заданы. Нужно построить решение на отрезке [t0,Tmax]. Ты сам произвольно выбираешь шаг h - чем меньше он будет, тем точнее получится решение, но дольше программа будет вычислять его. Чертим оси координат t,y. С помощью метода Р-К ты находишь: 1) сначала точку (t1,y1). Соединяешь ее с точкой (t0,y0). Далее если сильно надо пора изменить шаг h - также как хочешь (например, h/2; или 2h); 2) находишь точку (t2,y2). Соединяешь ее с точкой (t1,y1). И так далее. |
04.03.2011, 19:05 | #7 |
Регистрация: 19.11.2009
Сообщений: 9
|
ладно... давайте переформулирую вопрос:
я могу смело предположить, что в при t0 Ie = 0... т.е. цепь разомкнута и ток не течет... НО! ГДЕ я подставляю в формулу параметр t??? нет его там...я тупо получаю следующую точку, основываясь на вычисленной ранее точке... а время, за которое произошло изменение, мне НЕ известно и никак не задается в явном виде... я НИКАК не влияю на шаг |
04.03.2011, 19:26 | #8 |
Пользователь
Регистрация: 03.07.2009
Сообщений: 21
|
ГДЕ я подставляю в формулу параметр t - нигде, так как в правой части уравнения его нет.
а время, за которое произошло изменение, мне НЕ известно и никак не задается в явном виде... - Если это ты про Tmax, то ответ прост - он должен быть обязательно для метода Рунге-кутты, поэтому придется задать как-то самому. я НИКАК не влияю на шаг - шаг выбираешь сам произвольно, как хочешь, лишь бы он маленький был. Я вижу мы не понимаем друг друга. Объясни, что тебе надо. Особенно это поясни: а время, за которое произошло изменение, мне НЕ известно и никак не задается в явном виде... я НИКАК не влияю на шаг Последний раз редактировалось Stilet; 05.03.2011 в 08:58. |
04.03.2011, 19:40 | #9 |
Регистрация: 19.11.2009
Сообщений: 9
|
мне нужно решить это уравнение так, чтобы я мог сказать(узнать), что в i-тый момент времени ток равен "значение"... вот так
|
04.03.2011, 20:10 | #10 |
Пользователь
Регистрация: 03.07.2009
Сообщений: 21
|
Ты находишь точки (tj,yj) - запоминаешь их в массиве. Значит в i-ый момент времен:
1) находишь точки t[j],t[j+1] в нашем массиве, таких, что t[j]<=t[i]<=t[j+1], где t[i]- наш i-ый момент времен. 2) Тебе также известны значения y[j],y[j+1] - в нашем массиве. Теперь соединяешь их прямой, на этой прямой обозначаешь y[i], и как-то по подобию треугольников находишь ее значение. Для данной задачи лучше выбрать постоянный шаг, например шаг h=0.1 or h=0.01; Если t[i]>Tmax, которое ты ввел, то введи Tmax>t[i]. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ПРОГРАММА В РУНГЕ-КУТТЕ | Roman967 | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 20.05.2010 18:22 |
Рунге- Кутта на Си | Ekатерина | Помощь студентам | 5 | 28.04.2010 19:31 |
Метод Рунге-Кутта (Си) | PPPPPP | Общие вопросы C/C++ | 1 | 13.04.2010 00:55 |
Метод Рунге-Кутта (Си) | PPPPPP | Помощь студентам | 2 | 12.04.2010 02:58 |
метод Рунге | sneZZZinka | Помощь студентам | 1 | 21.12.2009 17:31 |