MATLAB Answers

How to operate on multiple function outputs?

조회 수: 4(최근 30일)
Matt
Matt 2014년 5월 16일
답변: Matt 2017년 11월 29일
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
Matt 2017년 11월 29일
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;

추가 답변(1개)

the cyclist
the cyclist 2014년 5월 17일
x = cell(1,3);
[x{:}] = dcm2angle(t, 'XYZ') * 180 / pi;
  댓글 수: 2
the cyclist
the cyclist 2014년 5월 20일
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()

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by