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

Прикладная информатика

..pdf
Скачиваний:
6
Добавлен:
05.02.2023
Размер:
584.51 Кб
Скачать

Глава 4

МЕТОДЫ РЕШЕНИЯ СЛАУ

4.1 Метод Гаусса

При написании программы, реализующей этот вычислительный процесс, необходимо учитывать одно важное свойство алгоритма. А именно: когда вычисляются коэффициенты a(k+1) и b(k+1), то нужны только коэффициенты a(h) и b(h) при h = k и не нужны коэффициенты с h < k,

a(ijk+1) = a(ijk)

b(i k+1) = b(i k)

akkj a(k), a(kkk) ik

bkk a(k).

a(kkk) ik

Возникает вопрос, можно ли использовать лишь две переменные A и B для представления всех a(k) и b(k)? Чтобы ответить на этот вопрос, рассмотрим, ка-

кие коэффициенты потребуются на последующих шагах обратной подстановки,

n

b(i k) − ∑ a(ijk)xj

 

 

j

k

+

1

 

а именно xk

=

=

 

. Как мы уже видели, при этом можно воспользовать-

 

(

 

)

 

 

 

k

 

 

 

 

 

aik

 

 

 

ся любым из уравнений с индексом i = k, . . ., n. Если для вычисления xk выбирается k-е уравнение (i = k), то доступны как раз те строки A и B, которые содержат коэффициенты a(ijk) и b(i k) для i = k + 1, . . ., n. Таким образом, их можно заменить

соответственно на a(ijk+1) и b(i k+1). Из всего этого следует, что достаточно иметь по

одному экземпляру переменных A и B, которые будут последовательно хранить коэффициенты a(ij1), a(ij2), . . ., a(ijn) и b(i 1), b(i 2), . . ., b(i n). Объем памяти, необходимый для хранения этих коэффициентов, резко сокращается. Именно поэтому примене-

ние метода исключения Гаусса экономически оправдано на существующих вычислительных машинах. Заметим, что по аналогичным соображениям можно было бы использовать общую память для xi и bi и не вводить переменную X .

Взглянем на рекуррентные соотношения алгоритма.

72

РАЗДЕЛ II. Прикладной

Формулы пересчета коэффициентов:

a(ijk+1) = a(ijk)

b(i k+1) = b(i k)

a(k)

kj a(k), (4.1)

a(kkk) ik

(k)

bk a(k).

a(kkk) ik

Формула получения неизвестных:

 

 

 

k

)

 

n

 

k

)

 

 

 

 

 

b

j

 

a

xj

 

 

 

 

(

k 1

(

 

 

 

xk

=

 

i

 

=+

ij

 

.

(4.2)

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

(

)

 

 

 

 

 

 

 

 

 

 

aik

 

 

 

 

 

 

При написании программы воспользуемся методом пошаговой детализации. На первом этапе необходимо определиться с основными структурами данных. Учитывая вышесказанное, введем следующие описания переменных:

var

A: array[1..n, 1..n] of real; B, X : array[1..n] of real;

На самом высоком уровне детализации напишем первый вариант программы в следующем виде:

Вариант 1:

{1.1} begin «присвоить значения переменным A и B»; {1.2} for k = 1 to n 1 do begin

{1.3} вычислить a(k+1) и b(k+1), используя a(k) и b(k), в соответствии с формулами (4.1)

{1.4} end; {1.5} k = n; {1.6} repeat

{1.7} «вычислить xk в соответствии с (4.2)» {1.8} until k = 0;

{1.9} end.

Вариант 2 получается в результате детализации инструкции «вычислить a(k+1) и b(k+1), используя a(k) и b(k), в соответствии с (4.1)» (строка 1.3 в варианте 1), которую можно записать следующим образом:

Вариант 2:

{2.1} for i = k + 1 to n do begin

{2.2} «вычислить i-ю строку a(k+1) и b(k+1), в соответствии с (4.1)» {2.3} end;

В этом месте следует обратить внимание на то, что при вычислении a(ijk+1)

 

i

 

 

 

a k

 

b

k

)

 

 

 

 

 

kj

 

 

(

 

 

(

+

)

 

 

akkk

 

 

 

 

akkk

 

 

 

и b

k

1

 

по (4.1) множители

( )

и

 

k

 

не зависят от параметра цикла i. Следуя

 

 

 

( )

 

( )

 

 

 

 

 

 

 

 

основному правилу, по которому нужно избегать повторного вычисления неменяющихся частей выражений, мы вынесем из инструкции for операцию деления на

Глава 4. Методы решения СЛАУ

73

a(kkk). Но возникает вопрос: где хранить результаты деления? Можно ли просто за-

 

 

a k

 

 

b k

 

 

менить a k

и b k соответственно на

kj

 

и

k

 

? Рассмотрим, как повлияет эта

( )

 

kj

k

 

 

 

( )

 

akkk

 

 

akkk

 

 

( )

( )

)

 

)

 

 

 

