MATLAB Answers

How can I reverse the direction of the rows and columns using printmat?

3 views (last 30 days)
Haitham
Haitham on 2 Jul 2015
Edited: Thorsten on 7 Jul 2015
When I use this code:
Depth_of_cut = [1, 2, 3, 4];
Feedrate = [0.1, 0.2, 0.3, 0.4];
Fv = magic(4);
printmat(Fv,'Tangential Force, N', num2str(Depth_of_cut), num2str(Feedrate))
The result will be:
Tangential Force, N =
0.1 0.2 0.3 0.4
1 16.00000 2.00000 3.00000 13.00000
2 5.00000 11.00000 10.00000 8.00000
3 9.00000 7.00000 6.00000 12.00000
4 4.00000 14.00000 15.00000 1.00000
But I want it to be like:
Tangential Force, N =
4 4.00 14.00 15.00 1.00
3 9.00 7.00 6.00 12.00
2 5.00 11.00 10.00 8.00
1 16.00 2.00 3.00 13.00
0.1 0.2 0.3 0.4
So basically I would like to: 1. Reverse the rows to be started from the bottom to the top (The matrix and the rows numbers). 2. Put the columns numbers in the bottom of the table. 3. If there is a way to control the decimal using printmat would be good, otherwise it will be ok.
Thanks a lot,

  0 Comments

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 2 Jul 2015
Check out the flipud() function.

  3 Comments

Image Analyst
Image Analyst on 3 Jul 2015
Haitham's Answer moved here:
When I tried flipud on the matrix it works, but with rows names it didn't. Then I tried to use the function flip and it works well. So the code now is:
Depth_of_cut = [1, 2, 3, 4];
Feedrate = [0.1, 0.2, 0.3, 0.4];
Fv = magic(4);
printmat(flipud(Fv),'Tangential Force, N', flip(num2str(Depth_of_cut)), num2str(Feedrate))
And the result is:
Tangential Force, N =
0.1 0.2 0.3 0.4
4 4.00000 14.00000 15.00000 1.00000
3 9.00000 7.00000 6.00000 12.00000
2 5.00000 11.00000 10.00000 8.00000
1 16.00000 2.00000 3.00000 13.00000
Which is good. Now, the columns name, any idea how to place it in the bottom of the table.
Thank you.
Image Analyst
Image Analyst on 3 Jul 2015
What are the column names? If you're printing to the command window, you can simply use fprintf() to print whatever you want:
fprintf('Column 1 Column 2 Column 3 Column 4 Column 5'\n');
Haitham
Haitham on 5 Jul 2015
The columns names are: 0.1, 0.2, 0.3 and 0.4 which is the Feedrate values. These values should be entered by the user in terms of the number and the values itself, so we do not know how many columns (number of values) and the values itself. Thus, using fprintf function is not an option as the number of the columns are subjected to change.
By the way, the flip function can be used with both, the matrix and the string as:
printmat(flip(Fv),'Tangential Force, N', flip(num2str(Depth_of_cut)), num2str(Feedrate))

Sign in to comment.

More Answers (1)

Thorsten
Thorsten on 3 Jul 2015
Use my function printmapud:
function printmapud(a,name,rlab,clab)
T = evalc('printmat(flipud(a),name,fliplr(rlab),clab);');
C = regexp(T, '\n', 'split');
ind = [1 2 4:numel(C)-2 3 numel(C)-1 numel(C)];
for i = ind
disp(C{i})
end

  4 Comments

Show 1 older comment
Thorsten
Thorsten on 6 Jul 2015
Strange. If I type
printmatud(Fv,'Tangential Force, N', num2str(Depth_of_cut), num2str(Feedrate))
I get
Tangential Force, N =
4 4.00000 14.00000 15.00000 1.00000
3 9.00000 7.00000 6.00000 12.00000
2 5.00000 11.00000 10.00000 8.00000
1 16.00000 2.00000 3.00000 13.00000
0.1 0.2 0.3 0.4
which is exactly what you want...
Haitham
Haitham on 6 Jul 2015
Oh no! what a mistake! I tried it again and it works well, my mistake, sorry about that. The function works well until 5 columns but when it comes to more than 5 columns it will mess up. Thank you.
Thorsten
Thorsten on 7 Jul 2015
Thank you for re-testing my function. Short comment on the why it "messes up", as you call it: For more than 5 columns it "messes up" by inserting a line break, same as printmat.

Sign in to comment.


Translated by