Метод Гаусса на с++

Нашёл этот алгоритм для решения линейных уравнений через метод Гаусса

#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
int n, i, j, k;
double d, s;
int main()
{
    ifstream fin("input.txt");
    cout << "vvedite N: " << endl;
    fin >> n;
    double **a = new double *[n];
    for (i = 0; i <= n; i++)
        a[i] = new double[n];
    double **a1 = new double *[n];
    for (i = 0; i <= n; i++)
        a1[i] = new double[n];
    double *b = new double[n];
    double *x = new double[n];
    for (i = 1; i <= n; i++)
    {
        for (j = 1; j <= n; j++)
        {
            fin >> a[i][j];
            a1[i][j] = a[i][j];
            cout << "a[ " << i << "," << j << "]= "<<a[i][j]<<endl;
        }
    }
    for (i = 1; i <= n; i++)
    {
        fin >> b[i];
        cout << "b,[ " << i << "]= "<<b[i]<<endl;
    }
    for (k = 1; k <= n; k++) 
    {
        for (j = k + 1; j <= n; j++)
        {
            d = a[j][k] / a[k][k]; 
            for (i = k; i <= n; i++)
            {
                a[j][i] = a[j][i] - d * a[k][i]; 
            }
            b[j] = b[j] - d * b[k]; 
        }
    }
    for (k = n-2; k >= 1; k--) 
    {
        d = 0;
        for (j = k + 1; j <= n; j++)
        {
            s = a[k][j] * x[j]; 
            d = d + s; 
        }
        x[k] = (b[k] - d) / a[k][k]; 
    }
    cout << "Korni sistemy: " << endl;
    ofstream out;
    out.open("output.txt");
    for (i = 1; i <= n; i++)
    {
        out <<'x'<<i<<'='<< x[i] << endl;
        cout << 'x' << i << '=' << x[i] << endl;
    }
    system("pause");
    return 0;
}

Но при вводе например такой матрицы

1 0 0 0 0 | 1

0 1 0 0 0 | 1

0 0 0 1 0 | 1

0 0 1 0 0 | 1

0 0 0 0 1 | 1

выдаётся -nan(ind). Видимо где-то происходит деление на ноль. Как решить проблему?


Ответы (0 шт):