Тема: Зведення системи рівнянь до трикутного вигляду.
Якщо не важко не можете підказати де саме помилка. Необхідно звести систему лінійних рівнянь до трикутного вигляду. Але зводить до одиничної.
int i, j, k, m, n;
cout << "Введіть розмірність: ";
cin >> n;
float** a = new float* [n], * b = new float[n];//ранг
for (int i = 0; i < n; i++)
a[i] = new float[n];
cout << "Введіть матрицю:" << endl;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++)
{
cout << "Введіть " << "a[" << i + 1 << "][" << j + 1 << "]:";
cin >> a[i][j];
}
}
cout << "Введіть кінцеві значення:" << endl;
for (i = 0; i < n; i++) {
cout << "Введіть " << "b[" << i + 1 << "]:";
cin >> b[i];
}
cout << "\n\n";
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
cout << a[i][j] << "x" << j + 1 << " "; //виведення системи лінійних рівнянь на екран
cout << "= " << b[i] << "\n";
}
double eps = 0.000001;
double max;
int max_i;
double lead, a_div_lead;
for (k = 0; k < n; k++)
{
max = 0;
max_i = -1;
for (int i = k; i < n; i++)
{
if (fabs(a[i][k]) > max) //перевірка чи детермінант "матриці" не дорівнює 0
{
max = fabs(a[i][k]);
max_i = i;
}
}
if (max_i == -1 || fabs(a[max_i][k]) < eps)
{
cout << "\n\n" << "Error: det=0" << "\n\n";
break;
}
lead = a[k][k];
for (j = k; j < n; j++)
a[k][j] /= lead;
b[k] /= lead;
for (i = 0; i < n; i++)
{
a_div_lead = a[i][k] / a[k][k]; //цикл зведення лінійного рівняння
if (i != k)
{
for (j = k; j < n; j++)
a[i][j] -= a[k][j] * a_div_lead;
b[i] -= b[k] * a_div_lead;
}
}
}