Custom object class array initilization within Simulink Matlab Function Block

Illustration
Michael - 2021-09-30T12:39:51+00:00
Question: Custom object class array initilization within Simulink Matlab Function Block

The summary of my question is I need know how to preallocate an array of custom objects in a way that is compatible with Simulink when using the Matlab Function block in Simulink.   Details: I am attempting to port over some code I have written in Matlab to run as a function in Simulink using the "Matlab Function" block. I have created a custom class called "pulse." (minimal example at the bottom of this question). I want to be able to initialize an array of these pulse objects. My Matlab code works fine now with the call:   pulse_array(1:2,1:4) = pulse; This creates a 2x4 array of pulse objects as expected. The problem I am having is when I use my code within Simulink. When I try to run this same line within the Simulink Matlab Function block I get the error:   Undefined function or variable 'pulse_array'. The first assignment to a local variable determines its class.   It looks to me like the coder doesn't know that pulse_array should be a pulse object. To try to fix this, I tried to intialize pulse_array as a pulse object and then expand the array with for loops:   pulse_array = pulse; for i = 1:2 for j = 1:4 pulse_array(i,j) = pulse; end end Simulink didn't like that either, as the loop trys to specify pulse_array(1,2) when it believed the size of pulse_array is 1x1 (I get size mismatch errors, which isn't totally unexpected). I understand this, as coder needs to know the size of the array.....this is why I tried the initial call of pulse_array(1:2,1:4) = pulse.   Any help would be....extremely helpful.   classdef pulse properties A %Amplitude end methods function obj = pulse(A) if nargin>0 %Allows for array construction https://www.mathworks.com/help/matlab/matlab_oop/initialize-object-arrays.html obj.A = A; end end end end  

Expert Answer

Profile picture of Kshitij Singh Kshitij Singh answered . 2025-11-20

According to the documentation for MATLAB Classes for Code generation, creation of arrays of objects is not supported yet. As a workaround, you could define a cell - array to store the objects, as such:

 

 

pulse_array = cell(2,4);
for idx = 1 : 8
    pulse_array{idx} = pulse;
end


pulse_array =

  2×4 cell array

    {1×1 pulse}    {1×1 pulse}    {1×1 pulse}    {1×1 pulse}
    {1×1 pulse}    {1×1 pulse}    {1×1 pulse}    {1×1 pulse}


Not satisfied with the answer ?? ASK NOW

Get a Free Consultation or a Sample Assignment Review!