KerMor  0.9
Model order reduction for nonlinear dynamical systems and nonlinear approximation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Wendland.cpp
Go to the documentation of this file.
1 /*
2  * Wendland.cpp
3  *
4  * Created on: 22.07.2013
5  * Author: CreaByte
6  */
7 
8 #include "kermorpp.h"
9 #include <iostream>
10 
11 namespace kermorpp {
12 
13 Wendland.Wendland(double gamma, int d, int k) :
14  RBFKernel(gamma), _d(d), _k(k) {
15 }
16 
18 }
19 
20 MatrixXd Wendland.rbf_eval_rsq(MatrixXd rsq) {
21  // Default implementation: Gaussian (r^2 is passed)
22 
23 
24  MatrixXd r = rsq.cwiseSqrt();
25  MatrixXd one = MatrixXd.Ones(r.rows(),r.cols());
26  int l = floor(_d / 2.0) + _k + 1;
27  MatrixXd p;
28 
29  //cout << "rsq: " << rsq << ", r: " << r << ", l: " << l << endl;
30  // +1 is done at end
31  switch (_k) {
32  case 1:
33  p = (l + 1) * r + one;
34  break;
35  case 2:
36  p = (l * l + 4 * l + 3) * rsq / 3 + (l + 2) * r + one;
37  break;
38  case 3:
39  p = ((l * l * l + 9 * l * l + 23 * l + 15) * rsq.cwiseProduct(r)
40  + (6 * l * l + 36 * l + 45) * rsq) / 15 + (l + 3) * r + one;
41  break;
42  default:
43  p = MatrixXd.Zero(rsq.rows(), rsq.cols());
44  return p;
45  }
46 
47  MatrixXd arg = (one-r).cwiseMax(0);
48 
49  //cout << "p: " << p << ", arg: " << arg << endl;
50 
51  return arg.unaryExpr(internal.scalar_pow_op<double>(l + _k)).cwiseProduct(p);
52  //return std.max(0.0, pow((1 - r), l + _k)) * p;
53 }
54 }
Wendland(double gamma, int d, int k)
Definition: Wendland.cpp:13
MatrixXd rbf_eval_rsq(MatrixXd rsq)
Definition: Wendland.cpp:20
virtual ~Wendland()
Definition: Wendland.cpp:17