Вызывающая функция с переменным числом параметров в Matlab
Я использую symbolic toolbox для создания функции matlab. Но количество входных данных для сгенерированной функции зависит от количества объектов, которые мне нужны (например, количество переключателей). Для 2 и 3 переключателей сгенерированная функция выглядит так:
y = fun(a1,a2,b1,b2)
y = fun(a1,a2,a3,b1,b2,b3)
в скрипте с помощью этой функции устанавливаю векторы этих параметров:
a = [a1 a2 ...]
Я хочу либо вызвать сгенерированную функцию напрямую, либо сделать функцию-оболочку, чтобы я не необходимо изменить оператор вызова, когда я изменяю количество переключателей. Чтобы еще больше усложнить эту проблему, эти переменные являются переменными ACADO. Это означает, что матричная и элементная операция не разрешена (т. е. все математические операции должны выполняться со скалярами, а уравнения в символьном наборе инструментов должны быть написаны для скаляров).
2 ответов
вы, вероятно, ищете массивы ячеек и {:}
оператора. Он изменяет содержимое ячейки разделенные запятыми список. Результат может быть передан функции в качестве параметров. Например:
v2 = {a1, a2, b1, b2};
v3 = {a1, a2, a3, b1, b2, b3};
и пример функции:
function fun(varargin)
display(['number of parameters: ' num2str(nargin)]);
вы можете вызвать функцию для различного количества параметров "прозрачно" следующим образом
fun(v2{:})
number of parameters: 4
fun(v3{:})
number of parameters: 6
вы можете создавать функции с переменными номерами входных аргументов с помощью varargin
.
function fun(varargin)
a = cell2mat(varargin); % works only if arguments indeed only consists of scalars.
% your code comes hereafter