Решение системы уравнений методом Зейделя
Предполагая, что aii ≠ 0 разрешим новое уравнение системы (1) относительно x1, второе – относительно x2,…, n-ое уравнение – относительно xn. В результате получим:
x1 = β1 - α12x2 - α13x3 - ... - α1nxn
x2 = β2 - α21x1 - α23x3 - ... - α2nxn
xn = βn - αn1xn - αn3x3 - ... - αnn-1xn-1
где βi = bi/aii; αij = aij/aii при i ≠ j; αii = 0
Известно начальное приближение: x0 = (x01, x02, ..., x0n).
Основная идея заключается в том, что при вычислении (k+1)-го приближения неизвестной xi учитываются уже вычисленные ранее (k+1) - приближение неизвестных x1, x2, ..., xn.
Итерационная схема имеет вид:
xk+11 = β1 - ∑α1jxkj
xk+12 = β2 - α21xk+11 - ∑α2jxkj
xk+1i = βi - ∑αijxk+11 - ∑α2jxkj
Приведем к виду:
x1 = 0.14+0.08x2+0.296x3
x2 = 0.4815+0.1852x1+0.3287x3
x3 = -0.3506-0.6118x1-0.2935x2
Покажем вычисления на примере нескольких итераций.
N = 1
x1 = 0.14 - 0 • 0.08 - 0 • 0.296 = 0.14
x2 = 0.4815 - 0.14 • 0.1852 - 0 • 0.3287 = 0.4556
x3 = -0.3506 - 0.14 • (-0.6118) - 0.4556 • (-0.2935) = -0.1312
N = 2
x1 = 0.14 - 0.4556 • 0.08 - (-0.1312) • 0.296 = 0.1424
x2 = 0.4815 - 0.1424 • 0.1852 - (-0.1312) • 0.3287 = 0.4982
x3 = -0.3506 - 0.1424 • (-0.6118) - 0.4982 • (-0.2935) = -0.1172
N = 3
x1 = 0.14 - 0.4982 • 0.08 - (-0.1172) • 0.296 = 0.1348
x2 = 0.4815 - 0.1348 • 0.1852 - (-0.1172) • 0.3287 = 0.495
x3 = -0.3506 - 0.1348 • (-0.6118) - 0.495 • (-0.2935) = -0.1228
Остальные расчеты сведем в таблицу.
N | x1 | x2 | x3 | e1 | e2 | e3 |
0.14 | 0.456 | -0.131 | 0.14 | 0.456 | 0.131 | |
0.142 | 0.498 | -0.117 | 0.0024 | 0.0427 | -0.014 | |
0.135 | 0.495 | -0.123 | -0.0076 | -0.0032 | 0.0056 | |
0.137 | 0.497 | -0.121 | 0.0019 | 0.0015 | -0.0016 | |
0.136 | 0.496 | -0.122 | -0.0006 | -0.0004 | 0.0005 |
Таким образом, мы получаем систему:
Подставим полученные значения С в уравнение
Ѱ(Xi)=C1* Ѱ1(X)+C2* Ѱ2(X)+ C3* Ѱ3(X)
Ѱ(X1)=-0,0886-0,403+0,535=0,321
Ѱ(X2)=0,313
Ѱ(X3)=0,335
Ѱ(X4)=-0,037
Ѱ(X5)=-0,030
Подставим значения Ѱ(Xi) в уравнение Ϭ=y(Xi)- Ѱ(Xi) и найдем максимальное отклонение (значение аппроксимации)
Ϭ1=-0,62
Ϭ2=0,18
Ϭ3=-0,09
Ϭ4=-0,110
Ϭ5=0,061
Ϭmax=0,18 при X2=-0,30
Схема алгоритмов
1. Схема алгоритма подпрограммы выбора функции (vibor):
Начало
Ввод ( k, x )
нетда
k=1
да
k=2Ввод ( sinx )
нет
Ввод ( 1 ) Ввод ( cosx )
|
2. Схема алгоритма подпрограммы расчёта коэффициентов (аb):
m = 3
n = 5
Начало
Ввод ( x[n],[y] )
i = 0; i < m, i++ // цикл по строкам для
расчёта матрицы a и вектора b
j = 0, j < m, j++ // цикл по столбцам для расчёта
матрицы a
Sum = 0 // исходное значение переменной
Sum
J = 0, J < n, J++ // цикл расчёта элементов
матрицы а
Sum = Sum+vibor (( i, x [J] ) * vibor ( j, x [J] ))
J // конец цикла J
a [i] [j] = Sum // присваивание ij элементу его
значения Sum
j // конец цикла j
Sum = 0//исходное значение переменной
Sum
J = 0, J < n, J++//цикл расчёта элементов вектора
b
Sum = Sum + vibor ( i,x [J] * y [J])
J // конец цикла J
b [i] = Sum //присваивание i элементу его
значения Sum
i//конец цикла i
Вывод (а [m] [m], b [m])
Конец
3. Схема алгоритма подпрограммы вывода матрицы (vivodmatr):
Начало
Ввод (а [m] [m])
i = 0, i < m, i++ // цикл по строкам для вывода
элементов матрицы а
j = 0, j < m, j++ // цикл по столбцам для вывода
элементов матрицы а
Вывод (а [i] [j] )
j // конец цикла j
i // конец цикла i
Конец
4. Схема алгоритма вывода вектора (vivodvek):
Начало
Ввод ( b [m] )
i = 0, i < m, i++ // цикл по строкам для
вывода элементов вектора b
Вывод ( b [i] )
i
Конец
5. Схема алгоритма подпрограммы метода Зейделя (Zeidel):
Начало
// Прямой ход
Ввод ( A,X0,B, eps,N ) // цикл исключения
переменной с номером i
M=1(1)N
|
6. Подпрограмма расчёта f [i], g [i] и вывода результатов в виде таблицы (tabl):
m = 5
n = 5
Начало
Ввод ( x [n], y [n], x [m], g [n] )
// цикл расчёта
i = 0, i < n, i++ f [i], g [i] и вывода
таблицы результатов
f [i] = c [o] + c [1] * x [i] + c [2] * x [i] * x [i] //считаю найденную
аппроксимирующую
функцию в точках
g [i] = y [i] – f [i] // считаем погреш-
ность аппроксимации
Вывод ( x [i], y [i], f [i], g [i] )
i // конец цикла i
Конец
7. Подпрограмма расчёта и вывода z (approksi):
Начало
Ввод ( g [n] )
//начальное значение
z = 0 качества аппроксимации
//цикл расчёта качества
i = 0, i < n, i++ аппроксимации
//качество аппроксимации
z = z + g [i] *g [i]равно сумме квадратов
погрешностей аппроксимац.
i
Вывод ( z )
Конец
8. Подпрограмма поиска и вывода максимального отклонения по модулю ( otklonenie):
n = 5
Начало
Ввод ( G [n], x [n] )
// пусть первая погрешность
g = | g [0] | аппроксимации максимальна
по модулю
max = 0
// цикл поиска максимального
по модулю отклонения
i = 0, i < n, i++ // если текущее отклонение
больше максимального
да
| G [i] | > g
// текущее
G = | g [i] | отклонение
нетстановится
max = i максимальным
i // конец цикла i
Вывод ( z )
Конец
9. Схема алгоритма основной программы:
Начало
// цикл ввода исходных
i = 0, i < n, i++ значений x и y
Ввод x [i]
Ввод y [i]
i // конец цикла i
// расчёт коэффициента
аb ( x, y, a, b ) нормальных уравнений
(матрицы a и вектора b)
vivodmatr ( a ) // вывод матрицы a
// вывод вектора b
vivodvek ( b)
gauss ( a, b, c) // решение СЛУ (c1, c2, c3)
vivod c ( c ) // вывод c1, c2, c3
Вывод ( f ) // вывод искомой
аппроксимирующей
функции
// вывод результатов в
tabl ( x, y, c, g ) таблице
// расчёт и вывод качества
approksi ( g ) аппроксимации
// расчёт и вывод
otklonenie ( g, x ) максимального по модулю
отклонения
Конец
10. Вывод значений с:
m = 3
Начало
i = 0 (i), i < m, i++
Вывод ( с [i] )
i
Конец