Вызывающая функция с переменным числом параметров в 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