ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 19.06.2025

Просмотров: 1083

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

33

6.Печать вектора корней X.

7.Конец вычислений.

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

program pGauss; uses crt;

const

n=3; {определяем размерность системы}

{в массиве А записываем расширенную матрицу системы уравнений} A: array [1..n,1..n+1] of real=((1, 0, -1, 0),(-1, -1, 1, 1),(4, 1, 1, 4));

var

X: array [1..n] of real; i,j,k:byte; c,d:real; begin

clrscr;

{начало прямого хода-приведение матрицы к треугольному виду} for k:=1 to n-1 do {начало цикла исключения k-й неизвестной } begin

for i:=k+1 to n do {начало цикла, определяющего i-е уравнение, из которого исключается k-я неизвестная }

begin

d:=A[i,k]; {коэффициент при k-й неизвестной в i-м уравнении }

for j:=k to n+1 do {цикл преобразования коэффициэнтов при исключении k-й неизвестной}

A[i,j]:=A[i,j]-A[k,j]/A[k,k]*d; end;

end;

{начало обратного хода - вычисление значений неизвестных} for k:=n downto 1 do {цикл вычисленя значения k-й неизвестной} begin

X[k]:=A[k,n+1]; {это свободный член в k-м уравнении}

for j:=n downto k+1 do {цикл вычисления значения k-й неизвестной} X[k]:=X[k]-A[k,j]*X[j];

X[k]:=X[k]/A[k,k];

end;

{конец обратного хода; вывод результатов} for k:=1 to n do

writeln('X[',k,']=',X[k]:12:6);

readkey;

end.

34

2.3 Решение систем линейных уравнений методом простой итерации

Пусть дана система (1) линейных уравнений. Если все диагональные коэффициенты aii ¹ 0, i = 1, 2, ..., n, то систему (1) можно представить в виде

b

n

aij

xi =

i

- å

x j , i= 1, 2, ..., n.

(5)

a

a

ii

ii

j =1

j ¹i

Введем обозначения:

éx

ù

ê 1

ú

x =

êx2

ú

,

êKú

ê

ú

ëxn

û

где

ì

0, если i = j,

ï

aij

aij = í

-

, если i ¹ j,

ï

aii

î

éa a

...a

1n

ù

ê 11 12

ú

a = êa21a22

...a2n

ú

,

ê ..................

ú

ê

ú

ëan1an2 ...ann

û

éb1 ù êb ú b = êêK2 úú , êëbn úû

bi =

bi

, i = 1, 2, ..., n, j = 1, 2, ..., n,

(*)

a

ii

и перепишем систему (5) в виде одного матричного уравнения:

x = ax + b.

(6)

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

x(1) = ax(0) + b.

Продолжая аналогичные вычисления, придем к векторной последовательности приближений:

x(k+1) = ax(k) + b, k = 1, 2, ... .

(7)

Достаточные условия сходимости итераций (7) к решению системы содержит следующая теорема:

Если какая-либо каноническая норма матрицы a меньше единицы, то урав- нение (6) имеет единственное решение x, к которому стремится последователь- ность итераций (7) при любом выборе начального приближения x(0).

Замечание. Для матрицы A = (aij)n × m определены следующие три нормы:

– m-норма – максимальная сумма модулей коэффициентов строк

m

||A||m = max å| aij |;

1 £ i £ n j =1

– l-норма – максимальная сумма модулей коэффициентов столбцов

n

||A||l = max å| aij |;

1 £ j £ m i=1


35

– k-норма – корень квадратный из суммы квадратов всех элементов матрицы

n m

||A||k = å åaij2 .

i=1 j=1

Достаточные условия сходимости процесса итераций для неприведенной системы (1) можно представить в виде:

-по m-норме

m

|aii| > å| aij | (i = 1, 2, ..., n),

(8)

j =1 j ¹i

т. е. модули диагональных коэффициентов для каждого уравнения системы (1) больше суммы модулей всех остальных коэффициентов уравнения;

-по l-норме

n

|ajj| > å| aij | (j = 1, 2, ..., m),

i=1 i¹ j

т. е. модули диагональных коэффициентов для каждого уравнения системы (1) больше суммы модулей всех остальных коэффициентов столбца.

Отклонение приближения x(k) от решения ξ по норме не будет превышать ε,

если

||ξ - x(k)|| ≤

α

||x(k) – x(k-1)|| ≤ ε.

1

-

α

В оценке (9) при вычислении нормы

вектора ||x(k)–x(k-1)|| следует представить

как матрицу Xn × 1. Например, для матрицы

é 0

0,2

- 0,4ù

α =

ê- 0,25

0

0,25

ú

ê

ú

ê

- 0,25

0

ú

ë- 0,25

û

m – норма равна

(9)

его

3

||α||m =

max

å| aij | =

1 £ i £ 3

j =1

= max {0 + 0.2 + 0.4,0.25 + 0 + 0.25,

0.25 + 0.25 + 0}= max {0.6,0.5,0.5} = 0.6.

Для вектора

