comparison +noname/convergence.m @ 32:ddfb98209aa2

Fixed a bunch of problems regarding convergence and saving solutions
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 29 Sep 2015 09:22:22 +0200
parents
children c6eb3af205c0
comparison
equal deleted inserted replaced
31:d1f9dd55a2b0 32:ddfb98209aa2
1 % Reference is either a key or a function handle
2 function [q, e, h] = convergence(filename, errorFunc, reference, method, order, m, T)
3 default_arg('errorFunc', @scheme.error1d);
4
5 sf = SolutionFile(filename);
6
7 analytical_ref = isa(reference,'function_handle');
8 if ~analytical_ref
9 reference = sf.get(reference);
10 end
11
12
13 % Generate convergence, error, and efficiency plots for each search key with more than one entry.
14 for i = 1:length(m)
15 key.method = method;
16 key.order = order;
17 key.m = m(i);
18 key.T = T;
19
20 entry = sf.get(key);
21
22 [e(i),h(i)] = errorForEntry(key, entry, errorFunc, reference,T);
23
24 end
25 q = convergence(e,h);
26 end
27
28 function [e, h] = errorForEntry(key,entry, errorFunc, reference,T)
29 v_repr = entry.repr;
30 discr = entry.discr;
31
32 % Get the solution to be compared
33 v = v_repr.v;
34
35 % Get the reference solution vector
36 if isa(reference,'function_handle');
37 x = v_repr.x;
38 v_ref = reference(x,T);
39 else
40 % Downsample the reference solution
41 x = v_repr.x;
42 x_ref = reference.x;
43
44 [~,I] = ismember(x,x_ref,'rows');
45 v_ref = reference.v(I);
46 end
47
48 e = errorFunc(discr,v, v_ref);
49 h = discr.h;
50 end