Я пытаюсь скопировать объект Simulink.SimulationInput, выполнив следующие действия:

Input(1) = Simulink.SimulationInput('foo');
Input(1) = Input(1).setVariable('A',Simulink.Parameter(5));
Input(1) = Input(1).setVariable('simin',timeseries([0,10],[0,10]));
%%
Input(2) = Input(1);
Input(2) = Input(2).setVariable('A.Value',10);
%%
Input(1).Variables(1).Value
Input(2).Variables(1).Value

Если установить значение переменной «A» равным 10 после копирования Input(1) в Input(2), значение Input(1) также изменится на 10. Почему это происходит?

Существует ли метод глубокого копирования для объекта SimulationInput?

ОТВЕЧАТЬ

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

Причина наблюдаемого поведения заключается в том, что Simulink.Parameter является объектом дескриптора, поэтому, когда второй объект SimulationInput назначается равным первому, оба они ссылаются на один и тот же объект Simulink.Parameter.

Есть два способа реализовать желаемый рабочий процесс, где каждый объект SimulationInput будет иметь независимые копии объекта Simulink.Parameter, A:

1. Используйте 'Input(2).setVariable('A',Simulink.Parameter(10))' вместо 'Input(2).setVariable('A.Value',10)', это дает желаемый результат:

Input(1) = Simulink.SimulationInput('mdlname');
Input(1) = Input(1).setVariable('A',Simulink.Parameter(5));
Input(1) = Input(1).setVariable('simin',timeseries([0,10],[0,10]));
%%
Input(2) = Input(1);
Input(2) = Input(2).setVariable('A',Simulink.Parameter(10));
%%
Input(1).Variables(1).Value
Input(2).Variables(1).Value

2.Сначала создайте параметр Simulink и объект SimulationInput, затем используйте setVariable:

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