написание вектора с использованием функции readTrajectory в Dymola - PullRequest
1 голос
/ 24 февраля 2020

Я пишу вектор в скрипте Dymola mos простым способом:

x_axis = cell.spatialSummary.x_cell;
output: x_axis={1,2,3,4,5} // row vector

Я хочу сделать то же самое в функции. У x_cell 'есть 5 значений, которые я хочу сохранить в вектор строки. Я использую функцию DymolaCommands.Trajectories.readTrajectory для чтения значений x_cell одно за другим для l oop (я использую для l oop, потому что readTrajectory выдает ошибку, когда я пытаюсь прочитать весь x_cell)

Real x_axis[:],axis_value[:,:];
Integer len=5;

for i in 1:len loop
    axis_value:=readTrajectory(result,{"cell.spatialSummary.x_cell["+String(i)+"]"},1); //This intermediate variable returns [1,1] matrix
    x_axis[i]:=scalar(axis_value);
end for;

Я получаю сообщение об ошибке:

Назначение не выполнено x_axis [i] = scalar (axis_value);

что здесь не так? Все, что я хочу сделать, это прочитать все значения x_cell и записать его в вектор. Как я могу сделать это в функции димолы? Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Предварительное заполнение, как в другом решении, работает и, как правило, является лучшим решением. Однако в некоторых случаях вам может потребоваться добавить к вектору следующее:

 x_axis=fill(0.0, 0);
 for i in 1:len loop
    axis_value:=readTrajectory(result,{"cell.spatialSummary.x_cell["+String(i)+"]"},1); //This intermediate variable returns [1,1] matrix
    x_axis:=cat(1, x_axis, {scalar(axis_value)});
 end for;

(Это занимает x_axis и объединяет новый элемент в конце. Обычно это медленнее.)

2 голосов
/ 25 февраля 2020

Решение: инициализировать вектор с определенным значением. В этом случае

x_axis :=fill(0, len);

Это решило вышеуказанную проблему для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...