rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
ISeparableOperator.m
1 classdef ISeparableOperator < handle
2 
3  properties (Constant, Abstract)
4  id;
5 
6  ret_vars;
7 
8  arg_vars;
9 
10  end
11 
12  methods (Abstract)
13 
14  res = apply(this, descr, model_data, sim_data);
15 
16  [LL, bb] = full_matrix(this, descr, model_data);
17 
18  [LL_comps, bb_comps] = components(this, descr, model_data);
19 
20  [LL_coeffs, bb_coeffs] = coefficients(this, descr);
21 
22  A = inner_product_matrix(this, descr, model_data);
23  end
24 
25  methods
26  function [LL, bb] = gram_projection(this, model, detailed_data)
27  first_dd = get_by_description(detailed_data, this.arg_vars{1});
28  model_data = first_dd.model_data;
29 
30  [L,bb] = full_matrix(this, descr, model_data);
31 
32  RB = cell(1, length(this.arg_vars));
33  for i = 1:length(this.arg_vars)
34  dd_i = get_by_description(detailed_data, this.arg_vars{i});
35  RB{i} = dd_i.RB;
36  end
37  RB = cat(1, RB{:});
38 
39  LL = L * RB;
40 
41  if ~isempty(this.ret_vars)
42  A = inner_product_matrix(this, model, model_data);
43 
44  RB = cell(1, length(this.ret_vars));
45  for i = 1:length(this.ret_vars)
46  dd_i = get_by_description(detailed_data, this.ret_vars{i});
47  RB{i} = dd_i.RB;
48  end
49  RB = cat(1, RB{:});
50  LL = RB' * A * LL;
51  bb = bb * A * RB;
52  end
53  end
54 
55  function [LL_comps, bb_comps] = gram_project_components(this, rmodel, detailed_data)
56  first_dd = get_by_description(detailed_data, this.arg_vars{1});
57  model_data = first_dd.model_data;
58 
59  RB = cell(1, length(this.arg_vars));
60  for i = 1:length(this.arg_vars)
61  dd_i = get_by_description(detailed_data, this.arg_vars{i});
62  N_i = get_by_description(rmodel.N, this.arg_vars{i});
63  RB{i} = dd_i.RB(:,1:N_i);
64  end
65  RB = cat(1, RB{:});
66 
67  [L_comps, bb_comps] = components(this, rmodel.descr, model_data);
68  LL_comps = cellfun(@(X) X * RB, L_comps, 'UniformOutput', false);
69 
70  if ~isempty(this.ret_vars)
71  A = inner_product_matrix(this, rmodel, model_data);
72 
73  RB = cell(1, length(this.ret_vars));
74  for i = 1:length(this.ret_vars)
75  dd_i = get_by_description(detailed_data, this.ret_vars{i});
76  N_i = get_by_description(rmodel.N, this.ret_vars{i});
77  RB{i} = dd_i.RB(:,1:N_i);
78  end
79  RB = cat(1, RB{:});
80 
81  LL_comps = cellfun(@(X) RB' * A * X, ...
82  LL_comps, 'UniformOutput', false);
83  bb_comps = cellfun(@(X) RB' * A * X, ...
84  bb_comps, 'UniformOutput', false);
85  end
86 
87  end
88  end
89 end