フィルターのクリア

How do I get fprintf to display several matrices at once while maintaining the desired order?

3 ビュー (過去 30 日間)
I'm having trouble getting the fprintf function to give me the output I want for a practice function I'm writing. The function is designed to accept vector input and convert the values into polar coordinates. It works fine, except that the line at the end where I want to display everything (x,y,r,and theta) in a labeled table rearranges their order. Allow me to use my code to demonstrate.
First, I should clarify that I'm using this as my input:
v =
1 0
1 1
0 1
-1 1
-1 0
-1 -1
0 0
0 -1
1 -1
function M = polarv( v )
%Converts Cartesian coordinates into polar coordinates
%input:
% v = the vectors input into Matlab in i-j form
%output:
% r = radius
% theta = angle with horizontal in degrees
x = v(:,1);
y = v(:,2);
r = [];
angle = [];
for i = 1:length(v);
r = sqrt(x.^2+y.^2);
if (x(i)>0)
angle(i) = atan(y(i)/x(i));
elseif ( x(i) < 0 & y(i) > 0)
angle(i) = atan(y(i)/x(i))+pi;
elseif (x(i) == 0 & y(i) < 0)
angle(i) = -pi/2;
elseif ( x(i) == 0 & y(i) > 0)
angle(i) = pi/2;
elseif (x(i) < 0 & y(i) == 0)
angle(i) = pi;
elseif (x(i) < 0 & y(i) < 0)
angle(i) = atan(y(i)/x(i))-pi;
else
angle(i) = 0;
end
end
theta = (angle*180/pi)';
M = [r,theta];
A = [x,y,r,theta];
fprintf(' x y r theta\n');
A
%fprintf(' %4.3f %4.3f %6.3f %4.2f\n', A);
end
The 'A' at the end is a workaround, to display those values properly because the final commented section isn't working as I would like it to. Here is what I want to see:
1.0000 0 1.0000 0
1.0000 1.0000 1.4142 45.0000
0 1.0000 1.0000 90.0000
-1.0000 1.0000 1.4142 135.0000
-1.0000 0 1.0000 180.0000
-1.0000 -1.0000 1.4142 -135.0000
0 0 0 0
0 -1.0000 1.0000 -90.0000
1.0000 -1.0000 1.4142 -45.0000
Instead, I'm getting this when I run fprintf for A:
1.000 1.000 0.000 -1.00
-1.000 -1.000 0.000 0.00
1.000 0.000 1.000 1.00
1.000 0.000 -1.000 0.00
-1.000 -1.000 1.000 1.41
1.000 1.414 1.000 1.41
0.000 1.000 1.414 0.00
45.000 90.000 135.000 180.00
-135.000 0.000 -90.000 -45.00
As you can see, it is displaying the values of x first, but left-to-right instead of top to bottom. I also have this problem when I use the four column vectors as separate arguments instead of using A. I have also tried using their transverses as inputs, with the same results.

採用された回答

Kevin Claytor
Kevin Claytor 2012 年 9 月 13 日
My guess would be that this is because MATLAB uses column-major order, you could simply transpose the matrix you are sending to fprintf;
A = rand(5);
A
fprintf('%f %f %f %f %f\n',A') % Works properly

その他の回答 (1 件)

Matt Fig
Matt Fig 2012 年 9 月 13 日
編集済み: Matt Fig 2012 年 9 月 13 日
fprintf('\n\n%11s%11s%11s%11s\n','x', 'y', 'r', 'theta');
fprintf(' %10.2f %10.2f %10.2f %10.2f\n', A.');
fprintf('\n\n')
Now check:
>> polarv(v);
x y r theta
1.00 0.00 1.00 0.00
1.00 1.00 1.41 45.00
0.00 1.00 1.00 90.00
-1.00 1.00 1.41 135.00
-1.00 0.00 1.00 180.00
-1.00 -1.00 1.41 -135.00
0.00 0.00 0.00 0.00
0.00 -1.00 1.00 -90.00
1.00 -1.00 1.41 -45.00
>>

カテゴリ

Help Center および File ExchangeAxis Labels についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by