Mathc matrices/036
Installer ce fichier dans votre répertoire de travail.
vrm_sym.h |
---|
/* ------------------------------------ */
/* Save as : vrm_sym.h */
/* ------------------------------------ */
double **rsymmetric_mR(
double **A,
int n)
{
int r;
int c;
double x;
isquare_mR(A,"rsymmetric_mR();","(A)");
for ( r=R1; r<A[R_SIZE][C0]; r++)
for ( c=C1; c<A[C_SIZE][C0]; c++)
{
x = r_I (n);
A[r][c] = x;
A[c][r] = x;
}
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **mul_sDA_mR(
double s,
double **A,
double **sA
)
{
int r;
c_mR(A,sA);
for(r=R1; r<A[R_SIZE][C0]; r++)
// if( r <= csize_R(A) )
sA[r][r] = abs(s * A[r][r]);
return(sA);
}
/* ------------------------------------ */
double **rPsymmetric_mR(
double **A,
int n)
{
int r;
int c;
double x;
double **B = i_mR(rsize_R(A),csize_R(A));
isquare_mR(A,"rsymmetric_mR();","(A)");
for ( r=R1; r<A[R_SIZE][C0]; r++)
for ( c=C1; c<A[C_SIZE][C0]; c++)
{
x = r_I (n);
B[r][c] = x;
B[c][r] = x;
}
mul_sDA_mR(111.,B,A);
f_mR(B);
return(A);
}
/* ------------------------------------ */
double **rEsymmetric_mR(
double **A,
int n,
double E /* 1E-1 1E-0 1E+1 */
)
{
int r = rsize_R(A);
int c = csize_R(A);
double **B = rE_mR( i_mR(r,c),n,E);
double **B_T = transpose_mR(B,i_mR(c,r));
mul_mR(B,B_T, A);
f_mR(B);
f_mR(B_T);
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **rskewsymmetric_mR(
double **A,
int n)
{
int r;
int c;
double x;
isquare_mR(A,"rskewsymmetric_mR();","(A)");
for ( r=R1; r<A[R_SIZE][C0]; r++)
for ( c=C1; c<A[C_SIZE][C0]; c++)
{
if(r==c)
A[r][c] = 0.;
else{ x = r_I (n);
A[r][c] = -x;
A[c][r] = x;
}
}
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **rcentrosymmetric_mR(
double **A,
int k)
{
int r;
int c;
int n = rsize_R(A);
double x;
isquare_mR(A,"rcentrosymmetric_mR();","(A)");
for ( r=R1; r<A[R_SIZE][C0]; r++)
for ( c=C1; c<A[C_SIZE][C0]; c++)
{
x = r_I(k);
A[n-r+1][n-c+1] = x;
A[r][c] = x;
}
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **rdefinite_positive_mR(
double **A,
int n
)
{
int r = rsize_R(A);
double **Q = r_Q_mR( i_mR(r,r),n);
double **QT = transpose_mR(Q, i_mR(r,r));
double **D = rpdiag_mR( i_mR(r,r),n);
double **QD = mul_mR(Q,D, i_mR(r,r));
mul_mR(QD,QT,A);
f_mR(Q);
f_mR(QT);
f_mR(D);
f_mR(QD);
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **rdefinite_negative_mR(
double **A,
int n
)
{
int r = rsize_R(A);
double **Q = r_Q_mR( i_mR(r,r),n);
double **QT = transpose_mR(Q, i_mR(r,r));
double **D = rpdiag_mR( i_mR(r,r),n);
double **sD = smul_mR(-1,D, i_mR(r,r));
double **QsD = mul_mR(Q,sD, i_mR(r,r));
mul_mR(QsD,QT,A);
f_mR(Q);
f_mR(QT);
f_mR(D);
f_mR(sD);
f_mR(QsD);
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **rdefpos_diag_mR(
double **D,
double **A,
int n
)
{
int r = rsize_R(A);
double **Q = r_Q_mR( i_mR(r,r),n);
double **QT = invgj_mR(Q, i_mR(r,r));
double **QD = mul_mR(Q,D, i_mR(r,r));
mul_mR(QD,QT,A);
f_mR(Q);
f_mR(QT);
f_mR(QD);
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */