Есть ли способ определить рабочую область источника в Matlab для «линеаризации» при использовании внутри функции?Как изменить исходное рабочее пространство в Matlab для 'линеаризации'?
Здесь короткий минимальный рабочий пример:
clear all
sys = 'watertank';
open(sys)
sys_io(1) = linio('watertank/PID Controller',1,'input');
sys_io(2) = linio('watertank/Water-Tank System',1,'openoutput');
linsys = GetLinsys(sys,sys_io);
disp(linsys.a)
Функция:
function linsys = GetLinsys(sys,sys_io)
A = 10;
linsys = linearize(sys,sys_io);
end
Выход
-0.0500
так как linearize
использует Начальное значение A в «базовое» рабочее пространство (A = 20), а не значение в «текущем» рабочем пространстве (A = 10).
Однако, я ожидал бы
-0.1000
Это получается, если код функции включен в сценарии:
clear all
sys = 'watertank';
open(sys)
sys_io(1) = linio('watertank/PID Controller',1,'input');
sys_io(2) = linio('watertank/Water-Tank System',1,'openoutput');
A = 10;
linsys = linearize(sys,sys_io);
disp(linsys.a)
Таким образом, возникает вопрос: Как я могу получить то же результат с помощью функции?
Для команды sim
, это можно сделать с помощью опции:
options = simset('SrcWorkspace','current');
sim('modelname',[],options)
см here. Однако в параметрах линеаризации я не нашел ничего подобного.
Большое спасибо за любую помощь или предложение!
Спасибо за ваше предложение. Но изменение переменной в базовом рабочем пространстве - это то, чего я бы хотел избежать этой функцией. Поскольку это возможно для команды sim, я надеюсь, что есть также решение для команды линеаризации. –
Я включил обход, который сохраняет и восстанавливает любую переменную 'A', которая присутствует в базовом рабочем пространстве до вызова функции. Не изящное решение, но выполняет эту работу. Может быть (надеюсь!) Кто-то придумает встроенный, простой способ сделать это - мне тоже не нравится это решение. – hbaderts
Большое спасибо за ваши усилия! Но опять же: вопрос заключается в том, как перейти к «текущему» рабочему пространству, а не как манипулировать базовым рабочим пространством :-) Надеюсь, у кого-то есть идея. –