Рома_Шелев_II
.pdfНижегородский государственный университет им. Н. И. Лобачевского
Радиофизический факультет Кафедра математики
Отчет по лабораторной работе:
Решение систем линейных алгебраических уравнений.
Квадратурные формулы. Численное интегрирование
вариант 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 = 2−N и точки 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