#define N 5
#define MLI 30
double E = 0.0001;
void b(double alfa[N][N], double beta[N]);
void c(double alfa[N][N], double beta[N]);
int main()
{
double alfa[N][N], beta[N];
b(alfa, beta);
c(alfa, beta);
}
void b(double alfa[N][N], double beta[N])
{
double A[N][N] = { { 10, 1, 1, 1, 2 }, { 3, 20, 4, 2, 1 }, { 5, 1, 40, 9, 5 }, { 3, 0, 1, 10, 1 }, { 6, 2, 1, 1, 20 } };
double B[N] = { 15, 30, 60, 15, 30 };
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (i == j)
{
if (alfa[i][j] == 0)
{
std::cout << "Dzielenie przez ZERO/n";
system("Pause");
return;
}else{
beta[i] = B[i] / A[i][i];
alfa[i][j] = 0;
}
}
else if (A[i][i]!=0)
{
alfa[i][j] = -A[i][j] / A[i][i];
}
}
}
}
void c(double alfa[N][N], double beta[N])
{
int licznik_iteracji = 0;
double *Xnowy = beta;
double *Xstary;
double norma = 0;
do{
Xstary = Xnowy;
licznik_iteracji++;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < i-1; j++)
{
Xnowy[i] += Xnowy[j] * alfa[i][j];
}
for (int j = i; j < N; j++)
{
Xnowy[i] += alfa[i][j] * Xstary[j];
}
Xnowy[i] += Xstary[i];
for (i = 0; i < N; i++)
{
if (abs(Xnowy[i] - Xstary[i])>norma)
{
norma = abs(Xnowy[i] - Xstary[i]);
}
}
}
} while (norma > E && MLI < licznik_iteracji);
for (int i = 0; i < N; i++)
{
std::cout << " " << Xnowy[i];
}
std::cout << std::endl << " " << licznik_iteracji << std::endl;