(

 

(

 

замена на процесс обратной подстановки. Во-первых, умножение всех коэффициентов на один и тот же множитель не изменяет значения неизвестных. Во-вторых, при делении на a(kkk) значение самого a(kkk) становится равным 1, и, следовательно, в процессе обратной подстановки деление становится излишним. Поэтому предлагаемая замена не только допустима, но и желательна. На основании вышесказанного запишем третий вариант программы для фазы исключения неизвестных, который предназначен заменить строки 1.2–1.4 в варианте 1.

Вариант 3:

{3.1} for k

1 to n

 

1 do begin

 

{3.2}

p =

1 A k,

 

 

;

 

 

 

 

 

 

 

 

=

 

/

[

 

k

]

 

 

 

 

 

 

 

{3.3}

for j

=

k

+

1 to n do

 

 

 

{3.4}

A

 

 

 

p

 

 

A

k,

j

;

 

{3.5}

B k [

k, j

 

 

 

 

 

 

p ] =

 

 

 

[

 

 

]

 

 

 

[ ] =

B

k

;

 

 

 

k 1

 

{3.6}

 

 

[

 

 

]k 1

 

 

 

 

for i

=

k

+

1 to n do begin

 

{3.7}

 

 

 

 

 

 

 

( + )

 

 

( + )

, в соответствии с (4.1)»

«вычислить ai

 

 

и bi

{3.8}

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{3.9} end;

Наконец, при детализации инструкции «вычислить a(i k+1) и b(i k+1), в соответствии с (4.1)» (строка 3.7 в варианте 3) следует учитывать, что A[i, j] имеет значе-

ние a(kjk) (на k-м шаге).

a(kkk)

Вариант 4:

{4.1} for i

=

k

+

1 to n do begin

 

 

 

 

 

 

{4.2}

for j

i=,

k 1 to n do

 

 

 

 

 

 

 

 

{4.3}

 

A

 

j + A

i,

j

] −

A

i, k

]

A

k, j

;

{4.4}

B i

 

[

B] i=

[

 

 

 

[

 

k

[

]

 

{4.5} end; [ ] =

[ ] −

A

i, k

]

B

]

;

 

 

 

 

