Лабараторная. Численное решение краевой задачи для

advertisement
Лабораторная работа 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.
1
Таким образом, получили систему 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,i1])+StrToFloat(StringGrid2.Cells[i-2,i-1])*a[i-1]));
b[i] := (StrToFloat(StringGrid2.Cells[6,i-1])-StrToFloat(StringGrid2.Cells[i-2,i1])*b[i-1])/(StrToFloat(StringGrid2.Cells[i-1,i-1])+StrToFloat(StringGrid2.Cells[i2,i-1])*a[i-1]);
2. Определяем значения неизвестных y[i]:
y[n] := a[n]*y[n+1] + b[n];
Вариант 10.
Дано:
– дифференциальное уравнение
;
– краевые условия
[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.
2
Download