Простые алгоритмы численного решения задачи Коши для ОДУ

01.12.14

Разработка - Математика и алгоритмы

Представлена реализация на языке 1С8 простейших алгоритмов численного решения задачи Коши для обыкновенных дифференциальных уравнений (методы - Эйлера, Эйлера-Коши и Рунге-Кутта).
Статья является логическим продолжением предыдущей (http://infostart.ru/public/314372/).

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


В качестве интегрируемой функции возьмем в этот раз такую:

Функция Функция_2(х,у)
	Возврат Окр(Pow(х,2) + Pow(у,2),16);
КонецФункции	


Так будет выглядеть вызов расчетных функций и начальные условия:

Процедура ВыполнитьРасчет()
	Число_шагов = 500;	
	Х_нач 	= 1;
	Х_кон 	= 1.2;
	У_нач 	= 4;
	Сообщить("Метод Эйлера (1-ый пор.тчн.) = " + РассчитатьЭйлера(Х_нач, Х_кон, У_нач, Число_шагов));
	Сообщить("Метод Эйлера усовершенств. (2-ой пор.тчн.) = " + РассчитатьЭйлераУсовершенствованный(Х_нач, Х_кон, У_нач, Число_шагов));
	Сообщить("Метод Эйлера-Коши (2-ой пор.тчн.)	= " + РассчитатьЭйлераКоши(Х_нач, Х_кон, У_нач, Число_шагов));
	Сообщить("Метод Рунге-Кутта	(4-ый пор.тчн.) = " + РассчитатьРунгеКутта(Х_нач, Х_кон, У_нач, Число_шагов));

КонецПроцедуры	


Таким образом, имеется функция F(x;y)=x^2 + y^2, начальные условия (1;4), где x пробегает значения от 1 до 1,2. Требуется численно решить задачу Коши ОДУ. Число шагов - 500.


1) Метод Эйлера (первого порядка точности):

Функция РассчитатьЭйлера(Х_нач, Х_кон, У_нач, Число_шагов)
	h = (Х_кон-Х_нач)/Число_шагов;
	x = Х_нач;
	y = У_нач;
	Для й=0 По Число_шагов-1 Цикл
		y = y + h*Функция_2(x,y);
		x = x + h;
	КонецЦикла;	
	Возврат y;
КонецФункции

2) Метод Эйлера улучшенный (второго порядка точности):

Функция РассчитатьЭйлераУсовершенствованный(Х_нач, Х_кон, У_нач, Число_шагов)
	h = (Х_кон-Х_нач)/Число_шагов;
	x = Х_нач;
	y = У_нач;
	Для й=0 По Число_шагов-1 Цикл
		yрр = y + 0.5*h*Функция_2(x,y);
		y = y + h*(Функция_2(x+0.5*h,yрр));
		x = x + h;
	КонецЦикла;	
	Возврат y;
КонецФункции

3) Метод Эйлера-Коши (второго порядка точности):

Функция РассчитатьЭйлераКоши(Х_нач, Х_кон, У_нач, Число_шагов)
	h = (Х_кон-Х_нач)/Число_шагов;
	x = Х_нач;
	y = У_нач;
	Для й=0 По Число_шагов-1 Цикл
		yp = y + h*Функция_2(x,y);
		y = y + 0.5*h*(Функция_2(x,y) + Функция_2(x+h,yp));
		x = x + h;
	КонецЦикла;	
	Возврат y;
КонецФункции

4) Метод Рунге-Кутта (четвёртого порядка точности):

Функция РассчитатьРунгеКутта(Х_нач, Х_кон, У_нач, Число_шагов)
	h = (Х_кон-Х_нач)/Число_шагов;
	х = Х_нач;
	у = У_нач;
	Для й=0 По Число_шагов-1 Цикл
		К0 = Функция_2(х, у);
		К1 = Функция_2(х + 0.5*h, у + 0.5*h*К0);
		К2 = Функция_2(х + 0.5*h, у + 0.5*h*К1);
		К3 = Функция_2(х + h, у + h*К2);
		у = у + h*(К0 + 2*К1 + 2*К2 + К3)/6;
	    х = х + h;
	КонецЦикла;	
	Возврат у;
КонецФункции

Результат вычислений:

