2.1.2. Тестовый пример.

3,2x1 + 5,4x2 + 4,2x3 + 2,2x4 = 2,6 ,

2,1x1 + 3,2x2 + 3,1x3 + 1,1x4 = 4,8 ,

1,2x1 + 0,4x2 – 0,8x3 – 0,8x4 = 3,6 ,

4,7x1 + 10,4x2 + 9,7x3 + 9,7x4 = –8,4 ,

x1 = 5, x2 = –4, x3 = 3, x4 = –2.

2.1.3. Описание алгоритма. В данной программе реализован метод Гаусса со схемой частичного выбора.

В переменную n вводится порядок матрицы системы. С помощью вспомогательной процедуры ReadSystem в двумерный массив a и одномерный массив b вводится c клавиатуры расширенная матрица системы, после чего оба массива и переменная n передаются функции Gauss. В фукции Gauss для каждого k-го шага вычислений выполняется поиск максимального элемента в k-м столбце матрицы начинаяя с k-й строки. Номер строки, содержащей максимальный элемент сохраняеется в переменной l. В том случае если максимальный элемент находится не в k-й строке, строки с номерами k и l меняются местами. Если же все эти элементы равны нулю, то происходит прекращение выполнения функции Gauss c результатом false. После выбора строки выполняется преобразование матрицы по методу Гаусса. Далее вычисляется решение системы и помещается в массив x. Полученное решение выводится на экран при помощи вспомогательной процедуры WriteX.

2.1.4. Листинг программы и результаты работы

Uses CRT;

Const

maxn = 10;

Type

Data = Real;

Matrix = Array[1..maxn, 1..maxn] of Data;

Vector = Array[1..maxn] of Data;

{ Процедура ввода расширенной матрицы системы }

Procedure ReadSystem(n: Integer; var a: Matrix; var b: Vector);

Var

i, j, r: Integer;

Begin

r := WhereY;

GotoXY(2, r);

Write('A');

For i := 1 to n do begin

GotoXY(i*6+2, r);

Write(i);

GotoXY(1, r+i+1);

 Write(i:2);

end;

GotoXY((n+1)*6+2, r);

Write('b');

For i := 1 to n do begin

For j := 1 to n do begin

GotoXY(j * 6 + 2, r + i + 1);

Read(a[i, j]);

end;

GotoXY((n + 1) * 6 + 2, r + i + 1);

Read(b[i]);

end;

End;

{ Процедура вывода результатов }

Procedure WriteX(n :Integer; x: Vector);

Var

i: Integer;

Begin

For i := 1 to n do

Writeln('x', i, ' = ', x[i]);

End;

{ Функция, реализующая метод Гаусса }

Function Gauss(n: Integer; a: Matrix; b: Vector; var x:Vector): Boolean;

Var

i, j, k, l: Integer;

q, m, t: Data;

Begin

For k := 1 to n - 1 do begin

{ Ищем строку l с максимальным элементом в k-ом столбце}

l := 0;

m := 0;

For i := k to n do

If Abs(a[i, k]) > m then begin

m := Abs(a[i, k]);

l := i;

end;

{ Если у всех строк от k до n элемент в k-м столбце нулевой,

то система не имеет однозначного решения }

If l = 0 then begin

Gauss := false;

Exit;

end;

{ Меняем местом l-ую строку с k-ой }

If l <> k then begin

For j := 1 to n do begin

t := a[k, j];

a[k, j] := a[l, j];

a[l, j] := t;

end;

t := b[k];

b[k] := b[l];

b[l] := t;

end;

{ Преобразуем матрицу }

For i := k + 1 to n do begin

q := a[i, k] / a[k, k];

For j := 1 to n do

If j = k then

a[i, j] := 0

else

a[i, j] := a[i, j] - q * a[k, j];

b[i] := b[i] - q * b[k];

end;

end;

{ Вычисляем решение }

x[n] := b[n] / a[n, n];

For i := n - 1 downto 1 do begin

t := 0;

