n 1 2 3 4 5 | x 0.1419 0.4218 0.9157 0.7922 0.9595 | y 103.4693 72.6885 -30.3441 29.3871 -78.7283 |
>> [n, x, y]För att slippa se ans utskrivet kan man använda disp-funktionen:
ans =
1.0000 0.1419 103.4693
2.0000 0.4218 72.6885
3.0000 0.9157 -30.3441
4.0000 0.7922 29.3871
5.0000 0.9595 -78.7283
>> disp([n, x, y])Låt oss multiplicera y(1) med 1000 så att det är större spridning på talens storleksordningar. Standardformatet fungerar då inte så bra:
1.0000 0.1419 103.4693
2.0000 0.4218 72.6885
3.0000 0.9157 -30.3441
4.0000 0.7922 29.3871
5.0000 0.9595 -78.7283
>> disp([n, x, y])Byter vi till format short e, ser vi i alla fall talen, men snyggt blir det inte
1.0e+05 *
0.0000 0.0000 1.0347
0.0000 0.0000 0.0007
0.0000 0.0000 -0.0003
0.0000 0.0000 0.0003
0.0001 0.0000 -0.0008
>> format short eFår att få detta snyggt får vi använda så kallade format (layout-beskrivningar) av talen i de tre kolonnerna. Vi vill ha heltalsformat i första kolonnen, format med decimaler men utan exponentdel i andra kolonnen och ett format med decimaler och exponentdel i tredje. Matlab har hämtat syntax för formatkoder från programspråket C, och det ser lite kryptiskt ut. Formatkoden %md anger att ett tal kommer att skrivas ut som ett heltal som upptar m positioner (fältvidden) i tabellen. De tal som skrivs ut med detta format skall ha en decimaldel som är noll. Formatkoden %m.nf skriver ut ett decimaltal med fältvidden m och n decimaler. %m.ne fungerar som föregående med den skillnaden att man får en exponentdel också. Dessa formatkoder förpackas i en sträng som utgör det första argumentet till fprint-funktionen. \n står slutligen för newline (ny rad). Så här kan det se ut:
>> disp([n, x, y])
1.0000e+00 1.4189e-01 1.0347e+05
2.0000e+00 4.2176e-01 7.2689e+01
3.0000e+00 9.1574e-01 -3.0344e+01
4.0000e+00 7.9221e-01 2.9387e+01
5.0000e+00 9.5949e-01 -7.8728e+01
>> fprintf('%3d%10.4f%15.4e\n', [n, x, y]')Det är viktigt att inte glömma transponatet, ', efter matrisen [n, x, y]. fprintf läser element efter element från minnet. Matlab lagrar matriser kolonn efter kolonn i minnet och eftersom formatet beskriver en rad i matrisen, vill vi att fprintf skall läsa elementen i ordningen n(1), x(1), y(1), n(2), x(2), y(2) etc. Om vi glömmer transponatet kommer fprintf att läsa elementen i ordningen n(1), n(2), n(3), n(4), n(5), x(1) etc. och vi får fel utskrift.
1 0.1419 1.0347e+05
2 0.4218 7.2689e+01
3 0.9157 -3.0344e+01
4 0.7922 2.9387e+01
5 0.9595 -7.8728e+01
>> fprintf('%3d %10.4f %15.4e\n', [n, x, y]')Vi vill kanske ha en rubrik över tabellen också. Det enklaste att skriva den separat. Säg vi har ett program som innehåller raderna:
1 0.1419 1.0347e+05
2 0.4218 7.2689e+01
3 0.9157 -3.0344e+01
4 0.7922 2.9387e+01
5 0.9595 -7.8728e+01
fprintf(' n x y\n -----------------------------\n')Detta ger utskriften
fprintf('%3d %10.2f %15.2e\n', [n, x, y]')
n x yMer detaljer och alternativ finns i den stora hjälpen för fprintf (ge alternativt kommandot doc fprintf).
-----------------------------
1 0.14 1.03e+05
2 0.42 7.27e+01
3 0.92 -3.03e+01
4 0.79 2.94e+01
5 0.96 -7.87e+01