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

Рома_Шелев_II

.pdf
Скачиваний:
8
Добавлен:
27.03.2015
Размер:
118.26 Кб
Скачать

Нижегородский государственный университет им. Н. И. Лобачевского

Радиофизический факультет Кафедра математики

Отчет по лабораторной работе:

Решение систем линейных алгебраических уравнений.

Квадратурные формулы. Численное интегрирование

вариант 21

Выполнил:

студент 426 группы

Шелев Роман

Проверил: Кулинич Виктор Валентинович

Нижний Новгород 2012 год

Содержание

1

Постановка учебно-практической задачи

3

2

Описание алгоритма

3

 

2.1

Квадратурная формула трапеций (n=1) . . . . . . . . . . . . . . . . . . . . .

3

 

2.2

Рекуррентная квадратурная формула трапеций . . . . . . . . . . . . . . . . .

3

 

2.3

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

3

 

2.4

Метод минимальной невязки . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

 

2.5

Метод простой итерации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

3

Исследование применимости алгоритма

5

 

3.1

Квадратурная формула трапеций . . . . . . . . . . . . . . . . . . . . . . . . .

5

 

3.2

Метод простой итерации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

4

Результаты расчетов

6

 

4.1

Графики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

5

Приложение

9

 

5.1

Вычисление интеграла по формуле трапеции . . . . . . . . . . . . . . . . . .

9

 

5.2

Метод минимальной невязки . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

 

5.3

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

10

 

5.4

Метод простой итерации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

5.5вспомогательная программа GetA. c . . . . . . . . . . . . . . . . . . . . . . . 12

5.6Функции на Matlab для построения графиков . . . . . . . . . . . . . . . . . . 12

6 Заключение

13

Список Литературы

13

2

1Постановка учебно-практической задачи

Решить для n=10000 методом прогонки и методом минимальной невязки систему уравнений с относительной точностью 0.001.

xi−1

 

 

 

 

= 0.5x2

 

 

 

 

 

(i2 + 5)xi + (i + 3)xi+1

 

x10inf

 

i2 t2

t2))dt, i =

 

 

 

=

