Mercurial > repos > public > sbplib
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 |