1 #ifndef MATH_VECTOR_FUNCTION_H 2 #define MATH_VECTOR_FUNCTION_H 32 virtual std::string Label()
const;
33 virtual void PreEval(Real t);
34 virtual Real Eval(Real t);
35 virtual Real Deriv(Real t);
36 virtual Real Deriv2(Real t);
37 virtual const Vector& LastEvaluation()
const {
return tmp; }
56 virtual std::string Label()
const;
57 virtual void PreEval(Real t);
58 virtual Real Eval(Real t);
59 virtual Real Deriv(Real t);
60 virtual Real Deriv2(Real t);
86 virtual std::string Label()
const {
return "<a^t*x+b>"; }
87 virtual Real Eval(
const Vector& x) {
return a.dot(x)+b; }
88 virtual void Gradient(
const Vector& x,
Vector& grad) { grad = a; }
89 virtual Real Gradient_i(
const Vector& x,
int i) {
return a(i); }
90 virtual void Hessian(
const Vector& x,
Matrix& H) { H.setZero(); }
91 virtual Real Hessian_ij(
const Vector& x,
int i,
int j) {
return 0; }
115 virtual std::string Label()
const {
return "[0.5*x'Ax+bx+c]"; }
116 virtual void PreEval(
const Vector& x) { A.mul(x,Ax); }
117 virtual Real Eval(
const Vector& x) {
return Half*x.dot(Ax) + x.dot(b) + c; }
120 virtual Real Gradient_i(
const Vector& x,
int i)
121 {
return Ax(i) + b(i); }
122 virtual Real DirectionalDeriv(
const Vector& x,
const Vector& h)
123 {
return Ax.dot(h) + b.dot(h); }
124 virtual void Hessian(
const Vector& x,
Matrix& H) { H = A; }
125 virtual Real Hessian_ij(
const Vector& x,
int i,
int j) {
return A(i,j); }
126 virtual Real DirectionalDeriv2(
const Vector& x,
const Vector& h)
128 for(
int i=0;i<A.m;i++) sum += h(i)*A.dotRow(i,h);
142 virtual std::string Label()
const {
return "<|x|^2>"; }
143 virtual Real Eval(
const Vector& x) {
return x.normSquared(); }
144 virtual void Gradient(
const Vector& x,
Vector& grad) { grad.add(x,x); }
145 virtual Real Gradient_i(
const Vector& x,
int i) {
return Two*x(i); }
146 virtual void Hessian(
const Vector& x,
Matrix& H) { H.setIdentity(); H.inplaceMul(Two); }
147 virtual Real Hessian_ij(
const Vector& x,
int i,
int j) {
return Two*
Delta(i,j); }
154 virtual std::string Label()
const;
155 virtual void PreEval(
const Vector& x);
156 virtual Real Eval(
const Vector& x);
158 virtual Real Gradient_i(
const Vector& x,
int i);
160 virtual Real Hessian_ij(
const Vector& x,
int i,
int j);
170 virtual std::string Label()
const {
return "<min_i xi>"; }
171 virtual void PreEval(
const Vector& x);
172 virtual Real Eval(
const Vector& x);
174 virtual Real Gradient_i(
const Vector& x,
int i);
175 virtual void Hessian(
const Vector& x,
Matrix& H) { H.setZero(); }
176 virtual Real Hessian_ij(
const Vector& x,
Matrix& H) {
return Zero; }
186 virtual std::string Label()
const {
return "<max_i xi>"; }
187 virtual void PreEval(
const Vector& x);
188 virtual Real Eval(
const Vector& x);
190 virtual Real Gradient_i(
const Vector& x,
int i);
191 virtual void Hessian(
const Vector& x,
Matrix& H) { H.setZero(); }
192 virtual Real Hessian_ij(
const Vector& x,
Matrix& H) {
return Zero; }
203 virtual std::string Label()
const;
204 virtual void PreEval(
const Vector& x);
205 virtual Real Eval(
const Vector& x) {
return f->Eval(gx); }
207 virtual Real Gradient_i(
const Vector& x,
int i);
209 virtual Real Hessian_ij(
const Vector& x,
int i,
int j);
211 std::shared_ptr<RealFunction> f;
212 std::shared_ptr<ScalarFieldFunction> g;
228 curl(0)=Jacobian_ij(x,2,1)-Jacobian_ij(x,1,2);
229 curl(1)=Jacobian_ij(x,0,2)-Jacobian_ij(x,2,0);
230 curl(2)=Jacobian_ij(x,1,0)-Jacobian_ij(x,0,1);
232 virtual int NumDimensions()
const {
return 3; }
251 virtual std::string Label()
const {
return "[A*x+b]"; }
252 virtual int NumDimensions()
const {
return A.m; }
253 virtual void Eval(
const Vector& x,
Vector& v) { A.mul(x,v); v+=b; }
254 virtual Real Eval_i(
const Vector& x,
int i) {
return A.dotRow(i,x)+b(i); }
255 virtual Real Jacobian_ij(
const Vector& x,
int i,
int j) {
return A(i,j); }
256 virtual void Jacobian_i(
const Vector& x,
int i,
Vector& Ji) { A.getRowCopy(i,Ji); }
257 virtual void Jacobian_j(
const Vector& x,
int j,
Vector& Jj) { A.getColCopy(j,Jj); }
258 virtual void Jacobian(
const Vector& x,
Matrix& J) { J=A; }
259 virtual void DirectionalDeriv(
const Vector& x,
const Vector& h,
Vector& v) { A.mul(h,v); }
260 virtual void Hessian_i(
const Vector& x,
int i,
Matrix& Hi) { Hi.setZero(); }
261 virtual Real Hessian_ijk(
const Vector& x,
int i,
int j,
int k) {
return 0; }
271 Compose_SF_VF_Function(std::shared_ptr<ScalarFieldFunction> _f,std::shared_ptr<VectorFieldFunction> _g) : f(_f), g(_g) {}
272 virtual std::string Label()
const;
273 virtual void PreEval(
const Vector& x);
274 virtual Real Eval(
const Vector& x) {
return f->Eval(gx); }
276 virtual Real Gradient_i(
const Vector& x,
int i);
278 virtual Real Hessian_ij(
const Vector& x,
int i,
int j);
280 std::shared_ptr<ScalarFieldFunction> f;
281 std::shared_ptr<VectorFieldFunction> g;
292 Compose_VF_VF_Function(std::shared_ptr<VectorFieldFunction> _f,std::shared_ptr<VectorFieldFunction> _g) : f(_f), g(_g) {}
293 virtual std::string Label()
const;
294 virtual void PreEval(
const Vector& x);
295 virtual void Eval(
const Vector& x,
Vector& v) { f->Eval(gx,v); }
296 virtual Real Eval_i(
const Vector& x,
int i) {
return f->Eval_i(gx,i); }
298 virtual void Jacobian_i(
const Vector& x,
int i,
Vector& Ji);
299 virtual void Jacobian_j(
const Vector& x,
int j,
Vector& Jj);
301 std::shared_ptr<VectorFieldFunction> f;
302 std::shared_ptr<VectorFieldFunction> g;
312 virtual std::string Label()
const;
313 virtual std::string Label(
int i)
const;
314 virtual int NumDimensions()
const;
315 virtual void PreEval(
const Vector& x);
317 virtual Real Eval_i(
const Vector& x,
int i);
319 virtual void Jacobian_i(
const Vector& x,
int i,
Vector& Ji);
321 virtual void Hessian_i(
const Vector& x,
int i,
Matrix& Hi);
323 std::vector<std::shared_ptr<ScalarFieldFunction> > functions;
331 virtual std::string Label()
const;
332 virtual void PreEval(
const Vector& x) { f->PreEval(x); }
333 virtual Real Eval(
const Vector& x);
350 virtual std::string Label()
const;
351 virtual std::string Label(
int i)
const;
352 virtual int NumDimensions()
const;
353 virtual void PreEval(
const Vector& x);
355 virtual Real Eval_i(
const Vector& x,
int i);
357 virtual void Jacobian_i(
const Vector& x,
int i,
Vector& Ji);
359 virtual void Hessian_i(
const Vector& x,
int i,
Matrix& Hi);
361 int GetFunction(
int &i)
const;
363 std::vector<std::shared_ptr<VectorFieldFunction> > functions;
370 virtual std::string Label()
const;
371 virtual std::string Label(
int i)
const;
372 virtual int NumDimensions()
const;
373 virtual void PreEval(
const Vector& x);
375 virtual Real Eval_i(
const Vector& x,
int i);
377 virtual void Jacobian_i(
const Vector& x,
int i,
Vector& Ji);
379 virtual void Hessian_i(
const Vector& x,
int i,
Matrix& Hi);
381 std::shared_ptr<VectorFieldFunction>
function;
382 std::vector<int> xindices,findices;
393 virtual std::string Label()
const;
394 virtual std::string Label(
int i)
const;
395 virtual int NumDimensions()
const;
396 virtual void PreEval(
const Vector& x);
398 virtual Real Eval_i(
const Vector& x,
int i);
400 virtual void Jacobian_i(
const Vector& x,
int i,
Vector& Ji);
402 virtual void Hessian_i(
const Vector& x,
int i,
Matrix& Hi);
404 std::shared_ptr<VectorFieldFunction>
function;
406 std::vector<int> xindices;
Definition: vectorfunction.h:309
Definition: vectorfunction.h:344
Abstract base classes for function interfaces.
Definition: vectorfunction.h:72
A vector field function h(x) = f(g(x)) (f,g vector fields)
Definition: vectorfunction.h:289
A vector field function f(x) = g(x0 | x0[xindices]=x)
Definition: vectorfunction.h:390
A scalar field h(x) = f(g(x))
Definition: vectorfunction.h:199
A function from R^n to R^m.
Definition: function.h:134
A scalar field function h(x) = f(g(x)) (g vector-valued)
Definition: vectorfunction.h:268
A scalar field min_i xi.
Definition: vectorfunction.h:167
Real Delta(T i, T j)
Kronecker delta.
Definition: math.h:233
A vector field function f(x) = g(x[xindices])[findices].
Definition: vectorfunction.h:367
A function g(x) that returns the i'th component of vector field f(x)
Definition: vectorfunction.h:327
A function from R to R.
Definition: function.h:42
A function from R^n to R.
Definition: function.h:97
Definition: vectorfunction.h:52
Definition: vectorfunction.h:100
A scalar field for the L-d norm, where d is passed into the constructor.
Definition: vectorfunction.h:151
A scalar field max_i xi.
Definition: vectorfunction.h:183
A function g(t) that returns f(x+tn) for a scalar field f(x) If ref is true, then x...
Definition: vectorfunction.h:28
Definition: vectorfunction.h:238
Contains all definitions in the Math package.
Definition: WorkspaceBound.h:12
Definition: vectorfunction.h:220
A scalar field ||x||^2.
Definition: vectorfunction.h:140