• Регистрация
noah
noah 0.00
н/д

Как в редакторе функции MatLab записать уравнение динамики дизельного двигателя?

13.05.2020

Коллеги, здравствуйте! Будьте добры провести ликбез по интересующему меня вопросу: я собираюсь собрать модель дизельного двигателя, для этого мне необходимо решить однородное дифференциальное уравнение динамики работы дизельного двигателя первого порядка (фотография прикреплена). 

Как с помощью редактора функций Matlab мне представить решение этого уравнения, где Jdd, Jsg, ML - входные параметры, Mdd - аналитическое уравнение, которые будет решено отдельно со своим перечнем входных параметров?

В Simulink я собираюсь использовать блок "MATLAB function".

 

 

Теги

    13.05.2020

    Ответы

    • aBoomest
      aBoomest+942.89
      13.05.2020 08:09

      На прошлой неделе был вопрос по ДУ. 

      Еще есть блок DEE.

      Mdd это функционал какой переменной?

      • kurguz
        kurguz+270.00
        13.05.2020 08:36

        Не очень понятно, что вы называете "редактором функций", но пока что я не вижу смысла ипользовать MATLAB Function в Simulink для вашей задачи. Почему бы не собрать уравнение простейшими блоками Simulink?

        • aBoomest
          aBoomest+942.89
          13.05.2020 09:43

          ДУ можно решить простейшими блоками? Или может это относится только к данному ДУ? Если оно так, то тоже буду благодарен за информацию по данному вопросу. Ново для меня.

          • kurguz
            kurguz+270.00
            13.05.2020 10:39

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

            Вот несложный пример составления модели (уравнения):

                     

                      ↓

                      ↓

            • aBoomest
              aBoomest+942.89
              13.05.2020 13:04

              Все ясно, ок. О применении интегратора я что-то и не подумал. Спасибо. Но DEE и и просто odeХХ в скрипте тоже могут бытьиспользованы для решения, и по  идее должны дать тотже результат?

              • kurguz
                kurguz+270.00
                13.05.2020 18:00

                Здесь достаточно один раз попробовать :) Вот допустим у нас совсем простое уравнение, которое имеет только одно решение:

                y' = 2*t

                И мы решаем его c ode45 на интервале [0 5] c y0 = 0:

                tspan = [0 5];
                y0 = 0;
                [t,y] = ode45(@(t,y) 2*t, tspan, y0);

                Это рабочий код, который дает правильный результат. Попробуйте вставить его в MATLAB Function, связав с модельным временем, и обработав все исключения, и оцените удобство такого подхода.

                А вот решение в Simulink:

                DEE - это динозавр, который вымер наверно уже больше 10 лет назад, и с практической точки зрения вспоминать его не имеет смысла. Лучше ориентироваться на новые релизы и продвинутый функционал. Любители формы Коши легко опишут свою систему ДУ например передаточной функцией в пространстве состояний (блоком State-Space), что находится на острие современной науки.

                • aBoomest
                  aBoomest+942.89
                  13.05.2020 23:30

                  Спасибо. А то не всегда бывает время следить за новым. Точнее его вобще никогда на это не хватает. Когда-то на 1-х курсах в DEE разобрался, вот и использую. А чтоб засесть и изучить новое . . . ((((( Реальность жизни.

                  А вопрос, что будет быстрее работать из всего о чем шла речь включая ode? Или сравнивать способы симулинка и того, что через скрипты (odeXX) некорректно?

                  • kurguz
                    kurguz+270.00
                    14.05.2020 12:34

                    За всем не уследишь, наверно это нормально))

                    Быстродействие сравнить не сложно: для этого есть функции tic, toc, timeit и даже целый Performance Framework. Если что-то работет недостаточно быстро для вас, то всегда можно ускорить, сгенерировав бинарники. Но нужно понимать, что основные затраты времени состоят не в проведении симуляции, а в разработке и отладке самой модели, и по этому параметру MATLAB при создании действительно больших динамический систем будет в сотни-тысячи раз проигрывать Simulink.

                    • aBoomest
                      aBoomest+942.89
                      14.05.2020 21:21

                      Спасибо. Все ясно.
                      PS: Да. Именно об этом и думал. Есть большшой расчет, сделан в скрипте с ode функциями. Считает долго. Вот, подумаю на досуге, может попробую усовершенствовать. 

                      • kurguz
                        kurguz+270.00
                        15.05.2020 13:03

                        А, ну если у вас так вопрос стоит, то хорошо бы начать с анализа кода профайлером. Вот здесь много всего:

                        https://www.mathworks.com/help/matlab/performance-and-memory.html 

                        Самые полезные главы:

                        1. Profile Your Code to Improve Performance - собственно профайлер
                        2. Techniques to Improve Performance
                        3. Strategies for Efficient Use of Memory

                        Если есть такая возможность, переходите на релизы поновее. Постоянно проводятся работы по оптимизации, и даже тяжелые алгоритмы начинают работать гораздо быстрее. Года два назад даже циклы во сколько-то раз разогнали.

                        • aBoomest
                          aBoomest+942.89
                          15.05.2020 22:23

                          Это я делал когда-то давным-давно.

                          PS: А.Б.Сергиенко, большое спасибо ему, подробно меня тогда проконсультировал. Итого там глбоко внутрях ode45 много много раз вызывалась какая-то системная ф-ция. Она и занимала 90% времени.

                          UPD: Это в результате так получилось. А первоначально было все на много хуже и в целом я ту программу процентов на 40 "разогнал" и впервые тогда со всем этим познакомился.

                          • kurguz
                            kurguz+270.00
                            19.05.2020 17:27

                            Ну внутри ode45 ничего удивительного нет, если вы будете то же самое решать на бумажке, то потратите те же 90% времени на такие же математические вычисления.

                            40% - это хороший результат!