Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод. указания и задания по курсовой.doc
Скачиваний:
12
Добавлен:
30.10.2018
Размер:
1.23 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].