Anonymous functions with 2 ou more outputs?
8 次查看(过去 30 天)
显示 更早的评论
Hi,
I would like to know if it's possible to program an anonymous function with more than one output WITHOUT using another already defined function that have more than 1 output (I know this is actually possible). I need to program an anonymous function which takes a matriz with P+Q columns and "breaks" it in 2 matrixes: A and B, where A has P columns and B has Q columns. So the function output would be [A, B]. It'd really help me.
Thanks in advance, Guilherme
采纳的回答
Paulo Silva
2011-7-15
m=[1 2;3 4;5 6]
fcol=@(x)deal(x(:,1),x(:,2))
[a b]=fcol(m)
In this simple case you only got 2 columns but you can expand it to multiple columns.
m=[1 2 3 4;5 6 7 8;9 10 11 12]
fcol=@(x)deal(x(:,1:2),x(:,3:4))
[a b]=fcol(m)
4 个评论
Paulo Silva
2011-7-15
You don't even need the anonymous function
m=[1 2 3 4;5 6 7 8;9 10 11 12]
[a b]=deal(m(:,1:2),m(:,3:4))
Tobias Hübner
2021-3-31
Thank you for this elegant solution!!!
In combination with tables and rowfun more than helpful
更多回答(1 个)
Oleg Komarov
2011-7-15
[f,g] = @(x) x+1
??? Error: Only functions can return multiple values.
If you post some code we could try to find a different solution.
Also, does this help?:
A = rand(10,10);
A = mat2cell(A,10,[5 5]);
[B,C] = A{:};
4 个评论
Francois
2018-12-1
After many years of frustration with the fact that Matlab does not allow multiple outputs from anonymous functions, I have finally come up with a solution. It's not elegant but it works. I have created a function called mydeal.m which I put in my matlab directory
function varargout = mydeal(x)
for k = 1:length(x)
varargout{k} = x{k};
end
Now when I want an inline function with multiple outputs I just wrap a cellarray of outpus in mydeal():
Here is a simple example showing how to create an inline function that returns the a vector valued function, its gradient, and its hessian:
>> x0 = [1;1;1]; W = diag([2;4;16]);
>> f = @(x) mydeal( { 0.5*(x-x0)'*W*(x-x0), (x-x0)'*W, W } );
>> [f0,g0,H0] = f([1;2;3])
f0 =
34
g0 =
0 4 32
H0 =
2 0 0
0 4 0
0 0 16
Now if only mydeal.m could be made part of the standard matlab libraries then I could create simple inline examples in the help block of my functions that take in as input functions with multiple outputs.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Function Creation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!