Anonymous functions with 2 ou more outputs?
10 ビュー (過去 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!