Лабораторная работа 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