# How to operate on multiple function outputs?

32 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.

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;

the cyclist on 17 May 2014
x = cell(1,3);
[x{:}] = dcm2angle(t, 'XYZ') * 180 / pi;

Matt on 19 May 2014
Using version 2013a this throws an error.
[x{:}] = dcm2angle(t,'XYZ') * 180 / pi
Error using /
Too many output arguments.
Adding .* and ./ did not correct the error. Runnig just the RHS gives:
dcm2angle(t,'XYZ') * 180 / pi
ans =
177.344765026818
Modifying the RHS slightly:
dcm2angle(t,'XYZ') .* (180/pi)
ans =
177.344765026818
Still does not produce multiple outputs.
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:
x = 1;
y = 2;
z = 3;
end
and then calling
x = cell(1,3);