1

Тема: Зведення системи рівнянь до трикутного вигляду.

Якщо не важко не можете підказати де саме помилка. Необхідно звести систему лінійних рівнянь до трикутного вигляду. Але зводить до одиничної.

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;
            }
        }
    }

2

Re: Зведення системи рівнянь до трикутного вигляду.

Я ваше повідомлення в іншій темі прибрав.

3

Re: Зведення системи рівнянь до трикутного вигляду.

Останній цикл for (i = 0; i < n; i++) іде від 0 до n (крім if (i != k)), а якщо вам треба залишити верхні рядки, то починайте одразу з k+1, тоді й перевірка не потрібна.

4

Re: Зведення системи рівнянь до трикутного вигляду.

Гаразд

5

Re: Зведення системи рівнянь до трикутного вигляду.

Я так розумію, ви замість половини повного методу Гауса компактну схему отримали.

6

Re: Зведення системи рівнянь до трикутного вигляду.

З цим дистанційним тільки самому все вишукувати та вчити, навіть спитатися немає в кого. Проте з'явилося більше бажання до програмування. :D
Велике дякую, допомогло.

7

Re: Зведення системи рівнянь до трикутного вигляду.

Питайте тут. На такі питання - одне задоволення відповідати (ну добре, код можна було б і краще причепурити, але то вже прискіпаюся).

Подякували: Limon1

8

Re: Зведення системи рівнянь до трикутного вигляду.

Дякую за пропозицію. Якщо що, буду звертатись. І ще раз дякую.