[

 

 

 

[

 

 

 

 

 

Теперь тот же процесс постепенной детализации мы применяем к фазе обратной подстановки. Обратная подстановка реализуется как последовательность вычитаний по (4.2). Заметим только, что деление на a(kkk) уже было выполнено во время фазы исключения неизвестных. Таким образом, строку 1.7 в варианте 1 необходимо заменить следующими строками:

Вариант 5:

{5.1} t = B[k];

{5.2} for j = k + 1 to n do

{5.3} t = t A[k, j] X [j]; {5.4} X [k] = t;

Обратите внимание, что здесь существенно используется то свойство инструкции for, в соответствии с которым не выполняется никаких действий, если конечное значение меньше начального значения параметра цикла.

74

РАЗДЕЛ II. Прикладной

Ниже приводится окончательный вид программы решения системы линейных уравнений. Заметим, что теперь требуется n шагов исключения неизвестных (вместо n 1 шагов), так как на n-м шаге выполняется деление b(nn) на a(nnn).

Решение системы n линейных уравнений методом исключения неизвестных по методу Гаусса.

var

i, j, k: 1..n; p, t: real;

A: array[1..n, 1..n] of real; B, X : array[1..n] of real;

begin

«присвоить значения переменным A и B»; for k = 1 to n do begin

p = 1/A[k, k];

for j = k + 1 to n do

A[k, j] = p A[k, j]; B[k] = p B[k];

for i = k + 1 to n do begin for j = k + 1 to n do

A[i, j] = A[i, j] − A[i, k] A[k, j]; B[i] = B[i] − A[i, k] B[k];

end; end;

k = n; repeat

t = B[k];

for j = k + 1 to n do

t = t A[k, j] X [j]; X [k] = t

until k = 0; end.

{X [1]. . .X [n] являются решением системы уравнений}

Особое внимание нужно уделить операции деления, поскольку алгоритм перестает работать, если делитель окажется равным нулю. Это тем более важно, если арифметические операции выполняются с конечной точностью, так как даже близкий к нулю делитель может привести к ошибке или в лучшем случае к совершенно обескураживающим результатам. То, что перестановка строк (уравнений) и столбцов A и B не влияет на значения неизвестных, позволяет нам в такой последовательности производить исключение неизвестных, чтобы вообще избежать деления на нуль или близкое к нулю значение. Делители называются осевыми элементами. В качестве осевого элемента мы можем выбрать компоненту a(ijk) с наибольшим абсолютным значением. Разумеется, алгоритм при этом усложняется, но без поиска осевого элемента невозможно, как правило, обойтись, если мы хотим иметь удовлетворительную точность и надежность вычислений. Если на некотором шаге исключения не удается найти отличный от нуля осевой элемент, то такая система уравнений называется сингулярной, т. е. она имеет не единственное решение.

Глава 4. Методы решения СЛАУ

75

Если же нет делителя, который существенно отличается от нуля, то такая система является плохо обусловленной.

Краткий анализ алгоритма показывает, что в самом внутреннем цикле операции

A[i, j] = A[i, j] − A[i, k] × A[k, j]

выполняются

(n 1)2 + (n 2)2 + . . . + 22 + 12 = 16(2n3 3n2 + n)

раз. То есть при решении системы линейных алгебраических уравнений методом Гаусса объем вычислений растет как третья степень числа порядка системы n.

4.2 Метод прогонки

Данный метод применяется в случае трехдиагональной матрицы A. В этом случае учитывается особенность структуры матрицы, а систему можно записать в виде:

 

 

aiyi1 + ciyi + biyi+1 = fi, a0 = bn

= 0,

i = 0.

. .n.

 

 

(4.3)

В развернутом виде это выглядит следующим образом:

 

 

 

 

c0

b0

0

0 . . .

0

0

 

y0

 

 

f0

 

 

01

a1

c1 b . . .

0

0

y1

f1

 

 

a

c

b

0 . . .

0

0

 

y

 

 

f

 

 

. . . . . . . . . . . . . . . . . . . . .

. . .

. . .

 

 

0 0 0

. . . an 1 cn 1 bn 1

 

 

 

 

 

 

 

 

yn 1

 

= fn 1

 

(4.4)

 

 

2

2 2

 

 

 

 

2

 

 

2

 

 

0 0 0

. . . 0

an

cn

 

 

 

 

 

 

 

 

yn

 

fn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Путем несложных манипуляций, в частности применив метод исключения Гаусса, систему можно преобразовать к виду:

 

1

α

 

0

0 . . .

0

 

0

 

y0

 

 

β0

 

 

 

0

1

0

 

α1

0 . . .

0

 

0

 

y1

 

 

β1

 

 

0

0

 

1

 

α . . . 0

 

0

y

 

β

 

 

. . . . . . . . . . . . . . . . . .

 

. . .

. . .

 

. . .

 

 

 

0

0

 

0

 

0 1

 

αn 1

 

 

 

 

 

 

 

 

 

 

 

. . .

 

yn 1

 

= βn 1

 

(4.5)

 

 

 

 

 

 

2

 

 

 

 

 

 

2

 

 

 

2

 

 

0

0

 

0

. . .

0 0

 

1

 

 

 

 

 

βn

 

 

 

 

 

yn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Однако данный процесс требует хранения всей матрицы A, что в случае матрицы большой размерности не всегда возможно. А учитывая, что матрица имеет трехдиагональный вид, то метод Гаусса большую часть времени будет выполнять операции с нулевыми элементами.

Но, допустим, матрица вида (4.5) получена, что нам это дает? Из нее получаем рекуррентные соотношения:

или

yi = αiyi+1 + βi, i = 0,

1, . . ., n 1

(4.6)

 

yi1 = αi1yi +

βi1,

(4.7)

76 РАЗДЕЛ II. Прикладной

Пока нам известны только α1 и β1 1 ≡ −b0/c0; β1 f0/c0), а α2, . . ., αn и β2, . . ., βn — пока неизвестны.

Подставив уравнение (4.7) в уравнение (4.3), получаем:

αii1yi + βi1) + ciyi + biyi+1 = fi, i = 1, . . ., n 1

Приведя подобные получаем:

y

 

 

 

bi

 

 

 

y

+

 

 

fi

 

aiβi 1

.

 

 

 

iαi 1

 

 

i

 

 

i

 

 

 

 

= −

 

+

 

 

 

+

i

1

i

 

i

 

a

 

 

c

 

 

i

1

 

a

α

 

 

 

