Всего на сайте:
236 тыс. 713 статей

Главная | Математика

Лабораторная работа № 5 Решение системы методом прогонки  Просмотрен 102

 

Задача: решить систему, представленную в виде расширенной матрицы:

Для наиболее точного решения систем с трехдиагональной матрицей применяется метод прогонки.

Первое уравнение системы в общем виде можно записать так:

. Выразим => .

Второе уравнение: , если подставить :

. Выразим => .

Отсюда легко определить зависимость:

, где , .

Таким образом, для каждого уравнения получим зависимость: .

Теперь чтобы вычислить значения (решение системы) необходим обратный ход. Последнее уравнение системы: . С дугой стороны: . Подставим в последнее уравнение

, отсюда .Потом по формуле , двигаясь в обратном порядке, вычислим все значения . Следующая программа реализует вышеперечисленные вычисления.

> restart; – отменяем все определения

with(linalg): – подключаем модуль для работы с линейной алгеброй

> A:=matrix(5,6): – объявляем расширенную матрицу А

> evalm(A);

Заполняем матрицу значениями из условия задачи

>A:=matrix(5,6,[[2,1,0,0,0,2],[1,2,1,0,0,1],[0,1,2,1,0,0],[0,0,1,2,1,1],[0,0,0,1,2,2]]);

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

> b[1]:=A[1,1]: c[1]:=A[1,2]: f[1]:=A[1,6]:

lambda[1]:=-c[1]/b[1]: delta[1]:=f[1]/b[1]:

> for i from 2 to 5 do

a[i]:=A[i,i-1]; b[i]:=A[i,i]; c[i]:=A[i,i+1]; f[i]:=A[i,6];

c[5]:=0;

lambda[i]:=-c[i]/(a[i]*lambda[i-1]+b[i]);

delta[i]:=(f[i]-a[i]*delta[i-1])/(a[i]*lambda[i-1]+b[i]);

od:

> x:=vector(5): – объявляем вектор, для заполнения значениями решения

x[5]:=delta[5]:
Обратный ход.

for j from 1 to 4 do

i:=6-j;

x[i-1]:=lambda[i-1]*x[i]+delta[i-1];

od:

`x`:=evalm(x);

В результате получено решение системы в виде вектора х.

 


Предыдущая статья:Лабораторная работа № 4 Применение системы Maple в сопротивлении материалов Следующая статья:Вавилонский плен
page speed (0.0925 sec, direct)