Хобрук: Ваш путь к мастерству в программировании

Уравнения, зависящие от времени, Modelica

Я новичок в Modelica, и мне интересно, можно ли написать своего рода уравнение динамического программирования. Предположим, что время дискретизировано целым числом i, и в моем конкретном приложении x является булевым значением, а f является булевой функцией от x.

x(t_i) = f(x(t_{i+d}))

Где d может быть положительным или отрицательным целым числом. Конечно, я бы инициализировал x соответственно, либо true, либо false.

Любая помощь или ссылки будут с благодарностью!


Ответы:


1

Возможно. В Modelica дискретизация во времени обычно выполняется компилятором, вам нужно позаботиться об уравнениях (непрерывная динамика). В противном случае, если вы хотите генерировать события в дискретные моменты времени, вы можете сделать это с помощью операторов when. Я предлагаю вам взглянуть на Introduction to Object-Oriented Modeling and Simulation with OpenModelica ( Формат PDF, 6,6 МБ) – более свежий учебник (2012 г.) Питера Фрицсона. Существует раздел, посвященный дискретным событиям и гибридным системам, который должен пояснить, как реализовать ваши уравнения в Modelica. Ниже вы можете найти пример из этого руководства о модели прыгающего мяча, поскольку вы можете видеть, что дискретизация во времени не учитывается при написании ваших динамических уравнений. Таким образом, непрерывная модель мяча v=der(s), a=der(v) и дискретная часть внутри предложения when, которая обрабатывает контакт с землей:

model BouncingBall "the bouncing ball model"
  parameter Real g=9.81; //gravitational acc.
  parameter Real c=0.90; //elasticity constant
  Real height(start=10),velocity(start=0);
equation
  der(height) = velocity;
  der(velocity)=-g;
  when height<0 then
    reinit(velocity, -c*velocity);
  end when;
end BouncingBall;

Надеюсь, это поможет, Марко

15.07.2013

2

Насколько я понимаю ваш вопрос, вы хотите использовать последние n оценки x для определения следующего значения x. Если это так, этот код показывает, как это сделать:

model BooleanHistory
  parameter Integer n=10 "How many points to keep";
  parameter Modelica.SIunits.Time dt=1e-3;
protected 
  Boolean x[n];
  function f
    input Integer n;
    input Boolean past[n-1];
    output Boolean next;
  algorithm 
    next :=not past[1]; // Example
  end f;
initial equation 
  x = {false for i in 1:n};
equation 
  when sample(0,dt) then
    x[2:n] =  pre(x[1:(n-1)]);
    x[1] =  f(n, x[2:n]);
  end when;
end BooleanHistory;
15.07.2013
Новые материалы

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

Обзор 20 основных и современных методов работы с массивами в JavaScript
Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

Да, но я чувствую необходимость указать, что это или не единственные два.
Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.

Получение стоковых обновлений с помощью Python
Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..