Метод Эйлера (1-ый пор.тчн.) = 22,18596991825004379496
Метод Эйлера усовершенств. (2-ой пор.тчн.) = 22,52108073259233371164
Метод Эйлера-Коши (2-ой пор.тчн.) = 22,5214513039223151306
Метод Рунге-Кутта (4-ый пор.тчн.) = 22,522188708188403111466666666666666666666666665999999992

Эйлер Коши Рунге-Кутта Эйлера-Коши ОДУ

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1753    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4415    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    7458    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7854    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4444    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8834    John_d    73    

46

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

Подробный разбор, с примером использования, встроенного механизма кластеризации 1С.

31.08.2021    7801    dusha0020    8    

70
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Oleg_nsk 277 01.12.14 11:59 Сейчас в теме
Всё хорошо. Один вопрос. Почему вы не остались на кафедре высшей математики, а занялись 1с?
valentio; talych; +2 Ответить
3. cmd_vasec 34 01.12.14 12:03 Сейчас в теме
(1) Oleg_nsk,
1с -ки больше получают. А такой кафедры нет. У нас в городе Кафедра Компьютерного и Математического моделирования.
4. Идальго 226 01.12.14 15:51 Сейчас в теме
(1) Oleg_nsk, я только недавно пришел в 1С и изучаю платформу, механизмы и конфигурации. И вообще, я еще учусь ))) А публикации нужны всякие.
7. Oleg_nsk 277 03.12.14 10:38 Сейчас в теме
(4) Тогда предлагаю вам осуществить на 1с это. И второй вариант по алгоритму братьев Чудновских.
8. Идальго 226 03.12.14 14:45 Сейчас в теме
(7) Oleg_nsk, спасибо за предложение конечно, но это мне пока не интересно.
2. cmd_vasec 34 01.12.14 12:01 Сейчас в теме
Какое практическое применение данной публикации? Что численные методы быстрее работают на 1с чем на других языках?
5. Идальго 226 01.12.14 15:57 Сейчас в теме
(2) cmd_vasec, это практическая реализация сабжа. Т.е., если нужно посчитать интеграл, то используя программы - можно получить решение. Дело не в том, с какой скоростью относительно других языков и т.п. работают эти алгоритмы в 1С. Главное, что они работают и с их помощью можно легко получить результаты.
Вот например недавно я сдавал вычислительные методы (практику) - ну так я на 1С все писал. А на вопрос почему - отвечал, что мне так удобнее, т.к. последнее время часто работаю с 1С. Ну, и действительно, нет заморочек с типизацией и т.п... Ах, ну и конечно, никто не собирается, как мне кажется, мега рассчеты вести на 1С, т.к. для этого существуют разнообразные математические программы или библиотеки.
6. cmd_vasec 34 01.12.14 17:35 Сейчас в теме
(5)
Тогда надо делать библиотеку в которой собрать решения таких задач. Думаю, что работа с матрицами будет востребовано.
9. oberon355 15 04.12.14 10:53 Сейчас в теме
Здорово. Жаль только в жизни 1с ника это никак не востребовано.
10. titan6662000 1 09.12.14 07:10 Сейчас в теме
Очень даже востребовано. Вот захотели защитить свою конфигурацию(обработку ...) от копипаста - применили сложный алгоритм, который не только сложно понять, но и быстрее работает = взяли и применили.
Осталось только подумать где и как. К тому же применение матики может существенно сжать код программы если думать вовремя. В планировании часто возникает потребность в сложных вычислениях. Были бы книги о том как применить то или иное множество решений сложных задач в реальной жизни (кто знает - подскажите), а то приходится самому выдумывать.
11. Идальго 226 11.12.14 17:20 Сейчас в теме
(10) titan6662000,
Были бы книги о том как применить то или иное множество решений сложных задач в реальной жизни (кто знает - подскажите), а то приходится самому выдумывать.

Ну, наверное подойдет - Таха Х.А. "Введение в исследование операций".
EdmundoAlvares; +1 Ответить
12. TPID 11.12.14 17:23 Сейчас в теме
Мдя. Мне сейчас предстоит метод наименьших квадратов реализовывать... но с диффурами, надеюсь, сталкиваться больше не придётся.
13. Whiteb2801 13.10.21 05:12 Сейчас в теме
Подскажите, а если у меня дифф. уравнение вида y'(t) = f(y)? Т.е. нет переменной Х. Решения будут другими? Потому что с результатом Mathcad эти алгоритмы не сходятся ((
Если можно, напишите мне в личку, помогите разобраться с моим примером, пожалуйста.
Оставьте свое сообщение