2016-08-22 1 views
3

Предположим, я хочу, чтобы создать анонимную функцию, которая делает следующееКак достичь векторного ввода/вывода с помощью различных операций с использованием анонимных функций?

f: [a, b] -> [a^2, b/2] 

Поскольку операция отличается от a и b я не мог понять, каким образом. Возможно ли это в MATLAB? Моя функция будет иметь ограничения R^2 -> R^2

ответ

5

Из-за специфических ограничений , она должна была бы быть что-то вроде этого:

f = @(x) [x(1)^2, x(2)/2]; 

Вы не можете явно определить выходы в анонимную функцию любым другим способом.

+0

Спасибо, это именно то, что я хочу (как же Я не думал об этом?: D) – arynaq

3

Глядя на MatLab помощью анонимных функций, глядя на раздел functions with multiple inputs or outputs, я бы думать, что вы могли бы сделать что-то вроде кода ниже

Второй редактировать Оказывается, если вы используете сделку (как указано thewaywewalk), или если вы разыскиваете анонимную функцию, вы можете получить то же самое.

[email protected](a,b) {(a^2),(b/2)}; 
[x y]=crazyfunction(a,b); 

Быстрый и грязный тест показывает, что это не даст синтаксических ошибок

>> f = @(x,y) {x^2, y/2}; 
>> f(2,2) 

ans = 

    [4] [1] 

РЕДАКТИРОВАНИЕ Разожженный MATLAB, чтобы увидеть мой первоначальный ответ будет на самом деле работать, не похож на него (см второй вам нужно использовать {}).

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

crazyfunction={@(a) (a^2); @(b) (b/2);} 
[crazyfunction{1](7) crazyfunction{2}(9)] 
ans = 
    49.0000  4.5 
3

Хотя вы уже приняли PQL's answer ваш вопрос на самом деле звучит как вы ищете для этого решения с помощью deal:

f = @(x,y) deal(x^2, y/2); 

[u,v] = f(2,2) 

возвращения:

u = 
    4 
v = 
    1 
+0

спасибо за вдохновение. Я знал, что искал что-то относительно массивов ячеек – zhqiat

Смежные вопросы