Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Вход


Опции
К последнему сообщению К первому непрочитанному
Offline уни  
#1 Оставлено : 9 ноября 2010 г. 20:56:56(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Список функций:
rkfixed(), Rkadapt(),
rkm9st(), mk52lfn(), mk52lfa(), rkm9mkn(), rkm9mka().



Решатели нежёстких систем ОДУ:

rkfixed(init, x1, x2, intvls, D) Uses the fourth-order Runge-Kutta fixed-step method.

Rkadapt(init, x1, x2, intvls, D) Uses the fourth-order Runge-Kutta with adaptive step-size.

Intel ODE Solvers Library:

rkm9st(init, x1, x2, intvls, D) A specialized routine for solving non-stiff and middle-stiff ODE systems using the explicit method, which is based on the 4th order Merson’s method and the 1st order multistage method of up to and including 9 stages with stability control.

mk52lfn(init, x1, x2, intvls, D) A specialized routine for solving stiff ODE systems using the implicit method based on L-stable (5,2)-method with the numerical Jacobi matrix, which is computed by the routine.

mk52lfa(init, x1, x2, intvls, D) A specialized routine for solving stiff ODE systems using the implicit method based on L-stable (5,2)-method with numerical or analytical computation of the Jacobi matrix. The user must provide a routine for this computation.

rkm9mkn(init, x1, x2, intvls, D) A specialized routine for solving ODE systems with a variable or a priori unknown stiffness; automatically chooses the explicit or implicit scheme in every step and computes the numerical Jacobi matrix when necessary.

rkm9mka(init, x1, x2, intvls, D) A specialized routine for solving ODE systems with a variable or a priori unknown stiffness; automatically chooses the explicit or implicit scheme in every step. The user must provide a routine for numerical or analytical computation of the Jacobi matrix.


Параметры:

- init is either a vector of n real initial values, where n is the number of unknowns (or a single scalar initial value, in the case of a single ODE - not implemented yet).
- x1 and x2 are real, scalar endpoints of the interval over which the solution to the ODE(s) is evaluated. Initial values in init are the values of the ODE function(s) evaluated at x1.
- intvls is the integer number of discretization intervals used to interpolate the solution function. The number of solution points is the number of intervals + 1.
- D is a vector function of the form D(x,y) specifying the right-hand side of the system




Ссылки:

1. Intel ODE Solvers Library.

Отредактировано пользователем 23 августа 2013 г. 17:13:03(UTC)  | Причина: Не указана

Вложение(я):
ODE_manual.pdf (240kb) загружен 259 раз(а).
Россия навсегда!
Вячеслав Мезенцев
thanks 1 пользователь поблагодарил уни за этот пост.
mikka оставлено 10.11.2010(UTC)

Wanna join the discussion?! Login to your Форум проекта SMath forum account. Новые регистрации запрещены.

Offline OchkovVF  
#2 Оставлено : 9 ноября 2010 г. 23:04:37(UTC)
OchkovVF


Статус: Advanced Member

Группы: Registered, Advanced Member
Зарегистрирован: 03.06.2009(UTC)
Сообщений: 156
Мужчина
Российская Федерация

Сказал «Спасибо»: 200 раз
Поблагодарили: 3 раз в 3 постах
Текст функции rkfixed
communities.ptc.com/videos/1471
Текст функции rkadapt
http://twtmas.mpei.ac.ru...s/worksheets/rkadapt.mcd
если это кому интересно.
Offline уни  
#3 Оставлено : 10 ноября 2010 г. 8:31:53(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Спасибо, Валерий Фёдорович, приму во внимание.

Вот плагин с функцией rkfixed(): ODESolvers.dll
Исходник: ODESolvers_Class1.pdf
Вот примерный документ: rkfixed.sm

Примечания:
1. Функция системы должна быть вектором.
2. Имена переменных (t,x) могут быть любыми.

П.С. Там в цикле while() есть небольшая ошибка.
Поскольку это всё равно транслятор, то работает относительно медленно.
Самое смешное, что аналогичная функция, написанная в документе в виде программного блока работает всего на немного медленнее этой реализации ("подушка" посчиталась на 30 секунда быстрее, всего время расчёта для rkfixed() на моём компе около 3 мин 10 сек).
Код:
if ( система[n].Equals( перем_x ) && система[ n + 2 ].Equals( Элемент ) )

Здесь (n+2) теоретически может превысить размер вектора элементов системы. Надо будет поправить на досуге.

Отредактировано пользователем 10 ноября 2010 г. 9:12:46(UTC)  | Причина: Не указана

Россия навсегда!
Вячеслав Мезенцев
thanks 2 пользователей поблагодарили уни за этот пост.
mikka оставлено 10.11.2010(UTC), GhostTraktor оставлено 11.12.2011(UTC)
Offline smath  
#4 Оставлено : 10 ноября 2010 г. 10:58:34(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 640 раз
Поблагодарили: 262 раз в 102 постах
Спасибо за плагин.

