Главная » Курсовые » Численные методы

Лабараторная работа 6. Численное решение краевой задачи для обыкновенных дифференциальных уравнений

Цель работы: изучение разностных методов решения краевой задачи для обыкновенных дифференциальных уравнений, практическое решение уравнений на ЭВМ.

Описание метода конечных разностей для решения дифференциального уравнения с указанными краевыми условиями.

Рассмотрим линейное дифференциальное уравнение с двухточечными краевыми условиями.

где p(x), q(x), f(x) - непрерывны на отрезке [a,b]. Один из самых простых способов решения задачи является сведение ее к системе конечно-разностных уравнений. Для этого необходимо разбить отрезок [a,b] на n равных частей длины h, где h=(b-a)/n. Точками разбиения абсциссы будут xi=x0+ih, где x0=a, xn=b.

Значение функции y(x) в точках xi и ее производных обозначим соответственно y(xi)=yi, y'(xi)=y'i, y''(xi)=y''i.

Введем следующие обозначения: pi=p(xi), qi=q(xi), fi=f(xi).

Заменим производные центрально-разностными отношениями. Для внутренних точек отрезка [a,b], будем иметь:

y'i= (yi+1-yi-1)/2h;

y"i=(yi+1-2yi+yi-1)/h2 ; i=1,2,..n-1.

Можно представить краевую задачу в виде:

(yi+1-2yi+yi-1) / h2 +pi((yi+1-yi) / 2h)+qiyi=fi,   где i=1,...,n-1;

α1y0+ α2 ((y1-y0) / h) = A;

β1yn+ β2 ((yn-yn-1) / h) = B.

Таким образом, получили систему n+1 линейных уравнений с n+1 неизвестными y0, y1,...,yn, решение которой позволяют найти значение искомой функции y(x) в точках x0, x1...,xn.

Система является трех диагональной и для ее решения используется метод прогонки. В ходе прямого хода определяем прогоночные коэффициенты αk и βk. В ходе обратного хода определяем все неизвестные последовательно, начиная с yn.

Блок-схема алгоритма программы решения краевой задачи методом прогонки.

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

Алгоритм вычисления значений функции заключается в следующем:

  1. Находим значения прогоночных коэффициентов:

a[1]:=- StrToFloat(StringGrid2.Cells[1,0])/StrToFloat(StringGrid2.Cells[0,0]));

b[1] := StrToFloat(StringGrid2.Cells[6,0])/StrToFloat(StringGrid2.Cells[0,0]);

a[i] := - (StrToFloat(StringGrid2.Cells[i,i-1])/(StrToFloat(StringGrid2.Cells[i-1,i-1])+StrToFloat(StringGrid2.Cells[i-2,i-1])*a[i-1]));

b[i] := (StrToFloat(StringGrid2.Cells[6,i-1])-StrToFloat(StringGrid2.Cells[i-2,i-1])*b[i-1])/(StrToFloat(StringGrid2.Cells[i-1,i-1])+StrToFloat(StringGrid2.Cells[i-2,i-1])*a[i-1]);

  1. Определяем значения неизвестных y[i]:

y[n] := a[n]*y[n+1] + b[n];

Вариант 10.

Дано:

 QUOTE    – дифференциальное уравнение

 QUOTE   ;  QUOTE    – краевые условия

[0;0.5] – интервал

Ответ: y(0) = 1; y(0.1) = -1.447; y(0.2) = 0.075; y(0.3) = 1.471; y(0.4) = 1.326; y(0.5) = 1.279.

order cialis online canada