Using fprintf to create a table of values

49 views (last 30 days)
I am trying to get a table that looks like this while using fprintf. It is supposed to be left justified and the first column with no decimal places and the 2nd column 6 decimal places.
n h
------------
1.0000 1.0000
2.0000 1.5000
3.0000 1.8333
4.0000 2.0833
5.0000 2.2833
6.0000 2.4500
7.0000 2.5929
8.0000 2.7179
9.0000 2.8290
10.0000 2.9290
11.0000 3.0199
12.0000 3.1032
13.0000 3.1801
14.0000 3.2516
15.0000 3.3182
16.0000 3.3807
17.0000 3.4396
18.0000 3.4951
19.0000 3.5477
20.0000 3.5977
i tried this code but the columns and rows keep messing up
N = 20;
n = (1:1:20)';
h = cumsum(1./n);
m = [n h]
fprintf(' n h\n')
fprintf('----------\n')
fprintf('%-2.0f %-9.6f\n',m)
and i keep getting this as a result
n h
------------
1 2.000000
3 4.000000
5 6.000000
7 8.000000
9 10.000000
11 12.000000
13 14.000000
15 16.000000
17 18.000000
19 20.000000
1 1.500000
2 2.083333
2 2.450000
3 2.717857
3 2.928968
3 3.103211
3 3.251562
3 3.380729
3 3.495108
4 3.597740
>> how can I change this to look like the first table?

Answers (1)

Stephen23
Stephen23 on 9 Feb 2019
Edited: Stephen23 on 9 Feb 2019
Remember that MATLAB is column-major, so it works down the columns first. Pay careful attention to the orientation of the vectors:
n = 1:20;
h = cumsum(1./n);
m = [n;h];
fprintf(' n h\n')
fprintf('----------\n')
fprintf('%-2.0f %-9.6f\n',m)
giving:
n h
----------
1 1.000000
2 1.500000
3 1.833333
4 2.083333
5 2.283333
6 2.450000
7 2.592857
8 2.717857
9 2.828968
10 2.928968
11 3.019877
12 3.103211
13 3.180134
14 3.251562
15 3.318229
16 3.380729
17 3.439553
18 3.495108
19 3.547740
20 3.597740
  2 Comments
James Thorpe
James Thorpe on 17 Feb 2021
If you wanted to print the table in scientific notation with 4 significant digits, how would you go about it?

Sign in to comment.

Categories

Find more on Tables in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!