Раздел уравнения: декларативный
Раздел алгоритма: недекларативный
Может ли кто-нибудь помочь мне с примерами, показывающими разницу между этими двумя разделами. Когда использовать какой раздел?
-Благодарность
Раздел уравнения: декларативный
Раздел алгоритма: недекларативный
Может ли кто-нибудь помочь мне с примерами, показывающими разницу между этими двумя разделами. Когда использовать какой раздел?
-Благодарность
Основное различие между 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
, если можете. В результате ваша симуляция будет быстрее.