1 #include <../../nrnconf.h> 33 static char rcsid[] =
"update.c,v 1.1 1997/12/04 17:56:01 hines Exp";
58 if ( CHmat->m != CHmat->n || w->
dim != CHmat->m )
61 for ( j=0; j < w->
dim; j++ )
64 diag = CHmat->me[
j][
j];
65 new_diag = CHmat->me[
j][
j] = diag +
alpha*p*
p;
66 if ( new_diag <= 0.0 )
68 beta = p*
alpha/new_diag;
69 alpha *= diag/new_diag;
71 for ( i=j+1; i < w->
dim; i++ )
73 w->
ve[
i] -= p*CHmat->me[
i][
j];
74 CHmat->me[
i][
j] += beta*w->
ve[
i];
75 CHmat->me[
j][
i] = CHmat->me[
i][
j];
94 if ( ! R || ! u || ! v )
96 if ( ( Q && ( Q->m != Q->n || R->m != Q->n ) ) ||
97 u->
dim != R->m || v->
dim != R->n )
101 for ( k=R->m-1; k>=0; k-- )
102 if ( u->
ve[k] != 0.0 )
106 for ( i=k-1; i>=0; i-- )
118 for ( j=0; j<R->n; j++ )
119 R->me[0][j] += temp*v->
ve[j];
122 for ( i=0; i<
k; i++ )
124 givens(R->me[i][i],R->me[i+1][i],&c,&s);
MAT * rot_rows(MAT *mat, u_int i, u_int k, double c, double s, MAT *out)
MAT * rot_cols(MAT *mat, u_int i, u_int k, double c, double s, MAT *out)
MAT * LDLupdate(MAT *CHmat, VEC *w, double alpha)
static philox4x32_key_t k
void givens(double x, double y, Real *c, Real *s)
VEC * rot_vec(VEC *x, u_int i, u_int k, double c, double s, VEC *out)
#define error(err_num, fn_name)
MAT * QRupdate(MAT *Q, MAT *R, VEC *u, VEC *v)