é1.6ù

β = êê- 1úú ê 1 ú ë û

m – норма равна

||β||m = max| βi | = max {1.6,1,1} = 1.6.

i


36

Неравенство (9) позволяет определить число шагов, дающих наверняка ответ с точностью до ε. Действительно, для нормы разности двух последовательных приближений будем иметь

||ξ - x(k)|| ≤

α

k

||x(1)

– x(0)|| ≤ ε.

1

α

В частности, если выбрать

x(0) = β,

то

и

Следовательно,

Откуда

||α||k+1

x(1) = αβ + β

||x(1) – x(0)|| = ||αβ|| ≤ ||α|| ||β||.

||ξ

- x(k)|| ≤

α

k +1

||β|| ≤ ε.

1 −

α

ε

(1–||α||),

(k + 1)ln||α||

≤ ln ε + ln(1–||α||) – ln||β||,

β

k >

ln ε + ln(1 −

α

) − ln

β

– 1.

(10)

α

ln

2.3.1Алгоритм метода итераций

1.Ввести коэффициенты расширенной матрицы An × n+1 системы уравнений

(1)и требование к точности – ε.

2.Проверить выполнение достаточных условий сходимости процесса итераций по m-норме. Если условия (8) не выполняются, конец вычислений.

3.Привести систему (1) к виду (6) по формулам (*).

4.В соответствии с неравенством (10) определить число шагов – k, дающих

наверняка ответ с точностью до ε.

xi( 0 ) = βi, i = 1, 2, ..., n.

5.Организовать цикл вычисления векторной последовательности приближе-

ний (7):

6. xi( j +1 ) = α xi( j ) + β, i = 1, 2, ..., n, j = 0, 1, 2, ... k.

6.Выдать результаты вычислений – вектор x.

7.Конец алгоритма.


37

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

program IterSLU; uses crt;

const n = 4; {порядок системы уравнений}

e = 0.0000000001; {точность приближения}

a:array[1..n, 1..n+1] of real = {расширенная матрица неприведенной системы} ((-0.77,-0.04,0.21,-0.18,-1.24), (0.45,-1.23,0.06,0,0.88), (0.26,0.34,-1.11,0,-0.62), (0.05,-0.26,0.34,-1.12,1.17));

var

x, x0: array[1..n] of real; {для корней системы уравнений и приближений} i, j, k: byte;

p, s, am, bm, t: real; begin

clrscr;

{проверка достаточного условия сходимости процесса итераций: абсолютная сумма недиагональных элементов строки должна быть меньше модуля диагонального коэффициента этой строки}

for i:=1 to n do begin p:=0;

for j:=1 to n do {цикл получения суммы модулей недиагональных элементов} if j <> i then p:=p + abs(a[i, j]);

if abs(a[i, i]) < p then

begin writeln('Итерационный процесс расходится'); readkey; Exit; end; end;

{начать процесс итераций} {привести систему к виду x = ax+b} for i:=1 to n do

begin

for j:=1 to n do

if j <> i then a[i, j] := -a[i, j]/a[i, i]; a[i, n+1] := a[i, n+1]/a[i, i]; a[i, i]:=0; end;

{вычислить m-норму матрицы системы уравнений и столбца свободных членов}

for i:=1 to n do begin s:=0;

for j:=1 to n do s:=s + abs(a[i, j]);

if i = 1 then begin am:=s; bm:=abs(a[1, n+1]); end else

begin if s > am then am:=s; if abs(a[i, n+1]) > bm then bm:=abs(a[i, n+1]); end; end;

{определить число итераций для достижения заданной точности}

38

k:=round((ln(e)+ln(1-am)-ln(bm))/ln(am)); {установить начальные приближения равные bi} x0[i]:=a[i, n+1];

{цикл вычисления последующих приближений} t:=0;

repeat

for i:=1 to n do {цикл вычисления нового значения корня xi}

begin s:=0; for j:=1 to n do s:=s + a[i, j]*x0[j]; x[i]:=a[i, n+1] + s; end; t:=t + 1; for i:=1 to n do x0[i]:=x[i];

until t > k; writeln('Получено решение');

for i:=1 to n do write(' x[', i, ']=', x[i]:12:7); writeln; writeln('Проверка решения:');

for i:=1 to n do begin

s:=0; for j:=1 to n do s:=s + a[i, j]*x[j]; s:=s + a[i, n+1]-x[i]; write(s:12:9); end;

writeln; readkey;{задержка выполнения программы до нажатия клавиши} end.

2.4 Решение систем линейных уравнений средствами Excel

Решение систем линейных уравнений в Excel выполним, используя механизм

– циклическая ссылка.

Пример. Решить систему линейных уравнений

–0.77x1 – 0.04x2

+ 0.21x3

– 0.18x4 = –1.24,

(11)

0.45x1

– 1.23x2

+ 0.06x3

= 0.88,

0.26x1

+ 0.34x2

– 1.11x3

= – 0.62,

0.05x1

– 0.26x2 + 0.34x3 – 1.12x4 = 1.17.

Метод итераций реализуется следующим алгоритмом.

2.В меню Сервис выбрать команду Параметры. В появившемся окне Па- раметры выбрать вкладку Вычисления, на которой снять флажок Итерации.

3.Выполните распределение ячеек и запись расчетных формул:

диапазон A5:E8 – расширенная матрица неприведенной системы уравне-

ний (11);

диапазон A10:D13 – матрица α приведенной системы уравнений:

0

=-B5/$A$5

=-C5/$A$5

=-D5/$A$5

=-A6/$B$6

0

=-C6/$B$6

=-D6/$B$6

=-A7/$C$7

=-B7/$C$7

0

=-D7/$C$7

=-A8/$D$8

=-B8/$D$8

=-C8/$D$8

0

диапазон E10:E13 – вектор β свободных членов приведенной системы уравнений:


39

=E5/$A$5 =E6/$B$6 =E7/$C$7 =E8/$D$8

F5 – требование к точности – значение ε;

диапазон F10:F13 – сумма модулей элементов строк матрицы α приведенной системы уравнений:

=ABS(A10)+ABS(B10)+ABS(C10)+ABS(D10) =ABS(A11)+ABS(B11)+ABS(C11)+ABS(D11) =ABS(A12)+ABS(B12)+ABS(C12)+ABS(D12) =ABS(A13)+ABS(B13)+ABS(C13)+ABS(D13)

G10 – формула вычисления m – нормы матрицы α:

=МАКС(F10:F13)

формула вычисления m – нормы вектора β свободных членов приведенной системы уравнений:

=МАКС(ABS(E10);ABS(E11);ABS(E12);ABS(E13))

I10 – условие сходимости итерационного процесса:

=ЕСЛИ(G10>1;"нет";"есть")

G5 – число итераций для достижения заданной точности ε:

=ОКРУГЛ((LN(F5)+LN(1-G10)-LN(H10))/LN(G10);0)

G16 – счетчик числа итераций:

=G16+1

диапазон A18:D18 – начальные приближения значений корней:

=ЕСЛИ($G$16=1;E10;A20) =ЕСЛИ($G$16=1;E11;B20) =ЕСЛИ($G$16=1;E12;C20) =ЕСЛИ($G$16=1;E13;D20)

диапазон A20:D20 – последующие приближения значений корней:

=СУММПРОИЗВ($A10:$D10;$A$18:$D$18)+$E10 =СУММПРОИЗВ($A11:$D11;$A$18:$D$18)+$E11 =СУММПРОИЗВ($A12:$D12;$A$18:$D$18)+$E12 =СУММПРОИЗВ($A13:$D13;$A$18:$D$18)+$E13

диапазон H5:H8 – проверка решения:

40

=СУММПРОИЗВ(A5:D5;$A$20:$D$20) =СУММПРОИЗВ(A6:D6;$A$20:$D$20) =СУММПРОИЗВ(A7:D7;$A$20:$D$20) =СУММПРОИЗВ(A8:D8;$A$20:$D$20)

4.Выполните расчет:

-в меню Сервис выбрать команду Параметры. В появившемся окне Па- раметры выбрать вкладку Вычисления, на которой установить флажок Итерации;

вполе Предельное число итераций ввести число, обеспечивающее точность вычислений – значение ячейки G5 и нажать кнопку Ок. Выполняется расчет.

5.Конец алгоритма.

Замечания:

1.Если Excel регистрирует циклическую ссылку, следует в появившемся окне нажать кнопку Отмена.

2.Если требуется восстановление исходного состояния для начала процесса итераций, то следует на вкладке Вычисления снять флажок Итерации, а затем выполнить двойной щелчок мышкой по ячейке G16. Ячейка открывается для корректировки, формулу не корректируем, а нажимаем на клавишу Enter. Аналогичные действия выполним для ячеек из диапазона A18:D18.

3.Расчеты с использованием циклической ссылки могут быть выполнены пошагово:

1) В меню Сервис выбираем команду Параметры. В появившемся окне Па- раметры выбираем вкладку Вычисления, на которой устанавливаем флажок Ите- рации, в поле Предельное число итераций вводим число 1 и нажимаем кнопку Ok. Выполняется одна итерация.

2)При каждом нажатии клавиши F9 будет выполняться одна итерация.

2.5Решение систем линейных уравнений средствами MathCAD

Если заданы матрица А и вектор В для системы линейных уравнений в мат-

ричной форме А×Х=В, то вектор решения можно получить из очевидного выражения Х=А-1×В.

В MathCAD введена встроенная функция lsolve(А, В), которая возвращает вектор Х для системы линейных уравнений А×Х=В при заданной матрице коэффициентов А и векторе свободных членов В. Известно, что неоднородная система линейных уравнений совместна, если ранг расширенной матрицы равен рангу матрицы системы, т.е. rank(A)= rank(A׀B). Совместная система имеет единственное решение, если rank(A)= rank(A׀B) = n, где n – размерность матрицы А.