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

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

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

В наличии

Представлена реализация на языке 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
has been added to your cart:
Оформление заказа