Matlab-кодирование n-мерной функции - PullRequest
0 голосов
/ 13 апреля 2019

Я ищу простой способ кодировать функцию в Matlab, которая принимает вектор (массив) в качестве входных данных и дает вектор (массив) в качестве выходных.

Если входные и выходные массивы малы, их легко кодировать с помощью ручек функций:

f=@(u)[u(1),u(2)]

Этот подход не работает для меня для больших векторов, так как он не позволяет мне указывать каждый компонент выходного массива в цикле.

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

str2fun(strcat('@(u)[u(',int2str(1),'), u(',int2str(2),')]'))

Пример:

n=100; input=zeros(1,n);
str=strcat('@(u)[cos(u(',int2str(1),')),');
for i=2:n-1
    str=strcat(str,'cos(u(',int2str(i),'))^',int2str(i),',');
end
str=strcat(str,'cos(u(',int2str(n),'))^',int2str(n),']');
f=str2func(str);

f(input)

вывод представляет собой вектор из 100 элементов.

Код генерирует дескриптор функции, который принимает вектор длиной n и возвращает вектор длины n. Важно, чтобы я мог контролировать, от каких элементов ввода должен зависеть каждый элемент вывода.

Этот способ построения функции кажется действительно уродливым и сложным, я хотел бы знать, есть ли лучший способ кодировать такие функции в matlab?

1 Ответ

2 голосов
/ 13 апреля 2019

Ваш код может быть векторизован, как показано ниже:

f = @(u) cos(u).^(1:numel(u));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...