Я пытаюсь создать строку аргумента для анонимной функции на основе количества входных аргументов без использования для циклов. Например, если N = 3, то я хочу строку, которая считываетMatlab - динамически создает строку для анонимной функции
@(ax(1),ax(2),ax(3),ay(1),ay(2),ay(3))
Я попытался с помощью repmat ('топор', 1, N), но я не могу понять, как чередовать (I) индекс.
Любые идеи?
Кроме того, ответы на них до сих пор решены. Чтобы дать некоторую интуицию тем, кто задается вопросом , почему Я хочу сделать это: мне нужно построить очень большую матричную анонимную функцию (якобиан) порядка 3000x3000. Сначала я использовал функции Matlab jacobian и matlabFunction для построения анонимной функции; однако это было довольно медленно. Вместо этого, поскольку замкнутая форма производной была довольно простой, я решил создать анонимную функцию напрямую. Это было сделано путем формирования символьной матрицы Якобиана J, затем добавив ее к указанной выше строке @() с помощью char (J {:}) 'и используя eval для формирования окончательной анонимной функции. Это может быть не самое изящное решение, но я считаю, что он работает намного быстрее, чем комбинация jacobian/matlabFunction, особенно для больших N (кроме того, структура нового подхода позволяет проводить оценку параллельно).
EDIT: Просто для полноты, правильной формы аргумента строки для анонимной функции следует читать
@(ax1,ax2,ax3,ay1,ay2,ay3)
избежать синтаксической ошибки, связанные с индексацией.
Использование строки для этого не является отличным решением. Я подозреваю, что вы, возможно, захотите использовать 'varargin' вместо этого. Какие анонимные функции вы хотите построить точно? Во-вторых: Синтаксис, который вы создаете, недействителен в MATLAB. – knedlsepp
В ожидании моего значка Mentalist я предсказываю, что OP действительно хочет что-то вроде этого: 'f = @ (ax, ay) ...', который затем будет вызываться через 'f ([a, b, c], [ d, e, f]) ' – knedlsepp
Благодарим вас за разъяснение. Я до сих пор не понимаю, как ответы решают вашу проблему.Они просто создают синтаксическую ошибку, если вы используете на них 'str2func'. – knedlsepp