Функция Matlab: инициализация массива для большего количества объектов

Мне нужна помощь по поводу функции Simulink: у меня есть n сущности, в этом примере только 2.

  • Атрибут объекта 1: ID = 1, VALORE = 5
  • Атрибут объекта 2: ID = 2, VALORE = 3

Мне нужно вызывать функцию только один раз вместо зацикливания и, если существует y = ... не создавай больше.

function y = fcn(VALORE,ID)

y=zeros(1,2);

persistent start;

if isempty(start)  
  start=zeros(1,2);
end

if (ID==0)
  return 
end

y(ID) = start(ID);
start(ID) = start(ID) + VALORE;

приложить значения у

y =      0     0
y =      0    36
start = 60    39
y =      0     0
y =     60     0
start = 65    39

Я бы, например,

y = 55 33
y = 60 33
y = 65 36

без звонка y = zeros (1,2) для каждого вызова функции.

1 ответ

Решение

Насколько я знаю, для генерации кода при первом появлении переменной необходимо установить ее размер. Первое появление переменной не может быть подписано. Так что вам действительно нужно использовать нули.

Но проблема не в этом! Вы можете получить значения y по-разному: например, 1. Самый простой способ - использовать y так же, как вы используете start - сделать его постоянным и позволить сохранять значения между вызовами функций. 2. если вам нужно использовать значение y где-то еще, вы можете просто добавить третью переменную при входе Y и сохранить результат в ней.

Я обычно использую третий способ:

function y1 = fcn(y, ID, VALORE)
y1 = zeros( 1, 2 );
y1 = y;

и теперь могу делать с этим все что захочу.

Прошу прощения, если я неправильно понял вопрос

Другие вопросы по тегам