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