Ошибка из-за данных переменного размера в функциональном блоке Simulink Matlab

Я работаю с блоком Simulink MATLAB FUNCTION, и у меня возникают проблемы с границами переменных, которые я там определяю.

Это часть кода, где я получаю проблемы

function P_S1_100= fcn(SOC_S1_100,S1_AGENTS_10,time_CAP_100)

         assert(time_CAP_100(1)<100)

         tcharging_a1_1=[0:0.05:time_CAP_100(1)]
         tcharging_a1_2=[time_CAP_100(1):0.05:time_CAP_100(1)*2]
         tcharging_a1=[0:0.05:time_CAP_100(1)]

(Куда time_CAP_100 является вектором [1x6])

И это ошибка, которую я получаю:

Computed maximum size of the output of function 'colon' is not bounded.
Static memory allocation requires all sizes to be bounded.
The computed size is [1 x :?].

Function 'Subsystem1/Slow Charge/S1/MATLAB Function5' (#265.262.302), line 8, column   16:
"[time_CAP_100(1):0.05:time_CAP_100(1)*2]"

Может ли кто-нибудь дать мне представление о том, как решить эту ошибку?

Заранее спасибо.

2 ответа

Для каждого из ваших входных / выходных данных переменного размера вам необходимо определить верхнюю границу. См. http://www.mathworks.co.uk/help/simulink/ug/declare-variable-size-inputs-and-outputs.html для получения дополнительной информации.

Единственное, что я могу обдумать, - это вручную написать цикл с фиксированными границами цикла для расширения. [time_CAP_100(1):0.05:time_CAP_100(1)*2], Это выражение является причиной проблемы. Вам нужно знать границы этого вектора. Тогда вы можете написать цикл что-то вроде

% max_size is the maximum length possible for tcharging_a1_2
tcharging_a1_2 = zeros(1,max_size);
tcharging_a1_2(1) = time_CAP_100(1);
for ii=2:max_size
  if tcharging_a1_2(ii) < time_CAP_100(1)*2
    tcharging_a1_2(ii) = tcharging_a1_2(ii) + .05;
  end
end
Другие вопросы по тегам