TJacobianFunction Typedef

Header: Dew.Math/Optimization.h · Cross-compiler

typedef void (*TJacobianFunction)(TVec *, TVec *, TMtx *);

Defines procedure for calculating the Jacobian matrix.

Jacobian matrix element (i,j) is defined as partial(Y(j))/partial(C(i)).

Examples

cpp
#include "MtxVec.h"
#include "Optimization.h"
#include "Units.Math387.h"

using namespace Dew;
using namespace Dew::Math;
using namespace Dew::Math::Units;

// Split banana function in two parts
static void BananaFun(TVec* x, TVec* f, const DewArray<double>& c, const DewArray<tObject*>& o)
{
    (*f)[0] = 100*Math387::IntPower((*x)[1] - Math387::IntPower((*x)[0], 2), 2);
    (*f)[1] = Math387::IntPower(1 - (*x)[0], 2);
}
// Jacobian is 2x2 matrix
static void BananaJac(TVec* x, TVec* f, TMtx* Jac)
{
    (*Jac)(0, 0) = -400*((*x)[1] - Math387::IntPower((*x)[0], 2))*(*x)[0]; // partial(f0)/ partial(x0)
    (*Jac)(0, 1) = -2*(1 - (*x)[0]); // partial(f1)/ partial(x0)
    (*Jac)(1, 0) = 200*((*x)[1] - Math387::IntPower((*x)[0], 2)); // partial(f0)/ partial(x1)
    (*Jac)(1, 1) = 0.0; // partial(f1)/ partial(x1)
}

void Example()
{
}