-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcombine_dimensions_D.m
57 lines (40 loc) · 1.29 KB
/
combine_dimensions_D.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
function [fval] = combine_dimensions_D (deg, function_D, time_multiplier, hash_table, use_oldhash)
% Combine (via kron product) a set of 1D multiwavelet transforms to form
% the higher D sparse-grid multiwavelet representation.
num_dims = numel(function_D);
if use_oldhash
num_elements = numel(hash_table);
else
num_elements = numel(hash_table.elements_idx);
end
fval = zeros(deg^num_dims * num_elements,1);
for i=1:num_elements
%%
% Kron product approach
for d=1:num_dims
if use_oldhash
ll=hash_table{i};
idx_1D = ll(num_dims*2+d);
else
lev = hash_table.elements.lev_p1(hash_table.elements_idx(i),d)-1;
pos = hash_table.elements.pos_p1(hash_table.elements_idx(i),d)-1;
idx_1D = lev_cell_to_1D_index(lev,pos);
end
index_D = [(idx_1D-1)*deg+1 : idx_1D*deg];
kron_mat_list{d} = function_D{d}(index_D);
end
B = time_multiplier;
use_krond = 1;
if use_krond
A = krond (num_dims, kron_mat_list);
else
A = 1;
for d=1:num_dims
A = kron (A, kron_mat_list{d});
end
end
tmp = A * B;
Index = deg^num_dims*(i-1)+1:deg^num_dims*i;
fval(Index,1) = fval(Index,1) + tmp(:);
end
end