MATLAB Answers

# How to operate on multiple function outputs?

6 views (last 30 days)
Matt on 16 May 2014
Answered: Matt on 29 Nov 2017
Take this as an exmaple
t = [0.997020539 -0.07615956 0.0122; -0.076640022 -0.996018987 0.04553; 0.008683887 -0.046323856 -0.99888];
x = dcm2angle(t, 'XYZ') * 180 / pi
x =
177.344786261912
This is the first value only. I can get what I want by doing the following.
[x(1) x(2) x(3)] = dcm2angle(t,'XYZ'); x = x * 180 / pi
x =
Columns 1 through 2
177.344786261912 0.49755632844709
Column 3
4.39562805575083
I want a way to do something like x = [dcm2angle(t, 'XYZ')] * 180 /pi;
Any ideas? I tried the above, with {} and deal(), none did the trick.
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

Matt on 29 Nov 2017
I found a workaround. Hopefully someone will come here and find a better option. I wrapped the dcm2angle function in another function that combines the output. Basically this:
function [out] = Mydcm2angle( T, sequence )
[out(1), out(2), out(3)] = dcm2angle(T, sequence);
end
Then the output can be used as:
result = Mydcm2angle(t, 'XYZ') * 180 / pi;
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### More Answers (1)

the cyclist on 17 May 2014
x = cell(1,3);
[x{:}] = dcm2angle(t, 'XYZ') * 180 / pi;
##### 2 CommentsShowHide 1 older comment
the cyclist on 20 May 2014
Hm. Just to be clear, you did the preallocation step?
x = cell(1,3);
Maybe try
x = cell(3,1);
Also, I don't have the Aerospace Toolbox, so I was only going by the online documentation, and then created my own function as follows:
function [x,y,z] = answerTest()
x = 1;
y = 2;
z = 3;
end
and then calling
x = cell(1,3);
[x{:}] = answerTest()

Sign in to comment.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!