MATLAB: Display Results as nicely formatted table

bisectionfunctionitteration

in this codes, how do I get the resalts as a nice table showing step by step iterations clarifying more collums would be
itteration, lower, upper, f(lower), f(upper), f(xc), f(c), xupper-xlower
function y = f(x) y = x.^3 – 2;
exists. Then:
>> format long
>> eps_abs = 1e-5;
>> eps_step = 1e-5;
>> a = 0.0;
>> b = 2.0;
>> while (b - a >= eps_step || ( abs( f(a) ) >= eps_abs && abs( f(b) ) >= eps_abs ) )
c = (a + b)/2;
if ( f(c) == 0 )
break;
elseif ( f(a)*f(c) < 0 )
b = c;
else
a = c;
end
end
>> [a b]
ans = 1.259918212890625 1.259925842285156
>> abs(f(a))
ans = 0.0000135103601622
>> abs(f(b))
ans = 0.0000228224229404

Best Answer

I have no idea what f(xc) is so I didn't included it, don't use the following code to benchmark your function because it's slower (datasave isn't preallocated), use it only to get a nice table of values and have another function that doesn't make the table for benchmarks (tic toc or profiler).
Using the format short:
clc
fprintf(' itteration lower upper f(lower) f(upper) f(c) xupper-xlower\n')
clear
f=@(x) x.^3 - 2;
format short
eps_abs = 1e-5;
eps_step = 1e-5;
a = 0;
b = 2.0;
iter=0;
datasave=[];
while (b - a >= eps_step || ( abs( f(a) ) >= eps_abs && abs( f(b) ) >= eps_abs ) )
iter=iter+1;
c = (a + b)/2;
datasave=[datasave; iter a b f(a) f(b) f(c) b-a];
if ( f(c) == 0 )
break;
elseif ( f(a)*f(c) < 0 )
b = c;
else
a = c;
end
end
disp(datasave)
The output looks like this:
itteration lower upper f(lower) f(upper) f(c) xupper-xlower
1.0000 0 2.0000 -2.0000 6.0000 NaN 2.0000
2.0000 1.0000 2.0000 -1.0000 6.0000 -1.0000 1.0000
3.0000 1.0000 1.5000 -1.0000 1.3750 1.3750 0.5000
4.0000 1.2500 1.5000 -0.0469 1.3750 -0.0469 0.2500
5.0000 1.2500 1.3750 -0.0469 0.5996 0.5996 0.1250
6.0000 1.2500 1.3125 -0.0469 0.2610 0.2610 0.0625
7.0000 1.2500 1.2813 -0.0469 0.1033 0.1033 0.0313
8.0000 1.2500 1.2656 -0.0469 0.0273 0.0273 0.0156
9.0000 1.2578 1.2656 -0.0100 0.0273 -0.0100 0.0078
10.0000 1.2578 1.2617 -0.0100 0.0086 0.0086 0.0039
11.0000 1.2598 1.2617 -0.0007 0.0086 -0.0007 0.0020
12.0000 1.2598 1.2607 -0.0007 0.0039 0.0039 0.0010
13.0000 1.2598 1.2603 -0.0007 0.0016 0.0016 0.0005
14.0000 1.2598 1.2600 -0.0007 0.0004 0.0004 0.0002
15.0000 1.2599 1.2600 -0.0002 0.0004 -0.0002 0.0001
16.0000 1.2599 1.2599 -0.0002 0.0001 0.0001 0.0001
17.0000 1.2599 1.2599 -0.0000 0.0001 -0.0000 0.0000
18.0000 1.2599 1.2599 -0.0000 0.0001 0.0001 0.0000
19.0000 1.2599 1.2599 -0.0000 0.0000 0.0000 0.0000
Using the format long:
clc
fprintf(' itteration lower upper f(lower) f(upper) f(c) xupper-xlower\n')
clear
f=@(x) x.^3 - 2;
format long
eps_abs = 1e-5;
eps_step = 1e-5;
a = 0;
b = 2.0;
iter=0;
datasave=[];
while (b - a >= eps_step || ( abs( f(a) ) >= eps_abs && abs( f(b) ) >= eps_abs ) )
iter=iter+1;
c = (a + b)/2;
datasave=[datasave; iter a b f(a) f(b) f(c) b-a];
if ( f(c) == 0 )
break;
elseif ( f(a)*f(c) < 0 )
b = c;
else
a = c;
end
end
disp(datasave)
The output looks like this:
itteration lower upper f(lower) f(upper) f(c) xupper-xlower
1.000000000000000 0 2.000000000000000 -2.000000000000000 6.000000000000000 NaN 2.000000000000000
2.000000000000000 1.000000000000000 2.000000000000000 -1.000000000000000 6.000000000000000 -1.000000000000000 1.000000000000000
3.000000000000000 1.000000000000000 1.500000000000000 -1.000000000000000 1.375000000000000 1.375000000000000 0.500000000000000
4.000000000000000 1.250000000000000 1.500000000000000 -0.046875000000000 1.375000000000000 -0.046875000000000 0.250000000000000
5.000000000000000 1.250000000000000 1.375000000000000 -0.046875000000000 0.599609375000000 0.599609375000000 0.125000000000000
6.000000000000000 1.250000000000000 1.312500000000000 -0.046875000000000 0.260986328125000 0.260986328125000 0.062500000000000
7.000000000000000 1.250000000000000 1.281250000000000 -0.046875000000000 0.103302001953125 0.103302001953125 0.031250000000000
8.000000000000000 1.250000000000000 1.265625000000000 -0.046875000000000 0.027286529541016 0.027286529541016 0.015625000000000
9.000000000000000 1.257812500000000 1.265625000000000 -0.010024547576904 0.027286529541016 -0.010024547576904 0.007812500000000
10.000000000000000 1.257812500000000 1.261718750000000 -0.010024547576904 0.008573234081268 0.008573234081268 0.003906250000000
11.000000000000000 1.259765625000000 1.261718750000000 -0.000740073621273 0.008573234081268 -0.000740073621273 0.001953125000000
12.000000000000000 1.259765625000000 1.260742187500000 -0.000740073621273 0.003912973217666 0.003912973217666 0.000976562500000
13.000000000000000 1.259765625000000 1.260253906250000 -0.000740073621273 0.001585548394360 0.001585548394360 0.000488281250000
14.000000000000000 1.259765625000000 1.260009765625000 -0.000740073621273 0.000422512079240 0.000422512079240 0.000244140625000
15.000000000000000 1.259887695312500 1.260009765625000 -0.000158837092386 0.000422512079240 -0.000158837092386 0.000122070312500
16.000000000000000 1.259887695312500 1.259948730468750 -0.000158837092386 0.000131823412403 0.000131823412403 0.000061035156250
17.000000000000000 1.259918212890625 1.259948730468750 -0.000013510360162 0.000131823412403 -0.000013510360162 0.000030517578125
18.000000000000000 1.259918212890625 1.259933471679688 -0.000013510360162 0.000059155646067 0.000059155646067 0.000015258789063
19.000000000000000 1.259918212890625 1.259925842285156 -0.000013510360162 0.000022822422940 0.000022822422940 0.000007629394531