hessian.c
Go to the documentation of this file.
1 #include "hessian.h"
2 
3 #include "error.h"
4 
17 {
18  unsigned int i,k;
19  Tequations *d;
20 
21  GetJacobianSize(&(h->neqs),&(h->nvars),j);
22 
23  NEW(h->H,h->nvars,Tequations*);
24  for(i=0;i<h->nvars;i++)
25  {
26  NEW(h->H[i],h->nvars,Tequations);
27  d=GetJacobianColumn(i,j);
28  for(k=0;k<h->nvars;k++)
29  DeriveEqualityEquations(k,&(h->H[i][k]),d);
30  }
31 }
32 
33 void AllocateHessianEvaluation(double ****m,THessian *h)
34 {
35  unsigned int i,k;
36 
37  NEW(*m,h->neqs,double **);
38  for(i=0;i<h->neqs;i++)
39  {
40  NEW((*m)[i],h->nvars,double *);
41  for(k=0;k<h->nvars;k++)
42  NEW((*m)[i][k],h->nvars,double);
43  }
44 }
45 
46 void EvaluateHessian(double *v,double ***m,THessian *h)
47 {
48  unsigned int i,k,l;
49  double *r;
50 
51  NEW(r,h->neqs,double);
52  for(i=0;i<h->nvars;i++)
53  {
54  for(k=0;k<h->nvars;k++)
55  {
56  EvaluateEqualityEquations(FALSE,v,r,&(h->H[i][k]));
57  for(l=0;l<h->neqs;l++)
58  m[l][i][k]=r[l];
59  }
60  }
61  free(r);
62 }
63 
64 void FreeHessianEvaluation(double ***m,THessian *h)
65 {
66  unsigned int i,k;
67 
68  for(i=0;i<h->neqs;i++)
69  {
70  for(k=0;k<h->nvars;k++)
71  free(m[i][k]);
72  free(m[i]);
73  }
74  free(m);
75 }
76 
78 {
79  unsigned int i,k;
80 
81  for(i=0;i<h->nvars;i++)
82  {
83  for(k=0;k<h->nvars;k++)
84  DeleteEquations(&(h->H[i][k]));
85  free(h->H[i]);
86  }
87  free(h->H);
88 }
Tequations * GetJacobianColumn(unsigned int nv, TJacobian *J)
Returns one of the Jacobian element.
Definition: jacobian.c:49
Definition of the THessian type and the associated functions.
#define FALSE
FALSE.
Definition: boolean.h:30
void DeleteHessian(THessian *h)
Destructor.
Definition: hessian.c:77
#define NEW(_var, _n, _type)
Allocates memory space.
Definition: defines.h:385
void AllocateHessianEvaluation(double ****m, THessian *h)
Allocate space for the Hessian evaluation.
Definition: hessian.c:33
void EvaluateHessian(double *v, double ***m, THessian *h)
Evaluates the Hessian.
Definition: hessian.c:46
unsigned int neqs
Definition: hessian.h:25
void GetJacobianSize(unsigned int *nr, unsigned int *nc, TJacobian *j)
Returns the size of the Jacobian.
Definition: jacobian.c:43
Tequations ** H
Definition: hessian.h:27
Error and warning functions.
Set of equations.
Definition: equations.h:81
unsigned int nvars
Definition: hessian.h:26
void EvaluateEqualityEquations(boolean systemOnly, double *v, double *r, Tequations *eqs)
Evaluates all equality equations in the set.
Definition: equations.c:2477
void InitHessian(TJacobian *j, THessian *h)
Constructor.
Definition: hessian.c:16
The Jacobian of a set of equations.
Definition: jacobian.h:23
Hessian of a set of equations.
Definition: hessian.h:24
void DeleteEquations(Tequations *eqs)
Destructor.
Definition: equations.c:2750
void DeriveEqualityEquations(unsigned int v, Tequations *deqs, Tequations *eqs)
Derives an equation set.
Definition: equations.c:2668
void FreeHessianEvaluation(double ***m, THessian *h)
Release space for the Hessian evaluation.
Definition: hessian.c:64