Резюме моего вопроса: мне нужно знать, как предварительно выделить массив пользовательских объектов таким образом, чтобы он был совместим с Simulink, при использовании функционального блока Matlab в Simulink.

Подробности: я пытаюсь перенести некоторый код, который я написал в Matlab, для запуска в качестве функции в Simulink с использованием блока «Matlab Function». Я создал собственный класс под названием «pulse». (минимальный пример внизу этого вопроса). Я хочу иметь возможность инициализировать массив этих импульсных объектов. Мой код Matlab теперь отлично работает с вызовом:

pulse_array(1:2,1:4) = pulse;

Это создает массив 2x4 импульсных объектов, как и ожидалось. Проблема, с которой я сталкиваюсь, заключается в том, что я использую свой код в Simulink. Когда я пытаюсь запустить эту же строку в функциональном блоке Simulink Matlab, я получаю сообщение об ошибке:

Неопределенная функция или переменная ‘pulse_array’. Первое присвоение локальной переменной определяет ее класс.

Мне кажется, что кодер не знает, что pulse_array должен быть объектом пульса. Чтобы исправить это, я попытался инициализировать pulse_array как объект импульса, а затем расширить массив с помощью циклов for:

pulse_array = pulse;
for i = 1:2
    for j = 1:4
        pulse_array(i,j) = pulse;
    end
end

Simulink это тоже не понравилось, так как цикл пытается указать pulse_array(1,2), когда считает, что размер pulse_array равен 1x1 (я получаю ошибки несоответствия размера, что не совсем неожиданно). Я понимаю это, так как кодеру нужно знать размер массива… вот почему я попробовал первоначальный вызов pulse_array(1:2,1:4) = pulse.

Любая помощь будет… чрезвычайно полезной.

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

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Согласно документации для MATLAB Classes for Code Generation создание массивов объектов пока не поддерживается. В качестве обходного пути вы можете определить массив ячеек для хранения объектов как таковых:

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}

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