Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metod_ukazania_i_zadania_po_kursovoy.doc
Скачиваний:
81
Добавлен:
04.03.2016
Размер:
1.09 Mб
Скачать

Задание 4 Решение дифференциальных уравнений

  1. Разработать алгоритм решения дифференциального уравнения вида методом Рунге-Кутта. Варианты функцийпредставлены в таблице 1 на стр. 5-6 и должны быть сформулированы по правилу

Граничные условия выбрать с учетом формул:

, ,

где n - вариант задания. Уравнение решается на отрезке при разбиении его наk равных частей. Точность вычислений Создать блок-схему алгоритма.

  1. Создать программу на языке Pascal (Delphi), реализующую разработанный алгоритм. Программа должна вычислять таблицу значений функции при трёх различных шагах разбиения. Один из них –k, два других выбрать самостоятельно.

  2. С помощью программы исследовать влияние числа разбиений k на вид решения

  3. Построить графики функции для трёх случаев (отличающихся количеством отрезков разбиения).

  4. Решить задачу средствами MathCad (Excel).

Примечание: Результаты решения задачи с помощью программы и в среде MathCad (Excel) нужно представить в виде таблицы, содержащей полученные значения функции ; таблицы, содержащей значения интеграла для разных шагов разбиения.

Рекомендации по решению обыкновенных дифференциальных уравнений методом Рунге-Кутта

Блок-схема алгоритма простейшей реализации метода Рунге-Кутта представлена на рисунке 1. В блоке 2 осуществляется ввод концов отрезка [x0; xn], значение функции у0(х0) и количество промежутков разбиения n. Далее производится присваивание переменным хi и уi, хранящим текущее значение аргумента и функции, начальных значений и рассчитывается шаг h (блок 3). Затем эти значения выводятся. После этого в цикле с предусловием по методу Рунге-Кутта вычисляется значение функции и аргумента в следующей точке (блок 5), которые затем и выводятся (блок 7).

Замечание 1. Функция F(x,y) представляет правую часть обыкновенного дифференциального уравнения вида . Если уравнение имеет более высокий порядок, то прибегают к использованию метода понижения производной (см. литературу по численным методам).

Рисунок 12 – Блок-схема алгоритма решения ОДУ

Методом Рунге-Кутта четвертого порядка

Замечание 2. Если функция y(x) на каком-нибудь промежутке нарастает очень быстро, то имеет смысл доработать данный алгоритм, добавив в него проверку условия:

. (1)

При невыполнении этого условия, шаг нужно уменьшить вдвое, повторить вычисление слагаемых k1, k2, k3, k4 и повторить проверку условия (1) и т.д. Такая модификация метода позволит существенно увеличить его точность.

Замечание 3. Данный алгоритм не предусматривает ни оценки погрешности вычисляемых значений, ни погрешности метода в целом. Поэтому при необходимости такой оценки он должен быть доработан.

Ниже приведен текст программы на языке Паскаль, реализующей данный алгоритм для уравнения .

Program MRK;

var x0,xn,y0,h,x,y,k1,k2,k3,k4:real;

n,j:integer;

function F(x,y:real):real;

begin

F:=y*y+1/(2*x*x);

end;

begin

writeln('Введите концы отрезка x0, xn: ');

readln(x0,xn);

writeln('Введите начальное значени функции y0:');

readln(y0);

writeln('Введите число отрезков разбиения n: ');

readln(n);

h:=(xn-x0)/n;

writeln('Таблица значений функции');

writeln('------------------------');

writeln(' x | y(x) ');

writeln('------------------------');

writeln(x0:7:3,' | ',y0:7:5);

x:=x0; y:=y0;

for j:=1 to n do begin

{Приостанавливаем выполнение программы до нажатия клавиши Enter после вывода каждых 10 значений}

if j mod 10 = 0 then readln;

k1:=h*F(x,y);

k2:=h*F(x+h/2,y+k1/2);

k3:=h*F(x+h/2,y+k2/2);

k4:=h*F(x+h,y+k3);

y:=y+(k1+2*k2+2*k3+k4)/6;

x:=x+h;

writeln(x:7:3,' | ',y:7:5);

end;

readln;

end.

Замечание. Проверить результаты работы программы можно введя следующие данные: х0=1, хn=1.5, у0=0.9 и произвольное количество шагов n.

Оценить погрешность вычисления некоторого yn можно по приближенной формуле Рунге [21, c.334].