уни написал:
Исходник: ODESolvers_Class1.pdf

Личным сообщением на форуме послал Вам логин и пароль для доступа к репозиторию на запись. Думаю удобнее код будет иметь там.
thanks 1 пользователь поблагодарил smath за этот пост.
уни оставлено 10.11.2010(UTC)
Offline уни  
#5 Оставлено : 10 ноября 2010 г. 11:44:27(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Да, я заметил логин и пароль, спасибо. Пока не буду мусорить в репозитории. Последний год я привык писать на русском (пишу в одиночку), а в репозиторий нужно переписывать всё на английском. Пока лень.

Если добавить ещё несколько решателей, то, пожалуй, можно будет их залить. Меня не устраивает скорость работы. Всё равно медленно.

Отредактировано пользователем 10 ноября 2010 г. 11:46:14(UTC)  | Причина: Не указана

Россия навсегда!
Вячеслав Мезенцев
Offline уни  
#6 Оставлено : 11 ноября 2010 г. 22:27:18(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
В качестве тестовой версии предлагаю Rkadapt(). Исходник является компиляцией кода Валерия Фёдоровича и приведённого в книжке "Numerical Recipes in C", откуда он собственно и был взят. Я подгонял его под фиксированные шаги как в Маткаде, чтобы вызов их был идентичен. Получилось не совсем ещё хорошо, но пока работает.

Примечание. Возможны случаи при большом количестве шагов (больше 100, к примеру), когда в конце вектора решения будут один или несколько нулей.

Плагин: ODESolvers.dll
Документ: Rkadapt.sm

Отредактировано пользователем 11 ноября 2010 г. 22:33:48(UTC)  | Причина: Не указана

Россия навсегда!
Вячеслав Мезенцев
Offline уни  
#7 Оставлено : 12 ноября 2010 г. 11:14:06(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Лучше тестируйте вот эту версию: ODESolvers.dll От 12.11.2010 г.

Здесь я уже понял ту фишку, которую использовали маткадовцы, когда адаптивный шаг "пристраивали" к фиксированной сетке. Работает гораздо быстрее и правильнее. Убрал многие ошибки. Теперь получается тоже, что и с rkfixed(), но гораздо точнее в тех же точках.

Отредактировано пользователем 12 ноября 2010 г. 11:27:59(UTC)  | Причина: Не указана

Россия навсегда!
Вячеслав Мезенцев
Offline уни  
#8 Оставлено : 12 ноября 2010 г. 14:51:13(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Андрей, тут я заметил одну проблему, когда правил плагин:
Россия навсегда!
Вячеслав Мезенцев
Offline smath  
#9 Оставлено : 12 ноября 2010 г. 16:35:29(UTC)
smath


Статус: Administration

Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member
Зарегистрирован: 11.07.2008(UTC)
Сообщений: 912
Мужчина
Российская Федерация

Сказал «Спасибо»: 640 раз
Поблагодарили: 262 раз в 102 постах
Функция if разбирается только в Preprocessing и не определяется в численной и/или символьной библиотеках.
Offline уни  
#10 Оставлено : 12 ноября 2010 г. 18:31:30(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Да, это даже наверное логично. Исправил плагин: ODESolvers.dll


Алгоритм Rkadapt(): Rkadapt prog.sm
К сожалению, я не смог заставить его работать, т.к. не понял где ошибка в записи выражения.
Здесь ещё нет защиты от зацикливания при выборе шага.

Ещё пример работы:

Отредактировано пользователем 12 ноября 2010 г. 21:12:35(UTC)  | Причина: Не указана

Россия навсегда!
Вячеслав Мезенцев
thanks 1 пользователь поблагодарил уни за этот пост.
nickgoblin оставлено 31.01.2011(UTC)
Offline уни  
#11 Оставлено : 12 ноября 2010 г. 21:25:02(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Эксперименты с ушами:
Россия навсегда!
Вячеслав Мезенцев
Offline уни  
#12 Оставлено : 14 августа 2013 г. 12:01:07(UTC)
уни


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.06.2009(UTC)
Сообщений: 346
Мужчина
Российская Федерация

Сказал «Спасибо»: 50 раз
Поблагодарили: 156 раз в 105 постах
Обновлён. Добавлены функции из Intel ODE Solvers Library: rkm9st(), mk52lfn(), mk52lfa(), rkm9mkn(), rkm9mka().

Также как и в DotNumerics можно использовать переменные AbsTol и RelTol в документе для задания точности вычислений.
Вложение(я):
ODE_manual.pdf (240kb) загружен 90 раз(а).
Россия навсегда!
Вячеслав Мезенцев
thanks 1 пользователь поблагодарил уни за этот пост.
Ber7 оставлено 14.08.2013(UTC)
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.