Modelica- Разница между уравнением и разделом алгоритма

Раздел уравнения: декларативный

Раздел алгоритма: недекларативный

Может ли кто-нибудь помочь мне с примерами, показывающими разницу между этими двумя разделами. Когда использовать какой раздел?

-Благодарность


person shilu    schedule 19.11.2013    source источник


Ответы (1)


Основное различие между algorithm разделом и equation разделом состоит в том, что каждое уравнение в equation разделе используется при моделировании модели. В разделе algorithm у вас есть императивные операторы присваивания. Это означает, что вы можете перезаписать влияние предыдущего назначения. В качестве конкретного примера в следующем разделе equation:

equation
  a = b;
  a = c;

Есть два уравнения. Каждый будет использован. Если бы, с другой стороны, у меня был следующий раздел algorithm

algorithm
  a := b;
  a := c;

Второе присвоение всегда отрицает первое.

Но позвольте мне добавить немного «общей картины», чтобы помочь вам понять настоящую семантическую разницу. Вы можете думать о algorithm как о черном ящике. Приходит много информации и присваиваются определенные переменные. Неважно, что происходит между ними. Рассмотрим следующий алгоритм:

algorithm
  sum := 0;
  prod := 1;
  for i in 1:10 loop
    sum := sum + x[i];
    prod := prod * x[i];
  end for;

И sum, и prod назначаются несколько раз. Но в конечном итоге все это фактически то же самое, что:

algorithm
  sum := 1+2+3+4+5+6+7+8+9+10;
  prod := 1*2*3*4*5*6*7*8*9*10;

...или даже...

equation
  sum = 1+2+3+4+5+6+7+8+9+10;
  prod = 1*2*3*4*5*6*7*8*9*10;

Но то же самое не относится к equation разделам. Если бы я сделал это в разделе equation:

equation
  sum = 0;
  for i in 1:10 loop
    sum = sum + i;

У меня возникнет серьезная проблема, потому что это разложится на 11 уравнений:

equation
  sum = 0;
  sum = sum + 1;
  sum = sum + 2;
  ...
  sum = sum + 10;

Итак, у меня есть одна переменная и 11 уравнений! Это не то, что мы хотим.

Итак, подведем итог: с algorithm вы можете игнорировать то, что происходит в алгоритме, и обращать внимание только на то, что получает значение. Не имеет значения, сколько раз ему присваивается значение, оно все равно считается одним «уравнением» для этой переменной. В разделе equation сохраняется каждое уравнение.

P.S. - Когда инструменты Modelica выполняют такие вещи, как сортировка уравнений, я почти уверен, что семантика диктует, что алгоритм обрабатывается как единый блок. Думаю, для вас это еще ничего не значит. Но, узнав больше о Modelica, вы поймете, что это может плохо сказаться на производительности. Таким образом, общее правило Modelica - всегда использовать equation вместо algorithm, если можете. В результате ваша симуляция будет быстрее.

person Michael Tiller    schedule 19.11.2013
comment
Большое спасибо @Michael Tiller. - person shilu; 20.11.2013
comment
Без проблем. Не забудьте принять ответ, если он отвечает на ваш вопрос. - person Michael Tiller; 21.11.2013