comparison +grid/evalOn.m @ 609:8cbecf22075b feature/utux2D

Merge to get interpolation operators.
author Martin Almquist <malmquist@stanford.edu>
date Sat, 14 Oct 2017 22:36:31 -0700
parents 0546de4b31a2
children 0813d700a816
comparison
equal deleted inserted replaced
605:0f9d20dbb7ce 609:8cbecf22075b
21 nargin(func) 21 nargin(func)
22 error('grid:evalOn:WrongNumberOfInputs', 'The number of inputs of the function must match the dimension of the domain.') 22 error('grid:evalOn:WrongNumberOfInputs', 'The number of inputs of the function must match the dimension of the domain.')
23 end 23 end
24 24
25 25
26 % Get coordinates and convert to cell array for easier use as a parameter 26 % Get coordinates
27 x = num2cell(g.points()); 27 x = g.points();
28 28
29 % Find the number of components 29 % Find the number of components
30 if size(x,1) ~= 0 30 if size(x,1) ~= 0
31 x0 = x(1,:); 31 x0 = x(1,:);
32 else 32 else
33 x0 = num2cell(ones(1,size(x,2))); 33 x0 = num2cell(ones(1,size(x,2)));
34 end 34 end
35 f0 = func(x0{:}); 35
36 dim = length(x0);
37 % Evaluate f0 = func(x0(1),x0(2),...,x0(dim));
38 if(dim == 1)
39 f0 = func(x0);
40 else
41 eval_str = 'f0 = func(x0(1)';
42 for i = 2:dim
43 eval_str = [eval_str, sprintf(',x0(%d)',i)];
44 end
45 eval_str = [eval_str, ');'];
46 eval(eval_str);
47 end
48
49 % k = number of components
36 k = length(f0); 50 k = length(f0);
37 51
38 if size(f0,2) ~= 1 52 if size(f0,2) ~= 1
39 error('grid:evalOn:VectorValuedWrongDim', 'A vector valued function must be given as a column vector') 53 error('grid:evalOn:VectorValuedWrongDim', 'A vector valued function must be given as a column vector')
40 end 54 end
41 55
56 % Evaluate gf = func(x(:,1),x(:,2),...,x(:,dim));
57 if(dim == 1)
58 gf = func(x);
59 else
60 eval_str = 'gf = func(x(:,1)';
61 for i = 2:dim
62 eval_str = [eval_str, sprintf(',x(:,%d)',i)];
63 end
64 eval_str = [eval_str, ');'];
65 eval(eval_str);
66 end
67
68 % Reorganize gf
69 gf_temp = gf;
42 gf = zeros(g.N*k, 1); 70 gf = zeros(g.N*k, 1);
43 % keyboard 71 for i = 1:k
44 for i = 1:g.N 72 gf(i:k:end) = gf_temp((i-1)*g.N + 1 : i*g.N);
45 % (1 + (i-1)*k):(i*k)
46 % func(x{i,:})
47 gf((1 + (i-1)*k):(i*k)) = func(x{i,:});
48 end 73 end
49 end 74 end