Как в редакторе функции MatLab записать уравнение динамики дизельного двигателя?
13.05.2020
Коллеги, здравствуйте! Будьте добры провести ликбез по интересующему меня вопросу: я собираюсь собрать модель дизельного двигателя, для этого мне необходимо решить однородное дифференциальное уравнение динамики работы дизельного двигателя первого порядка (фотография прикреплена).
Как с помощью редактора функций Matlab мне представить решение этого уравнения, где Jdd, Jsg, ML - входные параметры, Mdd - аналитическое уравнение, которые будет решено отдельно со своим перечнем входных параметров?
В Simulink я собираюсь использовать блок "MATLAB function".
Ответы
На прошлой неделе был вопрос по ДУ.
Еще есть блок DEE.
Mdd это функционал какой переменной?
Не очень понятно, что вы называете "редактором функций", но пока что я не вижу смысла ипользовать MATLAB Function в Simulink для вашей задачи. Почему бы не собрать уравнение простейшими блоками Simulink?
ДУ можно решить простейшими блоками? Или может это относится только к данному ДУ? Если оно так, то тоже буду благодарен за информацию по данному вопросу. Ново для меня.
Единственная задача Simulink - это численное решение дифференциальных и разностных уравнений, он по сути больше ничего не делает. Модель Simulink - это и есть ваше уравнение или система уравнений. Когда вы запускаете симуляцию, то происходит именно решение ваших уравнений теми методами и с теми ограничениями, которые вы задали в настройках модели на вкладке Solver.
Вот несложный пример составления модели (уравнения):
↓
↓
↓
Все ясно, ок. О применении интегратора я что-то и не подумал. Спасибо. Но DEE и и просто odeХХ в скрипте тоже могут бытьиспользованы для решения, и по идее должны дать тотже результат?
Здесь достаточно один раз попробовать :) Вот допустим у нас совсем простое уравнение, которое имеет только одно решение:
y' = 2*t
И мы решаем его c ode45 на интервале [0 5] c y0 = 0:
Это рабочий код, который дает правильный результат. Попробуйте вставить его в MATLAB Function, связав с модельным временем, и обработав все исключения, и оцените удобство такого подхода.
А вот решение в Simulink:
DEE - это динозавр, который вымер наверно уже больше 10 лет назад, и с практической точки зрения вспоминать его не имеет смысла. Лучше ориентироваться на новые релизы и продвинутый функционал. Любители формы Коши легко опишут свою систему ДУ например передаточной функцией в пространстве состояний (блоком State-Space), что находится на острие современной науки.
Спасибо. А то не всегда бывает время следить за новым. Точнее его вобще никогда на это не хватает. Когда-то на 1-х курсах в DEE разобрался, вот и использую. А чтоб засесть и изучить новое . . . ((((( Реальность жизни.
А вопрос, что будет быстрее работать из всего о чем шла речь включая ode? Или сравнивать способы симулинка и того, что через скрипты (odeXX) некорректно?
За всем не уследишь, наверно это нормально))
Быстродействие сравнить не сложно: для этого есть функции tic, toc, timeit и даже целый Performance Framework. Если что-то работет недостаточно быстро для вас, то всегда можно ускорить, сгенерировав бинарники. Но нужно понимать, что основные затраты времени состоят не в проведении симуляции, а в разработке и отладке самой модели, и по этому параметру MATLAB при создании действительно больших динамический систем будет в сотни-тысячи раз проигрывать Simulink.
Спасибо. Все ясно.
PS: Да. Именно об этом и думал. Есть большшой расчет, сделан в скрипте с ode функциями. Считает долго. Вот, подумаю на досуге, может попробую усовершенствовать.
А, ну если у вас так вопрос стоит, то хорошо бы начать с анализа кода профайлером. Вот здесь много всего:
https://www.mathworks.com/help/matlab/performance-and-memory.html
Самые полезные главы:
Если есть такая возможность, переходите на релизы поновее. Постоянно проводятся работы по оптимизации, и даже тяжелые алгоритмы начинают работать гораздо быстрее. Года два назад даже циклы во сколько-то раз разогнали.
Это я делал когда-то давным-давно.
PS: А.Б.Сергиенко, большое спасибо ему, подробно меня тогда проконсультировал. Итого там глбоко внутрях ode45 много много раз вызывалась какая-то системная ф-ция. Она и занимала 90% времени.
UPD: Это в результате так получилось. А первоначально было все на много хуже и в целом я ту программу процентов на 40 "разогнал" и впервые тогда со всем этим познакомился.
Ну внутри ode45 ничего удивительного нет, если вы будете то же самое решать на бумажке, то потратите те же 90% времени на такие же математические вычисления.
40% - это хороший результат!