Сделайте массив для аргументов функции - PullRequest
0 голосов
/ 06 июня 2018

У меня есть функция (созданная с помощью символического набора инструментов), которая принимает несколько скалярных входных данных:

scalarFn = @(a,b,c) a .* b + c

Я хотел бы изменить эту функцию, чтобы она вместо этого принимала один вход и обрабатывает элементывектора к входным аргументам функции выше:

vectorFn = @(theta) theta(1) .* theta(2) + theta(3)

Я играл с deal и или комбинировал num2cell с {:} индексированием, но я не понял, каксоставьте эту функцию еще.

В конечном счете, я хочу функцию, которая принимает дескриптор функции, такой как scalarFn (но не обязательно имеет только 3 аргумента - скорее всего, больше), и возвращает новый дескриптор функции vectorFn, который имеет только один вход каквектор.Есть какой-либо способ сделать это?

1 Ответ

0 голосов
/ 07 июня 2018

Как неуклюжий ответ, я знаю, что могу сделать это с помощью оператора eval:

vectorFn = eval(['@(theta) scalarFn(' strjoin(arrayfun(@(x) ['theta(' num2str(x) ')'], 1:nargin(scalarFn), 'Uniform', false), ', ') ')']);

scalarFn(1,2,3)
vectorFn([1 2 3])

Но, похоже, это не совсем надежное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...