For j := 1 to n-i do

t := t + a[i, i + j] * x[i + j];

x[i] := (1 / a[i, i]) * (b[i] - t);

end;

Gauss := true;

End;

Var

n, i: Integer;

a: Matrix ;

b, x: Vector;

Begin

ClrScr;

Writeln('Программа решения систем линейных уравнений по методу Гаусса');

Writeln;

 Writeln('Введите порядок матрицы системы (макс. 10)');

Repeat

Write('>');

Read(n);

Until (n > 0) and (n <= maxn);

Writeln;

Writeln('Введите расширенную матрицу системы');

ReadSystem(n, a, b);

Writeln;

If Gauss(n, a, b, x) then begin

Writeln('Результат вычислений по методу Гаусса');

WriteX(n, x);

end

else

Writeln('Данную систему невозможно решить по методу Гаусса');

Writeln;

End.

Программа решения систем линейных уравнений по методу Гаусса

Введите порядок матрицы системы (макс. 10)

>4

Введите расширенную матрицу системы

 A 1 2 3 4 b

 1 3.2 5.4 4.2 2.2 2.6

 2 2.1 3.2 3.1 1.1 4.8

 3 1.2 0.4 -0.8 -0.8 3.6

 4 4.7 10.4 9.7 9.7 -8.4

Результат вычислений по методу Гаусса

x1 = 5.0000000000E+00

x2 = -4.0000000000E+00

x3 = 3.0000000000E+00

x4 = -2.0000000000E+00

2.2 Программа решения систем линейных уравнений по методу Зейделя

2.2.1. Постановка задачи. Требуется решить систему линейных алгебраических уравнений с вещественными коэффициентами вида

a11x1 + a12x2 + … + a1nxn = b1 ,
a21x2 + a22x2 + … + a2nxn = b2 ,
. . . . . . . . . . . . .

an1x1 + an2x2 + … + annxn = bn

для n ≤ 10 по методу Зейделя.


Информация о работе «Решение систем линейных алгебраических уравнений»
Раздел: Математика
Количество знаков с пробелами: 20755
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
24924
0
20

... , но выбор перехода к системе x=(x) зависит от типа конкретной решаемой системы линейных алгебраических уравнений. 6. Заключение В данной курсовой работе был реализован метод простой итерации для решения систем линейных алгебраических уравнений в виде двух программ, каждая из которых использует свой собственный способ перехода от системы вида F(x)=x к системе вида x=(x). Вообще говоря, ...

Скачать
33571
2
14

... Рисунок 1.1 - Схема информационных потоков для вычисления СЛАУ методом Гаусса Условные обозначения к рисунку 2.1:  - данные, вводимые с клавиатуры  - данные, хранящиеся на диске  - данные, выводимые на экран 2. Решение систем линейных алгебраических уравнений методом гаусса 2.1 Основные понятия Система линейных алгебраических уравнений (СЛАУ) из m уравнений с n неизвестными ...

Скачать
20676
0
0

... 1.2 0.4 -0.8 -0.8 3.6 4 4.7 10.4 9.7 9.7 -8.4Результат вычислений по методу Гаусса x1 = 5.0000000000E+00 x2 = -4.0000000000E+00 x3 = 3.0000000000E+00 x4 = -2.0000000000E+00 2.2 Программа решения систем линейных уравнений по методу Зейделя 2.2.1. Постановка задачи. Требуется решить систему линейных алгебраических уравнений с вещественными коэффициентами вида a11x1 + a12x2 + … + a1nxn = ...

Скачать
11265
1
9

... линейных уравнений: Или в матричном виде: , где матрица коэффициентов системы;  - вектор неизвестных; - вектор свободных членов. 2. Точные методы решения СЛАУ Метод главных элементов. Пусть дана система линейных алгебраических уравнений. Рассмотрим расширенную матрицу, состоящую из коэффициентов системы a[i,j] и свободных членов b[i]. Метод главных элементов - это обобщение ...

0 комментариев


Наверх