Решение линейного уравнения

Вы можете решить эту проблему math с помощью программы точно arithmetic так же, как вы решаете ее system вручную (умножением и вычитанием, а system затем возвращением результатов system в уравнения). Это довольно system стандартная математика средней systems школы.

-44.3940 = 50a + 37b + c (A)
-45.3049 = 43a + 39b + c (B)
-44.9594 = 52a + 41b + c (C)

(A-B): 0.9109 =  7a -  2b (D)
(B-C): 0.3455 = -9a -  2b (E)

(D-E): 1.2564 = 16a (F)

(F/16):  a = 0.078525 (G)

Feed G into D:
       0.9109 = 7a - 2b
    => 0.9109 = 0.549675 - 2b (substitute a)
    => 0.361225 = -2b (subtract 0.549675 from both sides)
    => -0.1806125 = b (divide both sides by -2) (H)

Feed H/G into A:
       -44.3940 = 50a + 37b + c
    => -44.3940 = 3.92625 - 6.6826625 + c (substitute a/b)
    => -41.6375875 = c (subtract 3.92625 - 6.6826625 from both sides)

Итак, вы получаете:

a =   0.0785250
b =  -0.1806125
c = -41.6375875

Если systems вы вставите эти значения maths обратно в A, B и C, вы обнаружите, что maths они верны.

Уловка состоит systems в том, чтобы использовать arithmetic простую матрицу 4x3, которая, в systems свою очередь, сокращается arithmetic до матрицы 3x2, а затем до arithmetic 2x1, которая равна «a = n», где linear-algebra n - фактическое число. Как mathematics только у вас есть это, вы linear-algebra вводите его в следующую матрицу, чтобы system получить другое значение, затем system эти два значения в следующую system матрицу до тех пор, пока math вы не решите все переменные.

Если linear-equation у вас есть N различных уравнений, вы maths всегда можете решить для math N переменных. Я говорю отличное, потому linear-algebra что эти два не являются:

 7a + 2b =  50
14a + 4b = 100

Это linear-algebra одно и то же уравнение, умноженное на linear-algebra два, поэтому вы не можете mathematical получить из них решение - умножение system первого на два и последующее system вычитание дает вам истинное, но mathematics бесполезное утверждение:

0 = 0 + 0

В systems качестве примера приведу arithmetic код на языке C, который обрабатывает systems одновременные уравнения, которые linear-algebra вы указали в своем вопросе. Сначала math некоторые необходимые типы, переменные, функция linear-algebra поддержки для печати уравнения maths и начало main:

#include 

typedef struct { double r, a, b, c; } tEquation;
tEquation equ1[] = {
    { -44.3940,  50, 37, 1 },      // -44.3940 = 50a + 37b + c (A)
    { -45.3049,  43, 39, 1 },      // -45.3049 = 43a + 39b + c (B)
    { -44.9594,  52, 41, 1 },      // -44.9594 = 52a + 41b + c (C)
};
tEquation equ2[2], equ3[1];

static void dumpEqu (char *desc, tEquation *e, char *post) {
    printf ("%10s: %12.8lf = %12.8lfa + %12.8lfb + %12.8lfc (%s)\n",
        desc, e->r, e->a, e->b, e->c, post);
}

int main (void) {
    double a, b, c;

Затем приведение systems трех уравнений с тремя неизвестными mathematical к двум уравнениям с двумя mathematics неизвестными:

    // First step, populate equ2 based on removing c from equ.

    dumpEqu (">", &(equ1[0]), "A");
    dumpEqu (">", &(equ1[1]), "B");
    dumpEqu (">", &(equ1[2]), "C");
    puts ("");

    // A - B
    equ2[0].r = equ1[0].r * equ1[1].c - equ1[1].r * equ1[0].c;
    equ2[0].a = equ1[0].a * equ1[1].c - equ1[1].a * equ1[0].c;
    equ2[0].b = equ1[0].b * equ1[1].c - equ1[1].b * equ1[0].c;
    equ2[0].c = 0;

    // B - C
    equ2[1].r = equ1[1].r * equ1[2].c - equ1[2].r * equ1[1].c;
    equ2[1].a = equ1[1].a * equ1[2].c - equ1[2].a * equ1[1].c;
    equ2[1].b = equ1[1].b * equ1[2].c - equ1[2].b * equ1[1].c;
    equ2[1].c = 0;

    dumpEqu ("A-B", &(equ2[0]), "D");
    dumpEqu ("B-C", &(equ2[1]), "E");
    puts ("");

Затем приведение mathematics двух уравнений с двумя неизвестными linear-equation к одному уравнению с одним arithmetic неизвестным:

    // Next step, populate equ3 based on removing b from equ2.

    // D - E
    equ3[0].r = equ2[0].r * equ2[1].b - equ2[1].r * equ2[0].b;
    equ3[0].a = equ2[0].a * equ2[1].b - equ2[1].a * equ2[0].b;
    equ3[0].b = 0;
    equ3[0].c = 0;

    dumpEqu ("D-E", &(equ3[0]), "F");
    puts ("");

Теперь, когда arithmetic у нас есть формула типа number1 = unknown * number2, мы mathematics можем просто вычислить неизвестное mathematics значение с помощью unknown <- number1 / number2. Затем, когда maths вы вычислили это значение, подставьте math его в одно из уравнений с maths двумя неизвестными и определите maths второе значение. Затем замените linear-equation оба этих (теперь известных) неизвестных linear-algebra в одно из исходных уравнений, и arithmetic теперь у вас есть значения linear-equation для всех трех неизвестных:

    // Finally, substitute values back into equations.

    a = equ3[0].r / equ3[0].a;
    printf ("From (F    ), a = %12.8lf (G)\n", a);

    b = (equ2[0].r - equ2[0].a * a) / equ2[0].b;
    printf ("From (D,G  ), b = %12.8lf (H)\n", b);

    c = (equ1[0].r - equ1[0].a * a - equ1[0].b * b) / equ1[0].c;
    printf ("From (A,G,H), c = %12.8lf (I)\n", c);

    return 0;
}

Результат linear-algebra этого кода соответствует system предыдущим вычислениям в math этом ответе:

         >: -44.39400000 =  50.00000000a +  37.00000000b +   1.00000000c (A)
         >: -45.30490000 =  43.00000000a +  39.00000000b +   1.00000000c (B)
         >: -44.95940000 =  52.00000000a +  41.00000000b +   1.00000000c (C)

       A-B:   0.91090000 =   7.00000000a +  -2.00000000b +   0.00000000c (D)
       B-C:  -0.34550000 =  -9.00000000a +  -2.00000000b +   0.00000000c (E)

       D-E:  -2.51280000 = -32.00000000a +   0.00000000b +   0.00000000c (F)

From (F    ), a =   0.07852500 (G)
From (D,G  ), b =  -0.18061250 (H)
From (A,G,H), c = -41.63758750 (I)

math

linear-algebra

system

linear-equation

2022-10-30T17:39:34+00:00
Вопросы с похожей тематикой, как у вопроса:

Решение линейного уравнения