Mercurial > repos > public > sbplib
annotate +grid/evalOnScalar.m @ 1198:2924b3a9b921 feature/d2_compatible
Add OpSet for fully compatible D2Variable, created from regular D2Variable by replacing d1 by first row of D1. Formal reduction by one order of accuracy at the boundary point.
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Fri, 16 Aug 2019 14:30:28 -0700 |
parents | 3ea2ae2a3d15 |
children |
rev | line source |
---|---|
275
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
1 % WHAT KIND OF A FUNCTION NAME IS THIS?! |
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
2 % This functions send matrixa arguments to func unlike grid.evalOn() |
273
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 % Takes a funciton and evaluates it on a grid to return a grid function in the |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 % form of a (n*k)x1 vector, where n is the number of grid points and k is the |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 % number of components of the function. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 % g -- Grid to evaluate on. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 % func -- Function to evaluate. May be a function handle or a constant. If |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
8 % it is a vector value it has to be provided as a column vector, |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
9 function gf = evalOn(g, func) |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 if ~isa(func, 'function_handle') |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
11 % We should have a constant. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 if size(func,2) ~= 1 |
275
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
13 error('grid:evalOnScalar:VectorValuedWrongDim', 'A vector valued function must be given as a column vector') |
273
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 gf = repmat(func,[g.N, 1]); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 return |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 % func should now be a function_handle |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 % Get coordinates and convert to cell array for easier use as a parameter |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 x = g.points(); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 X = {}; |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 for i = 1:size(x, 2) |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 X{i} = x(:,i); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 % Find the number of components |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 x0 = num2cell(x(1,:)); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 f0 = func(x0{:}); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 k = length(f0); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 if size(f0,2) ~= 1 |
275
3ea2ae2a3d15
Improvments to eval on grids. Added function to extrac components of a vector gf.
Jonatan Werpers <jonatan@werpers.com>
parents:
273
diff
changeset
|
34 error('grid:evalOnScalar:VectorValuedWrongDim', 'A vector valued function must be given as a column vector') |
273
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 gf = func(X{:}); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 if k > 1 % Reorder so that componets sits together. |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 gf = reshape(reshape(gf, [g.N, k])', [g.N*k, 1]); |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 end |
f688e2bdb74a
grid: Added evalOn for scalar functions.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 end |