«Rezolvarea Numerică A Sistemelor De Ecuaţii » Предмет: Metode si modele de calcul
«Rezolvarea Numerică A Sistemelor De Ecuaţii » Предмет: Metode si modele de calcul
Лабораторная работа №2
Тема: «REZOLVAREA NUMERICĂ A SISTEMELOR DE ECUAŢII
LINIARE.»
Предмет: Metode si modele de calcul
КИШИНЕВ 2020
Цель работы:
2) Să se determine numărul de iteraţii necesare pentru aproximarea soluţiei sistemului cu eroarea dată ε. Să
se compare rezultatele.
Вариант №8:
Тогда:
17 17 17 17 √ 85
l1,12= ⇒l1,1=√ =√ =√ =
5 5 5 5 5
7
7
7 −1 10 7 √ 85
l1.1 l2.1= ⇒=>l2.1= =>l4.1= 10 = =
10 5 √ 85 170
l1.1
5
1
1
1 5 √ 85
l1.1 l3.1= =>l3.1= 5 = =
5 √ 85 5
l1.1
5
−1
−1
−1 5 −√ 85
l1.1 l3.1= =>l4.1= 5 = =
5 √ 85 5
l1.1
5
51 51 51 7 √ 85 2 337 5729
l2.12+l2.22=
10
=>l2.2=
√10
−l 2. 12=
√
10
−(
170
)=
68
=
√ √
34
3 3 √ 85 7 √ 85
−l 3.1l 2.1 − ∗( )
3 10 10 85 170 44 √ 5729
l2.1 l3.1+l2.2 l3.2= =>l3.2= = =
10 l 2.2 √ 5729 28645
34
1 1 −√ 85 7 √ 85
−l 4.1 l2.1 − ∗( )
1 2 2 85 170 92 √ 5729
l2.1 l4.1+l2.2 l4.2= =>l4.2= = =
2 l 2.2 √ 5729 28645
34
19
l3.12+l3.22+l3.32= =>
5
2 2
19 19 √ 85 + 44 √5729 ) ¿= 31802 = √ 10717274
l3.3=
5 √
−( l3. 12+l 3. 22 )=
5 √ ( )
−(
5 28645 √ 8425 1685
−2
l3.1 l4.1+l3.2 l4.2+l3.3 l4.3= =>
5
−2 −√ 85 √ 85 92 √5729
−2
l4.3= 5
−( l 4.1 l3.1+l 4.2 l3.2 )
=
5
−
85
∗ (
85
+ ( )(
28645
=
))
−3509 √ 10717274
l 3.3 √ 10717274 53586370
1685
47
l4.12+l4.22+l4.32 +l4.42= =¿
10
47 47 −√ 85 2 −3509 √ 10717274 2
l4.4=
√ 10 √
−( l 4.12 +l 4.22 +l 4.32 )=
10
−¿((
85
¿ ¿ +¿ +(
53586370
¿ ¿ )=
364386 28970508930
=
√ 79505
=
√79505
Тогда:
L=¿
Исходный код:
#include <conio.h>
#include <math.h>
#include <iostream>
#include <locale>
using namespace std;
int main()
{
int n=4;
setlocale(LC_ALL, "RUS");
cout.setf(ios::fixed);
cout.precision(3);
float A[n][n]={
{9.2, 1.1, 0.6, -0.6},
{1.1, 15.3, -1.2, 0.3},
{0.6, -1.2, 9.6, 0.7},
{-0.6, 0.3, 0.7, 12.6}
};
‖x (n +1)−x (n )‖<ε
Покажем вычисления на примере нескольких итераций.
N=1
x1=1.098 - 0*0.12 - 0*0.0652 - 0*(-0.0652)=1.098
x2=-1.196 - 0*0.0719 - 0*(-0.0784) - 0*0.0196=-1.196
x3=1.115 - 0*0.0625 - 0*(-0.125) - 0*0.0729=1.115
x4=0.802 - 0*(-0.0476) - 0*0.0238 - 0*0.0556=0.802
N=2
x1=1.098 - (-1.196)*0.12 - 1.115*0.0652 - 0.802*(-0.0652)=1.22
x2=-1.196 - 1.098*0.0719 - 1.115*(-0.0784) - 0.802*0.0196=-1.203
x3=1.115 - 1.098*0.0625 - (-1.196)*(-0.125) - 0.802*0.0729=0.838
x4=0.802 - 1.098*(-0.0476) - (-1.196)*0.0238 - 1.115*0.0556=0.82
N=3
x1=1.098 - (-1.203)*0.12 - 0.838*0.0652 - 0.82*(-0.0652)=1.241
x2=-1.196 - 1.22*0.0719 - 0.838*(-0.0784) - 0.82*0.0196=-1.234
x3=1.115 - 1.22*0.0625 - (-1.203)*(-0.125) - 0.82*0.0729=0.828
x4=0.802 - 1.22*(-0.0476) - (-1.203)*0.0238 - 0.838*0.0556=0.842
Исходный код:
#include <iostream>
#include <cmath>
#include <locale>
int main()
{
setlocale(LC_ALL, "RUS");
cout.setf(ios::fixed);
cout.precision(3);
double a[4][4] = {
{9.2, 1.1, 0.6, -0.6},
{1.1, 15.3, -1.2, 0.3},
{0.6, -1.2, 9.6, 0.7},
{-0.6, 0.3, 0.7, 12.6}
};
do{
xc[0] = x[0];
xc[1] = x[1];
xc[2] = x[2];
xc[3] = x[3];
cout << i - 1 << " èòåð) x1 = " << x[0] << ", x2 = " << x[1] << ", x3 = " << x[2] << ", x4 = " << x[3]
<< endl;
i++;
++n;
}
while (c[0] > eps && c[1] > eps && c[2] > eps && c[3] > eps);
Результат программы:
3Метод. Итерационный метод Гаусса-Зейделя с погрешностью ꜫ=10-3 и
ꜫ=10-5.
Метод Гаусса — Зейделя (метод Зейделя, процесс Либмана, метод последовательных замещений) —
является классическим итерационным методом решения системы линейных уравнений.
Метод Гаусса – Зейделя - это итерационный метод решения квадратной системы из n линейных
уравнений с неизвестным x . Он определяется итерацией где это к е приближение или итерация
является следующим или K +-итерация , а матрица разлагаются в нижнюю треугольную
компоненту , а в строго верхнем треугольный компоненте.
Исходный код программы: #include <iostream>
#include <cmath>
// Условие окончания
double norm = 0;
int i = 0;
while (eps != 1)
i++;
eps *= 10;
return x;
}
bool diagonal(double a[10][10], int n)
int i, j, k = 1;
double sum;
sum = 0;
sum -= a[i][i];
k = 0;
cout << a[i][i] << " < " << sum << endl;
else
cout << a[i][i] << " > " << sum << endl;
return (k == 1);
int main()
setlocale(LC_ALL, "RUS");
int n, i, j, m = 0;
int method;
cin >> n;
cout << "A[" << i << "][" << j << "] = ";
cout << "Введите вектор свободных членов: " << endl << endl;
x[i] = 1;
if (diagonal(a, n)) {
do
double var = 0;
m++;
for (i = 0; i < n; i++) cout << "x" << i + 1 << " = " << okr(x[i], eps) << "" << endl;
else {
return 0;
}