Xmipp  v3.23.11-Nereus
Classes | Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Friends | List of all members
MatrixTriangle Class Reference

#include <MatrixTriangle.h>

Collaboration diagram for MatrixTriangle:
Collaboration graph
[legend]

Classes

struct  MatrixTriangleDataTag
 

Public Member Functions

 MatrixTriangle (int _n=0)
 
void setSize (int _n)
 
 ~MatrixTriangle ()
 
 MatrixTriangle (const MatrixTriangle &A)
 
MatrixTriangleoperator= (const MatrixTriangle &A)
 
MatrixTriangle clone ()
 
void copyFrom (MatrixTriangle r)
 
bool operator== (const MatrixTriangle &A)
 
int nLine ()
 
double * operator[] (int i)
 
 operator double ** () const
 
void solveInPlace (Vector b)
 
void solveTransposInPlace (Vector y)
 
void LINPACK (Vector &u)
 

Static Public Attributes

static MatrixTriangle emptyMatrixTriangle
 

Protected Types

typedef struct MatrixTriangle::MatrixTriangleDataTag MatrixTriangleData
 

Protected Member Functions

void destroyCurrentBuffer ()
 

Protected Attributes

MatrixTriangleDatad
 

Friends

class Matrix
 

Detailed Description

Definition at line 34 of file MatrixTriangle.h.

Member Typedef Documentation

◆ MatrixTriangleData

Constructor & Destructor Documentation

◆ MatrixTriangle() [1/2]

MatrixTriangle::MatrixTriangle ( int  _n = 0)

Definition at line 31 of file MatrixTriangle.cpp.

32 {
33  d=(MatrixTriangleData*)malloc(sizeof(MatrixTriangleData));
34  d->n=_n; d->ext=_n;
35  d->ref_count=1;
36  if (_n>0)
37  {
38  double **t,*t2;
39  int i=1;
40  t=d->p=(double**)malloc(_n*sizeof(double*));
41  t2=(double*)malloc((_n+1)*_n/2*sizeof(double));
42  while(_n--)
43  {
44  *(t++)=t2; t2+=i; i++;
45  }
46  } else d->p=NULL;
47 }
MatrixTriangleData * d
#define i
struct MatrixTriangle::MatrixTriangleDataTag MatrixTriangleData

◆ ~MatrixTriangle()

MatrixTriangle::~MatrixTriangle ( )

Definition at line 137 of file MatrixTriangle.cpp.

138 {
140 }
void destroyCurrentBuffer()

◆ MatrixTriangle() [2/2]

MatrixTriangle::MatrixTriangle ( const MatrixTriangle A)

Definition at line 153 of file MatrixTriangle.cpp.

154 {
155  // shallow copy
156  d=A.d;
157  (d->ref_count)++ ;
158 }
MatrixTriangleData * d

Member Function Documentation

◆ clone()

MatrixTriangle MatrixTriangle::clone ( )

Definition at line 172 of file MatrixTriangle.cpp.

173 {
174  // a deep copy
175  MatrixTriangle r(nLine());
176  r.copyFrom(*this);
177  return r;
178 }

◆ copyFrom()

void MatrixTriangle::copyFrom ( MatrixTriangle  r)

Definition at line 180 of file MatrixTriangle.cpp.

181 {
182  int n=r.nLine();
183  setSize(n);
184  if (n==0) return;
185  memcpy(*d->p,*(r.d->p),(n+1)*n/2*sizeof(double));
186 }
MatrixTriangleData * d
int * n
void setSize(int _n)

◆ destroyCurrentBuffer()

void MatrixTriangle::destroyCurrentBuffer ( )
protected

Definition at line 142 of file MatrixTriangle.cpp.

143 {
144  if (!d) return;
145  (d->ref_count) --;
146  if (d->ref_count==0)
147  {
148  if (d->p) { free(*d->p); free(d->p); }
149  free(d);
150  };
151 }
MatrixTriangleData * d
free((char *) ob)

◆ LINPACK()

void MatrixTriangle::LINPACK ( Vector u)

Definition at line 119 of file MatrixTriangle.cpp.

