• Регистрация
aBoomest
aBoomest +942.89
н/д

Символьные вычисления. Решение с-мы ур-й

13.03.2021

Простой пример. Есть два ур-я.

Eqn1 = C*(A + m*G) + F;
Eqn2 = D*(B + (1-n)*G) + F;

m - неизвестно. F тоже не известно, но его можно исключить вычитанием одного ур-я из другого.

Eqn3 = Eqn1 - Eqn2;
S = solve(Eqn3,m,'ReturnConditions',true);
disp(S.m);
disp(S.parameters);
disp(S.conditions);

Это простецкий пример. В более сложных примерах с 10-ком ур-й далеко не всегда ясно, что там можно из чего вычесть и т.п. Вопрос: какой функцией символьной математики матлаб можно систему ур-й упросить исключая члены ур-я подобные F? Т.е. чтоб не самому думать, что вычитать и сколько раз, а чтоб передал систему и она упростилась, и из нее выкинулось все не нужное (F). Есть такой функционал?

Теги

    13.03.2021

    Ответы

    • nikita-x
      nikita-x0.00
      15.03.2021 18:16
      • Centurio
        Centurio+42.00
        16.03.2021 04:00

        То, что вы написсали, - это решение СЛАУ методом Гаусса. Только зачем вам решать именно этим методом? Просто применение функции solve почему не устраивает?

        • aBoomest
          aBoomest+942.89
          16.03.2021 05:21

          Вот так он решает, когда я сам вычитаю уравнения и уже итог ввожу как параметр для ф-ции solve.

          Eqn1 = C*(A + m*G) + F;
          Eqn2 = D*(B + (1-n)*G) + F;
          
          Eqn3 = Eqn1 - Eqn2;
          
          S = solve(Eqn3,m,'ReturnConditions',true);
          disp(S.m);
          disp(S.parameters);
          disp(S.conditions);

          А когда я в solve передаю просто систему из ДВУХ уравнений (см.ниже), то так - не решает. Но ошибок не выдает. Выдает "пустые" результаты. Это означаект, что структура S возвращается но все поля в ней пустые. 

          Eqn1 = C*(A + m*G) + F;
          Eqn2 = D*(B + (1-n)*G) + F;
          
          Eqn3 = [Eqn1 Eqn2];
          
          S = solve(Eqn3,m,'ReturnConditions',true);
          disp(S.m);
          disp(S.parameters);
          disp(S.conditions);

          Я пытаюсь добиться того, чтоб вместо Eqn3 = Eqn1 - Eqn2 в первом примере была какая-то ф-ция которая сама все упростит, и выдаст результат который уже передается в solve.

          UPD: Причем это же даже не система уравнений, т.к. переменная-то одна - m.

          • Centurio
            Centurio+42.00
            16.03.2021 05:57

            Причем это же даже не система уравнений, т.к. переменная-то одна - m.

            Нет, там две переменных: m и F. Вы нашли только одну из них.

            • aBoomest
              aBoomest+942.89
              16.03.2021 08:24

              Спасибо. Уловил мысль.

              Другой вопрос, если система уравнений избыточна, т.е. гапример 3 ур-я и 2 неизвестных параметра, то в результате также выдает пустую структуру. Как в таких случаях поступают?

              • Centurio
                Centurio+42.00
                17.03.2021 17:18

                В этом случае ищут минимальную невязку, то есть такое решение, которе давало бы ответ, минимально отличающийся от заданного. Чаще всего для поиска решения используют метод наименьших квадратов.

                • aBoomest
                  aBoomest+942.89
                  17.03.2021 19:01

                  А л-ра есть по конкретно этому вопросу? (Хорошо бы с примераvи в matlab)

                  • Centurio
                    Centurio+42.00
                    18.03.2021 03:43

                    Материала по методу наименьших квадратов много, вам не составит труда найти его самомтоятельно.

                    Что же касается Матлаба, то здесь можно использовать псевдообратную матрицу. Коэффициенты системы записываются в виде матрицы, а свободные члены правой части системы - в виде вектор-столбца. Для нахождения решения нужно псевдообратную матрицу от матрицы коэффициентов умножить на вектор-столбец правой части.

                    Например, имеется система

                    Решение в Матлабе:

                    A=[2 -7;3 -7;3 -4];

                    b=[13;17;-14];

                    x=pinv(A)*b

                    x =

                      -10.8629

                      -5.8294

                    • aBoomest
                      aBoomest+942.89
                      18.03.2021 05:47

                      Спасибо.

                      • aBoomest
                        aBoomest+942.89
                        21.03.2021 08:40

                        Я так полагаю мне надо что-то почитать и я чего-то не понимаю, ибо подстановка решения в СЛАУ не дает тождество. Так и должно быть? И где про это почитать?

                        x = [  -10.8629  -5.8294]
                        2*x(1) - 7*x(2)
                        
                        ans =
                        
                           19.0800
                        • Centurio
                          Centurio+42.00
                          21.03.2021 10:42

                          Я уже писал выше: "В этом случае ищут минимальную невязку, то есть такое решение, которе давало бы ответ, минимально отличающийся от заданного". Ибо для переопределённой системы невозможно получить точного решения.

                          • aBoomest
                            aBoomest+942.89
                            21.03.2021 12:24

                            Спасибо. Накопал Феликса Гантмахера. Почитаю.