Я ищу простой способ кодировать функцию в 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?