120 {
121  int i,j,n=nLine();
122  R.setSize(n);
123  double **L=(*this), *w=R, sum;
124 
125  for (i=0; i<n; i++)
126  {
127  if (L[i][i]==0) w[i]=1.0;
128 
129  sum=0; j=i-1;
130  if (i) while (j--) sum+=L[i][j]*w[j];
131  if (((1.0-sum)/L[i][i])>((-1.0-sum)/L[i][i])) w[i]=1.0; else w[i]=-1.0;
132  }
134  R.multiply(1/R.euclidianNorm());
135 }
doublereal * w
#define i
void solveTransposInPlace(Vector y)
#define j
int * n

◆ nLine()

int MatrixTriangle::nLine ( )
inline

Definition at line 63 of file MatrixTriangle.h.

63 { return d->n; };
MatrixTriangleData * d

◆ operator double **()

MatrixTriangle::operator double ** ( ) const
inline

Definition at line 65 of file MatrixTriangle.h.

65 { return d->p; };
MatrixTriangleData * d

◆ operator=()

MatrixTriangle & MatrixTriangle::operator= ( const MatrixTriangle A)

Definition at line 160 of file MatrixTriangle.cpp.

161 {
162  // shallow copy
163  if (this != &A)
164  {
166  d=A.d;
167  (d->ref_count) ++ ;
168  }
169  return *this;
170 }
MatrixTriangleData * d
void destroyCurrentBuffer()

◆ operator==()

bool MatrixTriangle::operator== ( const MatrixTriangle A)
inline

Definition at line 62 of file MatrixTriangle.h.

62 { return (A.d==d);}
MatrixTriangleData * d

◆ operator[]()

double* MatrixTriangle::operator[] ( int  i)
inline

Definition at line 64 of file MatrixTriangle.h.

64 { return d->p[i]; };
MatrixTriangleData * d
#define i

◆ setSize()

void MatrixTriangle::setSize ( int  _n)

Definition at line 49 of file MatrixTriangle.cpp.

50 {
51  d->n=_n;
52  if (_n>d->ext)
53  {
54  d->ext=_n;
55  double **t,*t2;
56  if (!d->p)
57  {
58  t2=(double*)malloc((_n+1)*_n/2*sizeof(double));
59  t=d->p=(double**)malloc(_n*sizeof(double));
60  } else
61  {
62  t2=(double*)realloc(*d->p,(_n+1)*_n/2*sizeof(double));
63  t=d->p=(double**)realloc(d->p,_n*sizeof(double));
64  }
65  int i=1;
66  while(_n--)
67  {
68  *(t++)=t2; t2+=i; i++;
69  }
70  }
71 }
MatrixTriangleData * d
#define i

◆ solveInPlace()

void MatrixTriangle::solveInPlace ( Vector  b)

Definition at line 73 of file MatrixTriangle.cpp.

74 {
75  int i,k,n=nLine();
76  double **a=(*this), *x=b, sum;
77 
78  if ((int)b.sz()!=n)
79  {
80  printf("error in matrixtriangle solve.\n"); getchar(); exit(254);
81  }
82  for (i=0; i<n; i++)
83  {
84  sum=x[i]; k=i;
85  while (k--) sum-=a[i][k]*x[k];
86  x[i]=sum/a[i][i];
87  }
88 }
doublereal * x
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
unsigned sz()
Definition: Vector.h:79
doublereal * b
int * n
doublereal * a

◆ solveTransposInPlace()

void MatrixTriangle::solveTransposInPlace ( Vector  y)

Definition at line 90 of file MatrixTriangle.cpp.

91 {
92  int n=nLine(),i=n,k;
93  double **a=(*this), *x=y, sum;
94 
95  while(i--)
96  {
97  sum=x[i];
98  for (k=i+1; k<n; k++) sum-=a[k][i]*x[k];
99  x[i]=sum/a[i][i];
100  }
101 }
static double * y
doublereal * x
#define i
ql0001_ & k(htemp+1),(cvec+1),(atemp+1),(bj+1),(bl+1),(bu+1),(x+1),(clamda+1), &iout, infoqp, &zero,(w+1), &lenw,(iw+1), &leniw, &glob_grd.epsmac
int * n
doublereal * a

Friends And Related Function Documentation

◆ Matrix

friend class Matrix
friend

Definition at line 36 of file MatrixTriangle.h.

Member Data Documentation

◆ d

MatrixTriangleData* MatrixTriangle::d
protected

Definition at line 46 of file MatrixTriangle.h.

◆ emptyMatrixTriangle

MatrixTriangle MatrixTriangle::emptyMatrixTriangle
static

Definition at line 74 of file MatrixTriangle.h.


The documentation for this class was generated from the following files: