Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / ПОСОБИЕ_ВычМат

.pdf
Скачиваний:
23
Добавлен:
09.04.2015
Размер:
502.09 Кб
Скачать

31

на разрешающий элемент ak k. Итак, коэффициенты i уравнения на k шаге преобразовываются по формулам:

 

 

 

a(k −1)

 

 

 

ai(kj) = ai(kj−1)

 

k j

 

× ai(kk−1)

,

(*)

 

ak(kk−1)

 

 

 

 

 

 

 

b(k −1)

 

 

 

 

bi(k ) = bi(k −1)

 

k

× ai(kk−1) ,

 

 

ak(kk−1)

 

 

 

 

 

 

 

k = 1, 2, ..., n – 1, i = k+1, ..., n, j = k, ..., n.

Например, при k = 1 система (1) преобразовывается к эквивалентной системе (2):

 

 

a11x1 + a12 x2 + a13x3... + a1n xn = b1

,ü

 

 

 

(1)

 

(1)

 

(1)

 

(1)

,

ï

,

(2)

 

 

a22 x2

+ a23 x3

+ ... + a2n xn

= b2

ý

 

 

a(1) x

2

+ a(1) x

+ ... + a(1) x

n

= b(1)

,

ï

 

 

 

32

33

3

3n

n

 

þ

 

 

где ai(1j) = ai j

a1 j

× ai 1 , bi(1) = bi

a1 j

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

 

 

a11

 

 

a11

 

 

 

 

 

 

 

 

 

 

Таким образом неизвестная x1 исключена из уравнений 2, 3, ..., n. При k = 2 система (2) преобразовывается к эквивалентной системе (3):

a(1)

где a(2) = ai(1j) - 2 j i j a22(1)

a11x1 + a12 x2 + a13x3 + ... + a1n xn = b1

,ü

 

 

a(1) x

2

+ a(1) x

+ ... + a(1) x

n

= b(1)

,ï

 

 

22

23

3

2n

 

 

2

ï

 

 

 

 

(2)

 

(2)

xn

(2)

ï

,

(3)

 

 

 

a33 x3

+ ... + a3n

= b3

,ý

 

 

............................................ï

 

 

 

 

 

a(2) x

+ ... + a(2) x

 

 

= b(2)

ï

 

 

 

 

 

n

,ï

 

 

 

 

 

n3

3

nn

 

n

þ

 

 

× ai(12) , bi(2) = bi(1) -

b2(1)

 

× ai(12) , i=3, ..., n, j = 2, ..., n.

 

a22(1)

 

 

 

 

 

 

 

 

 

 

 

 

 

Таким образом неизвестная x2 исключена из уравнений 3, 4, ..., n. Процедура преобразования повторяется n–1 раз с пересчетом коэффициентов по формулам (*). В итоге на шаге k = n–1 получаем систему (4) треугольного вида:

a11x1 + a12 x2 + a13x3 + ... + a1n xn = b1,ü

 

a(1) x

2

+ a(1) x

+ ... + a

(1) x

n

= b(1)

,ï

 

22

23 3

 

2n

 

2

ï

 

 

 

(2)

(2)

xn

(2)

ï

(4)

 

 

a33 x3

+ ... + a3n

= b3

,ý

 

 

............................................ï

 

 

 

 

(n−1)

 

 

 

(n−1)

ï

 

 

 

 

 

 

 

ï

 

 

 

 

ann

xn = bn

.þ

 

На этом прямой ход заканчивается.

Этап 2 носит название обратного хода. Из последнего уравнения системы (4) следует определение

32

b(n−1)

xn = n .

ann(n 1)

Вычисление значений неизвестных выполняется по формулам

 

1

 

n

xk =

× (bk(k −1)

- å ak(kj−1) x j ) , k = n–1, ..., 1.

akk(k −1)

 

 

j =k +1

2.2.1Алгоритм метода Гаусса

1.Определить значение n – размерность системы линейных уравнений.

2.Определить коэффициенты расширенной матрицы An × (n+1) системы линейных уравнений.

3.Прямой ход. Организовать цикл исключения xk неизвестной: k = 1, 2, …, n–1.

3.1.Организовать цикл, определяющий i уравнение, из которого исключается xk неизвестная: i = k+1, k+2, …, n.

3.1.1.Определить значение вспомогательной переменной d = Aik, равной коэффициенту при неизвестной xk в i уравнении.

3.1.2.Организовать цикл преобразования Аij коэффициентов i уравнения при исключении из него xk неизвестной: j = k, k+1, k+2, …, n+1.

3.1.2.1.Преобразование выполнить по формуле

Aij = Aij – Akj/Akk*d.

3.1.3. Конец цикла по параметру j. 3.2.Конец цикла по параметру i.

4.Конец цикла по параметру k (конец прямого хода).

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

вестной по формуле

n

xk = (Ak, n+1 å Akj x j )/Akk, k = n, n-1, n-2, …, 1.

j=k +1

5.1.Организовать цикл по параметру k: k = n, n–1, n–2, …, 1.

5.1.1.Установить значение xk = Ak, n+1 – равное свободному члену в k уравнении.

5.1.2.Организовываем цикл вычисления разности

n

Ak, n+1 å Akj x j .

j=k +1

5.1.2.1.Организовать цикл по параметру j = k+1, …, n.

5.1.2.1.1.Вычислить xk = xk – Akj*xj.

5.1.2.2.Конец цикла по параметру j.

5.1.3.Вычислить xk = xk / Akk.

5.2.Конец цикла по параметру k (конец обратного хода).

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 – размерность матрицы А.