comparison convergenceTable.m @ 23:ad1a41d135a1

Added function to calculate convergence given errors. Added function to print convergence table (not finished.)
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 25 Sep 2015 11:08:47 +0200
parents
children ddfb98209aa2
comparison
equal deleted inserted replaced
22:30b6e72db1a3 23:ad1a41d135a1
1 function convergenceTable(methodName, T, orders, m, e, q, tableType)
2 default_arg('tableType','plaintext')
3
4 switch tableType
5 case {'plaintext','text','plain'}
6 plainTextTable(methodName, T, orders, m, e, q);
7 case {'tex', 'latex'}
8 latexTable(methodName, T, orders, m, e, q);
9 end
10 end
11
12 function plainTextTable(methodName, T, orders, m, e, q)
13 description = sprintf('method: %s\nT: %d\n');
14
15
16 eW = 0;
17 qW = 0;
18 for i = 1:length(orders)
19 log_e{i} = log10(e{i});
20 eW = max(eW, findFieldWidth('%.2f',log_e{i}));
21 qW = max(qW, findFieldWidth('%.2f',q{i}));
22 end
23
24 mW = findFieldWidth('%d',m);
25 orderHeaderWidth = eW + qW + 1;
26
27
28 % Print order headers
29 fprintf(' %*s |',mW,'')
30 for i = 1:length(orders)
31 fprintf(' %-*s |', orderHeaderWidth, sprintf('Order %d', orders{i}));
32 end
33 fprintf('\n');
34
35
36 % Print eq headers
37 fprintf(' %*s |',mW,'m');
38 for i = 1:length(orders)
39 fprintf(' %*s %*s |', eW, 'e', qW, 'q');
40 end
41 fprintf('\n');
42
43
44 % Print devider
45 m_dev = repmat('-',1,mW);
46 column_dev = repmat('-',1,orderHeaderWidth);
47 fprintf('-%s-+',m_dev);
48 for i = 1:length(orders)
49 fprintf('-%s-+', column_dev);
50 end
51 fprintf('\n');
52
53
54
55 % Print each row
56 for i = 1:length(m)
57 fprintf(' %*d |',mW,m(i));
58 for j = 1:length(orders)
59 fprintf(' %*.2f %*.2f |', eW, log_e{j}(i), qW, q{j}(i));
60 end
61 fprintf('\n');
62 end
63
64 end
65
66 function latexTable(methodName, T, orders, m, e, q)
67
68 nOrders = length(orders);
69
70 header = {
71 '\begin{table}[H]'
72 '\centering'
73 ['\begin{tabular}{c' repmat('|cc',1,nOrders) '} &']
74 orderheaders(orders)
75 '\hline'
76 ['$N$' repmat('& $log_{10}(l_2)$ & $q$',1,nOrders) ' \\']
77 '\hline'
78 };
79
80 footer = {
81 '\end{tabular}'
82 '\caption{Error $l_2$, and convergence rate, $q$, for SBP operators of orders 4 and 6 at different grid densities $N$. PROBLEM DESCRIPTION.}'
83 '\label{table:LABEL}'
84 '\end{table}'
85 };
86
87 data = cell(1,length(m));
88 data{1} = num2str(m(1));
89 for j = 1:nOrders
90 data{1} = [data{1} ' & ' sprintf('%8.2f',log10(orders(j).e(1))) ' & ' ];
91 end
92 data{1} = [data{1} '\\'];
93
94 for i = 2:length(m)
95 data{i} = [data{i} num2str(m(i)) ];
96 for j = 1:nOrders
97 data{i} = [data{i} ' & ' sprintf('%8.2f',log10(orders(j).e(i))) ' & ' sprintf('%8.2f',(orders(j).q(i-1))) ];
98 end
99 data{i} = [data{i} '\\'];
100 end
101
102 nlc = sprintf('\n');
103
104 header = strjoin(header', nlc);
105 data = strjoin(data, nlc);
106 footer = strjoin(footer', nlc);
107
108 table = strjoin({header, data, footer}, nlc);
109 fprintf('%s\n', table);
110 end
111
112
113
114 function s = orderheaders(orders)
115 s= sprintf('\\multicolumn{2}{|c}{%dth order}',orders(1).order);
116 nOrders = length(orders);
117 for i = 2:nOrders
118 s = [s sprintf('& \\multicolumn{2}{|c}{%dth order}',orders(i).order)];
119 end
120 s = [s ' \\'];
121 end