annotate +noname/convergence.m @ 87:0a29a60e0b21

In Curve: Rearranged for speed. arc_length_fun is now a property of Curve. If it is not supplied, it is computed via the derivative and spline fitting. Switching to the arc length parameterization is much faster now. The new stuff can be tested with testArcLength.m (which should be deleted after that).
author Martin Almquist <martin.almquist@it.uu.se>
date Sun, 29 Nov 2015 22:23:09 +0100
parents c6eb3af205c0
children 7bb2ef637142
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
36
c6eb3af205c0 Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents: 32
diff changeset
2 function [q, e, h, runtime] = convergence(filename, errorFunc, reference, method, order, m, T)
32
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
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 % 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
9 for i = 1:length(m)
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 key.method = method;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 key.order = order;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 key.m = m(i);
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 key.T = T;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 entry = sf.get(key);
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 [e(i),h(i)] = errorForEntry(key, entry, errorFunc, reference,T);
36
c6eb3af205c0 Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents: 32
diff changeset
18 runtime(i) = entry.runtime;
32
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 end
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 q = convergence(e,h);
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 end
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 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
25 v_repr = entry.repr;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 discr = entry.discr;
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 % 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
29 v = v_repr.v;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 % Get the reference solution vector
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 if isa(reference,'function_handle');
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 x = v_repr.x;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 v_ref = reference(x,T);
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 else
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 % Downsample the reference solution
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 x_ref = reference.x;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 [~,I] = ismember(x,x_ref,'rows');
36
c6eb3af205c0 Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents: 32
diff changeset
41 if any(I == 0)
c6eb3af205c0 Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents: 32
diff changeset
42 error('Solution and reference solution seem to be on different grids.');
c6eb3af205c0 Better error handeling in noname.convergence. Better handeling of T=0 in noname.calculateSolution
Jonatan Werpers <jonatan@werpers.com>
parents: 32
diff changeset
43 end
32
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 v_ref = reference.v(I);
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 end
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 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
48 h = discr.h;
ddfb98209aa2 Fixed a bunch of problems regarding convergence and saving solutions
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 end