c

 

 

 

 

 

 

 

 

 

 

 

 

 

Сравнив полученное уравнение с (4.6), обнаружим, что:

 

 

αi 1i

 

i

 

 

αi1ai

ci

 

αi

=

 

bi

 

 

;

βi

=

fi

αiβi 1

.

(4.8)

a

c

 

 

 

 

 

 

 

 

 

 

 

+ +

Таким образом, видим, что нет необходимости в преобразовании (4.4) к виду (4.5), так как все коэффициенты (4.8) можно получить, имея только α1, β1 и 3 одномерных массива размерности n каждый (или один двумерный, размерности 3×n). Соотношения, определяющие коэффициенты (4.8), называются формулами прямой прогонки.

После того как по рекуррентным соотношениям (4.8) найдем все значения прогоночных коэффициентов: (α2, β2), 3, β3), . . ., n1, βn1), переходим ко второму этапу, называемому — обратная прогонка.

Этот этап начинается с вычисления yn. Его значение находим, разрешив систему уравнений, составленную из уравнения с последними полученными прогоночными коэффициентами и последнего уравнения исходной системы:

 

y

=

α

y

+

β ;

 

 

 

 

 

fnn1 anynn11 nyncnn.1

 

=

 

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Разрешив систему относительно yn, получим:

anβn1 + fn

yn = cn + anαn1 .

Здесь все коэффициенты известны, следовательно, значение определено. Все остальные значения yi (i = n1, n2, . . ., 0) находим по рекуррентной формуле (4.6).

4.3 Итерационные методы решения СЛАУ

При изучении итерационных методов используются понятия нормы вектора и нормы матрицы. Рассмотрим основные виды норм. Если в пространстве векторов x = (x1, . . ., xn)T введена норма x , то согласованной с ней нормой в пространстве матриц A называют норму

A = sup Ax . x0 x

Глава 4. Методы решения СЛАУ

77

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

x = max xj

j

x 1 = ∑ xj

j

x 2 = ∑ x 2 = (x, x),

j

а согласованными с ними, нормами в пространстве матриц являются соответственно нормы:

A = max (∑ aij) ,

ij

A 1

= maxj

 

(j aij

) ,

 

i

A 2

= maxi

λAT A,

где λiAT A — собственные значения матрицы AT A.

4.3.1 Метод простых итераций

Суть метода состоит в последовательном выполнении следующих процедур.

1.Исходная задача A×x = b преобразуется к равносильному виду: x = c×x+d, где c = {cij} — квадратная матрица, d = d{di} — вектор, i, j = 1, . . ., n. Такое преобразование можно осуществить различными способами, однако при осуществлении преобразования следует помнить о том, что для обеспечения сходимости норма матрицы должна быть меньше единицы c < 1.

Например, систему:

1.02 × x1 0.15 × x2 = 2.7 0.8 × x1 + 1.05 × x2 = 4

можно записать в форме:

x1 = −0.02 × x1 + 0.15 × x2 + 2.7 x2 = −0.8 × x1 0.05 × x2 + 4

для которой c = max{0.17, 0.85} = 0.85 < 1.

2.Выбирается начальное приближение решения, обычно в качестве начального значения вектора решения берут вектор d, x(0) = d. И затем многократно выполняют действия по уточнению решения в соответствии с рекуррентной формулой:

x(k+1) = c × x(k) + d, k = 0, 1, . . ..

78

РАЗДЕЛ II. Прикладной

3. Итерации по уточнению решения заканчиваются при выполнении условия:

1

c c

 

x(k+1)

x(k)

<

ε,

 

 

 

 

где ε > 0 — заданная точность, которую необходимо достигнуть при решении задачи.

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

Метод простых итераций вычисления решения СЛАУ

ˆn количество неизвестных и уравнений системы

ˆc[n][n] матрица коэффициентов после преобразования

ˆd[n] вектор свободных членов после преобразования

ˆxk[n] вектор решения на шаге k

ˆxk1[n] вектор решения на шаге k + 1

ˆe точность

type

matrix=array[1..n, 1..n] of real; vect=array[1..n] of real;

function norm_matrix(var m: matrix): real;

{

Для каждого типа нормы определяется по своему

}

function norm_vect(var y: vect): real;

{

Для каждого типа нормы определяется по своему

}

var

. . .

i, j: integer; tmp, norm: real; t: vect;

begin

. . .

for i = 1 to n do xk1[i] = d[i];

repeat

for i = 1 to n do xk[i] = xk1[i]; for i = 1 to n do

begin

xk1[i] = 0;

for j = 1 to n do