(cos(2t)exp(

2, n 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xn 1 + 4

 

 

 

 

xn = 0.2

 

 

 

 

 

 

 

 

 

 

 

 

 

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

2Описание алгоритма

2.1Квадратурная формула трапеций (n=1)

k

 

 

1

β α

 

Ck(1)f(xk(1)) =

2

(f(α) + f(β))

=0

 

 

 

2.2Рекуррентная квадратурная формула трапеций

Определим T (0) =

 

h((f( )+f( ))

, h = β α.

 

 

 

2

 

 

 

 

Затем для каждого N > 1 определим T (N) = T (f, h), где T (f, h) - формула трапеций с

шагом h =

N

. Тогда

 

 

 

 

 

 

 

 

2

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T (N 1)

M

 

 

 

 

 

 

T (N) =

+ h

f(x

2k−1

), N = 1, 2, ...

 

 

 

 

 

 

2

=1

 

 

 

 

 

 

 

 

 

 

 

 

где h = 2N и точки xk = α + kh делят интервал [α, β] на 2N = 2M точек.

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

Важным классом систем являются системы вида:

d1x1 + c1x2 = b1

aixi−1 + dixi + cixi+1 = bi, i = 2, n 1 anxn−1 + dnxn = bn

с трехдиагональной матрицей

 

 

 

 

 

d1

c1

0

0 ... ...

0

 

0

 

 

 

d2

c2

0 ... ...

0

 

0

 

a2

 

 

A = ... ... ... ... ... ... ...

 

...

 

 

0

0 ...

...

0

a

 

d

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n−1

n−1

 

n−1

 

 

 

 

 

 

 

 

 

 

 

0

0 ...

...

0

 

0

an

dn

 

 

 

 

Такие системы возникают при решении краевых задач дифференциальных уравнений разностными методами. Специальный вид матрицы А позволяет применить идею исключения неизвестных в системе следующим образом. Первое уравнение системы дает соотношение между x1 и x2, в силу которого второе уравнение даетсоотношение между x2 и

3

x3. Следовательно третье уравнение дает соотношение между x3 и x4 и т.д. Запишем связь

 

 

 

 

 

 

 

 

 

 

 

 

 

между переменными xi−1 и xi

в виде xi−1 = Lixi + Mi, i = 2, n.

 

 

 

 

 

 

 

 

c1

, M2

 

b1

Из первого уравнения системы следует, что L2 = d1

= d1 .

 

 

 

 

ci

bi−Miai

 

 

 

 

Получаем, что xi =

 

xi+1 + aiLi+di ;

 

 

 

 

aiLi+di

 

 

 

 

 

ci

 

bi−Miai

 

 

 

 

 

 

 

Li+1 =

aiLi+di

, Mi+1

= aiLi+di

, i = 2, n 1.

 

 

 

 

Вычисляем коэффициенты Li, Mi(i = 2, n), процесс нахождения которых называется прямым ходом метода прогонки.

Определяем xn по формуле xn = bn−Mnan , а затем по полученной ранее формуле вычисля-

 

 

 

Lnan+dn

 

 

 

 

ем xn−1, xn−2, ..., x1 (обратный ход метода прогонки).

Для нашей системы получим:

 

 

 

 

 

x

 

=

i + 3

x

 

+

bi Mi

 

i

 

Li (i2 + 5)

 

i+1

 

Li (i2 + 5)

1 + sin(i)2 Li+1 = Li (i2 + 5)

bi Mi

Mi+1 = Li (i2 + 5), i = 2, n 1

inf

bi = (cos(2t)exp( i2 t2 t2))dt

0

2.4Метод минимальной невязки

Вданном методе:

Hk = τkE, Tk = E τkA,

В методе минимальных невязок итерационный параметр τk выбирается из условия минимума нормы невязки на (k + 1)-ом шаге и имеет вид

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

τk =

 

(Ark, rk)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(Ark, Ark)

 

 

Отсюда следует:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xk+1 = (E τkA)xk + τkEb

или в координатной форме

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xk+1 = (τka11

 

1)xk

 

τka12xk

 

... τka1nxk +τkb1

 

 

 

k+1

1

 

 

k

 

 

1

k

2

 

k

 

 

n

 

k

 

 

x2

= τka21x1

(τka22 1)x2 τka12x2 ... τka2nxn+τkb2

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k+1

=

 

 

k

 

 

 

 

k

 

 

 

 

 

 

 

 

k

+τkbn

 

 

 

xn

 

τkan1x1

τkan2x2 ...

(τkann 1)xn

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xk+1

 

 

 

 

 

 

 

 

 

 

 

x1k+1 = 1

 

 

 

 

 

 

 

 

 

 

 

 

=

 

τ

xk

 

τ

 

(i2 + 5 + 1)xk

k

(τ

 

(i + 3)xk

+ τ b

, i = 2, n

i

 

k

i−1

+ ( k

 

 

 

k+1

 

i

 

k

 

 

 

i+1

 

k i

 

 

 

 

 

 

 

 

 

 

 

 

 

xn

= 0.1xn

1 + 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bi

=

 

 

inf

(cos(2t)exp( i

2

t

2

2

))dt

 

 

 

 

 

 

 

 

 

0

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

2.5Метод простой итерации

Пусть система линейных алгебраических уравнений (СЛАУ) задана в виде:

 

a11.........................................x1

+ a12x2 + + a1nxn = b1...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+ a22x2 + + a2nxn = b2

 

 

 

 

a21x1

 

 

 

 

 

 

+ an2x2 + + annxn = bn

 

 

 

 

an1x1

 

 

 

 

 

Приведем ее к виду:

a11 xn + a11

 

 

x1

= a11 x2

a11 x3

 

 

 

a12

a13

 

 

a1n

 

b1

 

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

 

 

 

 

 

 

 

 

 

 

 

x2

= a22 x1

a22 x3

a22 xn + a22

 

 

 

 

 

a21

a23

 

 

a2n

 

b2

 

 

 

an1

an3

i

ann 1

 

 

bn

i

 

 

 

 

 

 

xn =

ann x2 ann x3 ...

ann 1

xn−1

+

ann

 

 

В полученной системе -ое уравнение представляет собой -ое уравнение исходной си-

стемы, разрешенной относительно i-й перемнной. Рабочие формулы метода простой итерации имеют вид:

 

 

 

 

k+1

 

 

 

a12

 

 

k

 

 

a13

 

k

 

 

 

 

 

a1n

 

k

 

 

 

b1

 

 

 

 

 

 

n

a

xk

 

 

b1

 

 

 

x

=

 

 

x

 

 

x

 

 

...

 

 

x

 

 

 

 

 

 

 

 

 

1j

 

j

 

+

 

 

1

 

 

a11

2

a11

3

 

a11

n

+ a11

 

= j=2

a11

a11

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

k+1

 

 

 

a21

k

 

 

 

a23 k

 

 

 

 

 

a2n k

 

 

 

b2

 

 

 

 

n

 

 

 

 

a2jxj

 

 

b2

 

 

x2

 

 

= a22 x1

a22 x3

... a22 xn

+ a22 = j=1;j̸=2

a22

 

+ a22

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

an1

 

 

 

an3

 

 

 

 

 

 

 

 

 

 

ann 1 k

 

 

 

 

 

bn

 

 

 

 

 

 

 

 

 

 

k

 

 

 

bn

 

 

 

 

 

 

k+1

 

k

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

n−1 anjxj

 

 

 

, k = 0, 1, 2, ...

xn

= ann x2

ann x3

 

... ann 1 xn−1

 

 

+ ann

 

 

j=1

 

 

ann

+ ann

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Более коротко можно записать:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

aijxjk

 

 

 

 

 

bi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xik+1

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+

 

, i = 1, n, k = 0, 1, 2, ...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

aii

 

aii

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=1;j=i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j

̸

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

применив к нашей системе получим:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k+1

 

 

 

 

 

1

 

 

k

 

 

 

 

i + 3

 

 

k

 

 

 

bi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xi

 

 

 

=

 

xi−1

+

 

xi+1

+

 

, i = 1, n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i2 + 5

i2 + 5

i2 + 5

 

 

 

 

 

inf

bi = (cos(2t)exp( i2 t2 t2))dt

0

3Исследование применимости алгоритма

3.1Квадратурная формула трапеций

Исследуем применимость квадратурной формулы трапеций к интегралу

inf

(cos(2t)exp( i2 t2 t2))dt

0

Она непрерывна на отрезке интегрирования вместе с пятой производной. Очевидно, что

fn(x) ! f(x), при n ! 1,

т. е. при увеличении числа узлов сетки ωn значение интеграла будет стремиться к реальному значению. Соответственно, для каждого значения i можно оценить значение остаточного члена.

Точность вычисления контролировалась по правилу Рунге (т.е. сравнивались значения, полученные при сетке с шагом h и h/2).

5

В соответствии с поставленной задачей, необходимо было вычислить значения инте-

грала

0 inf (cos(2t)exp( i2 t2 t2))dt

 

с относительной точностью 0.01. Для обеспечения необходимой точности необходимо выполнение неравенства:

jjbk bk+1jj < ϵ,

bk+1

где ϵ - относительная точность вычисления интеграла (в нашем случае 0.01).

3.2Метод простой итерации

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

что итерация xk является с точностью ϵ приближенным решением системы, если

jjxk x0jj ϵ

где x0 — точное решение системы. При этом норма jjxjj вектора x = fx1, ..., xng 2 Rn равна jjxjj= max1≤i≤n jxij, ϵ - абсолютная погрешность.

Итерационный метод называется стационарным, если матрица Hk не зависит от номера шага k. В противном случае метод называется нестационарным.Для того, чтобы стационарный итерационный процесс сходился, достаточно, чтобы для какой-либо одной нормы матрицы T выполнялось неравенство

jjT jj < 1.

Исследуем сходимость системы линейных уравнений. Можно оценить норму матрицы T по формуле

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

n

 

 

T

jj =

max

j

a

ijj

jj

1

i

n

 

 

 

 

 

=1

 

 

При i = 1, n и j = 1, n . В каждой строке матрицы Т находится два элемента с коэф-

фициентами

1

и

i+3

.Оценим норму матрицы:

 

 

 

 

 

2

2

 

 

 

 

 

 

i +5

 

i +5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

T

 

max (

 

 

1

 

+

 

i + 3

 

) =

 

 

 

 

jj

jj =

ji2

+ 5j

ji2 + 5j

 

 

 

 

 

1

i

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

max i + 4

1≤i≤n i2 + 5

построив график функции y = xx2+4+5 мы видим, что максимальное значение он принимает на x = 0.5 равное 0,86, а на бесконечности стремиться к 0.

отсюда следует, что jjT jj < 1, что говорит о сходимости алгоритма.

В данной лабораторной работе требуется решить систему с относительной погрешностью не более 0.001. В качестве критерия окончания итерационного процесса правило Рунге:

jjxk xk−1jj < ϵ, jjxkjj

где ϵ - относительная точность решения системы линейных уравнений.

4Результаты расчетов

4.1Графики

6

4

 

 

 

 

3.5

 

 

 

 

3

 

 

 

 

2.5

 

 

 

 

2

 

 

 

 

1.5

 

 

 

 

1

 

 

 

 

0.5

 

 

 

 

0

5

10

15

20

0

Рис. 1: Подсчет интегралов при n = 20

4

3.5

3

2.5

2

1.5

1

0.5

0

0

2000

4000

6000

8000

10000

Рис. 2: Подсчет интегралов при n = 10000

7

4

 

 

 

 

3.5

 

 

 

 

3

 

 

 

 

2.5

 

 

 

 

2

 

 

 

 

1.5

 

 

 

 

1

 

 

 

 

0.5

 

 

 

 

0

5

10

15

20

0

Рис. 3: Решение линейной системы при n = 20

4

3.5

3

2.5

2

1.5

1

0.5

0

0

2000

4000

6000

8000

10000

Рис. 4: Решение линейной системы при n = 10000

8

5Приложение

Вприложениях приводятся исходные тексты программы. Вычисление интеграла, метод прогонки и метод Зейделя реализованы на языке С. Визуализация программы выполнена на языке Matlab.

5.1Вычисление интеграла по формуле трапеции

#d e f i n e

N 20

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#d e f i n e

Accuracy

0 .0 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/

C a l c u l a t e I n t e g r a l

Of

P a r t i t i o n

(

IOP

)

s i z e

/

 

 

 

/ ==================================== /

 

 

 

 

 

 

double

IOP( double

P

,

i n t

I

)

{

 

 

 

 

 

 

 

I and T /

 

 

/ C a l c u l a t e

UnderIntegral

Function

(

UIF

)

by

 

 

/ =================================================== /

 

 

double UIF(

i n t

I

,

double T )

 

 

 

 

 

 

 

 

 

 

{ return 1. cos ( 2 . T )

T

T

T

T

 

 

 

 

exp( 1.

( double )

(

I

I

)

)

; } ;

 

 

double Delta = 3 . / P ;

 

 

 

 

 

 

 

 

 

 

 

 

double Sum = 0 .

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

double T = 0 . ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

while ( T <

3 .

)

{

(

 

 

 

 

 

 

 

 

 

 

 

 

 

Sum += Delta

UIF(

I

, T

)

+ UIF(

I ,

T +

Delta ) ) / 2 . ;

 

 

T += Delta

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

;

return Sum

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

/

F i l l

B array

by

v a l u e s

and

i n t e g r a l s

/

 

 

 

 

 

 

/ ==================================== /

 

 

 

 

 

 

double

CalcBElement (

i n t

I

)

{

 

 

 

 

 

 

 

 

 

 

 

double P a r t i t i o n = 7 . ;

 

 

 

 

 

 

 

 

 

 

 

 

double Sum1 , Sum2 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

Sum1 = IOP(

P a r t i t i o n

1 .

,

I )

;

 

 

 

 

 

 

 

 

Sum2 = IOP(

P a r t i t i o n

,

I

) ;

 

 

 

 

 

 

 

 

 

while

( f a b s (

Sum2 Sum1 ) > Accuracy

)

{

 

 

Sum1 = Sum2 ;

 

 

 

 

 

 

P a r t i t i o n += 1 . ;

 

 

 

 

} ;

 

Sum2 = IOP( pow(

2 .

, P a r t i t i o n

)

, I ) ;

 

Sum2

;

 

 

 

 

 

 

return

 

 

 

 

 

 

} ;

 

 

 

 

 

 

 

 

 

 

/ F i l l

B array

by

v a l u e s and

i n t e g r a l s /

 

 

/ ==================================== /

 

 

void CalcB (

double

B ) {

 

 

 

 

i n t

I

;

 

 

 

 

 

 

 

 

B[

0 ]

=

0 .

;

 

 

 

 

 

 

B[

N 1

] =

4 .

;

 

 

 

 

for

(

I = 1

;

I

< N 1

;

I++ ) B[ I ]

=

CalcBElement ( I )

9

/ ( ( ( double ) ( I I ) + 5 . ) ) ;

} ;

5.2Метод минимальной невязки

include <stdio.h> include <math.h> include "Trapezy.c"include "GetA.c" define N 20 define Accuracy 0.01

double Delta ; double Tau = 1. ; // Tau parametr of system double X[ N ] ; // Solution of system double R[ N ] ; // R array double AR[ N ] ;// A*R array double B[ N ] ; // Integral array

void CalcR() int I , J ;

R[ 0 ] = GetA( 1 , 1 ) * X[ 0 ] + GetA( 1 , 2 ) * X[ 1 ] - B[ 0 ] ; R[ N - 1 ] = GetA( N , N ) * X[ N - 1 ] - B[ N - 1 ] ; for ( I = 1 ; I < N - 1 ; I++ ) R[ I ] = 0. ; for ( J = I - 1 ; J < I + 2 ; J++ ) R[ I ] += GetA( I + 1 , J + 1 ) * X[ J ] ; R[ I ] -= B[ I ] ; ; ;

void CalcAR() int I , J ;

AR[ 0 ] = GetA( 1 , 1 ) * R[ 0 ] + GetA( 1 , 2 ) * R[ 1 ] ; AR[ N - 1 ] = GetA( N , N ) * R[ N - 1 ] ; for ( I = 1 ; I < N - 1 ; I++ ) AR[ I ] = 0. ; for ( J = I - 1 ; J < I + 2 ; J++ ) AR[ I ] += GetA( I + 1 , J + 1 ) * R[ J ] ; ;

;

void CalcTau() int I ; double Ch = 0. , Zn = 0. ;

for ( I = 0 ; I < N ; I++ ) Ch += AR[ I ] * R[ I ] ; Zn += AR[ I ] * AR[ I ] ; ; Tau = Ch / Zn ; ;

void CalcX() double NewX[ N ] ; int I , J ; NewX[ 0 ] = ( 1. - Tau * GetA( 1 , 1 ) ) * X[ 0 ] - Tau * GetA( 1 , 2 ) * X[ 1 ] + Tau * B[ 0 ] ; NewX[ N - 1 ] = ( 1. - Tau * GetA( N , N ) ) * X[ N - 1 ] + Tau * B[ N - 1 ] ; for ( I = 1 ; I < N - 1 ; I++ ) NewX[ I ] = -Tau * GetA( I + 1 , I ) * X[ I - 1 ] + ( 1. - Tau * GetA( I + 1 , I + 1 ) ) * X[ I ] - Tau * GetA( I + 1 , I + 2 )

* X[ I + 1 ] + Tau * B[ I ] ; ; Delta = 0. ; for ( I = 0 ; I < N ; I++ )

if( fabs( NewX[ I ] - X[

I ] ) > Delta ) Delta = fabs( NewX[ I ] - X[ I ] ) ; X[ I ] = NewX[ I ] ;

; ;

/* Functions to out Solution */ /* ======================= */ void PrintX() int I ; for ( I = 0 ; I < N ; I++ ) printf( "

int main() int I = 0 ;

CalcB( B ) ; for ( I = 0 ; I < N ; I++ ) X[ I ] = 1. ;

do CalcR() ; CalcAR() ; CalcTau() ; CalcX() ; while ( Delta > 0.001 ) ; PrintX() ; return 0 ; ;

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

#i n c l u d e <s t d i o . h>

#i n c l u d e

<math . h>

#i n c l u d e " Trapezy . c "

#i n c l u d e

"GetA . c "

#d e f i n e

N 20

#d e f i n e

Accuracy 0 .0 1

double Delta ;

double X[ N ]

; // S o l u t i o n o f system

double B[ N ] ;

double M[ N ]

;

double L [ N ] ;

void CalcX ( )

{

i n t I ;

 

10