Глава 4. Методы решения СЛАУ

79

xk1[i] = xk1[i] + c[i][j] xk[j]; xk1[i] = xk1[i] + d[i];

t[i] = xk1[i] − xk[i]; end;

tmp = norm_matrix(c);

norm = norm_vect(t) tmp/(1 tmp); until norm < e;

end.

4.3.2 Метод итераций

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

. . . . . . . . . . . . . . . . . . . . . . . . .

Пример . . . . . . . . . . . . . . . . . . . . . . . . .

Для демонстрации метода найдем собственное значение и соответствующий

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

1

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ему собственный вектор для матрицы

A

 

 

 

1

4

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

0.1.

 

 

 

 

2

1

 

3 , с точностью ε

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.

Положим начальное приближение X0

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.

Найдем следующее приближение:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X1

 

A X0

 

 

5

 

1

2

 

 

 

 

1

 

 

 

 

8

 

 

 

 

 

 

 

1

 

 

 

8, λ1

 

λ0

 

8 0.1.

 

 

 

 

2 1 3 1 6 , λ1

 

 

 

 

 

 

 

 

 

 

 

= × =

1

 

4

1

×

 

1

 

 

 

 

6

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

= =

 

 

 

− = >

 

 

3.

Найдем

следующее приближение:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X2

A

 

X1

 

 

 

5

1

 

2

 

 

 

 

8

 

 

 

 

 

 

58

 

 

 

λ2

 

8

 

 

 

 

 

 

7.25,

 

λ2

λ1

 

0.75

 

0.1.

 

 

 

2

1

 

3

 

6

 

 

 

40 ,

 

 

 

 

 

 

 

 

 

 

 

= × =

 

 

 

 

 

 

 

 

×

 

 

=

 

 

 

 

 

 

 

 

58

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

4

 

1

6

38

 

 

 

 

=

 

 

 

=

 

 

 

 

 

− =

 

 

>

 

4.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Продолжаем уточнение:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X3 A

X2

 

5

 

 

1

2

 

 

 

 

58

 

 

 

 

408

 

 

 

 

λ3

 

58

 

 

 

 

 

7.034, λ3

λ2

 

0.116 0.1.

2

 

 

1

3

 

 

40

 

274 ,

 

 

 

 

 

 

 

 

 

= × =

1

 

 

4

1

 

 

 

 

38

 

 

 

250

 

 

 

 

 

=

408

=

 

 

 

 

 

 

− =

 

 

>

 

 

 

 

 

 

 

× =

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Продолжаем уточнение:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

×

 

 

 

=

5

 

1

 

2

 

×

 

408

 

=

 

2838

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X4

A

X3

1

 

4

 

1

250

1682

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

 

3

 

274 1888 ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2838

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

λ4 =

 

=

6.9559,

 

 

λ4 − λ3

=

 

0.078

>

0.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

408

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

80 РАЗДЕЛ II. Прикладной

 

Заданная точность достигнута, поэтому можем взять в качестве собственного

 

 

 

 

 

 

 

 

2838

 

 

 

 

 

числа λ4

 

6.9559, а в качестве собственного вектора X4

 

1682

 

 

 

 

 

 

 

 

=

 

 

 

=

 

 

 

1

 

 

 

 

 

 

 

 

нашем случае

 

 

 

 

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

 

 

 

X

 

 

 

 

= 2838 ×

 

2838

 

 

 

1

 

 

 

 

 

1888 0.6652 .

 

 

 

 

 

 

 

×

1682

 

=

0.5927

 

 

 

 

 

 

 

 

. . . .

. . . .

. .

.

. .

. . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . . .

. . . . .

. .

. .

. . . . .

.

Шаблон программы, реализующей данный метод, представлен ниже.

Метод итераций, решения частичной проблемы собственных чисел

ˆn размерность матрицы

ˆc[n][n] матрица

ˆxk[n] собственный вектор на шаге k

ˆxk1[n] собственный вектор на шаге k + 1

ˆe точность

ˆlk собственное значение на k-ом шаге

ˆlk1 — собственное значение на k + 1-ом шаге

type

matrix=array[1..n, 1..n] of real; vect=array[1..n] of real;

const

n = 10;

procedure mult(var a: matrix; var x1, x0: vect); var

i, j: integer; begin

for i = 1 to n do begin

x1[i] = 0;

for j = 1 to n do

x1[i] = x1[i] + a[i][j] x0[j];

end; end; var

. . .

i, j: integer; t, lk, lk1: real;

begin

. . .

for i = 1 to n do xk[i] = 1;