Linear Algebra and the C Language/a013


Install this file in your working directory.

/* ------------------------------------ */
/*  Save as :   vc_m.h                  */
/* ------------------------------------ */

/* ------------------------------------ */
double ** c_mR(
double **A,
double **B
)
{
int r;
int c;

 	for    (r=R1; r<A[R_SIZE][C0]; r++)
 	   for (c=C1; c<A[C_SIZE][C0]; c++)

            B[r][c] = A[r][c];

return(B);
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **ca_A_mR(
double  a[],
double  **A
)
{
int r;
int c;
int i=0;

 	for    (r=R1; r<A[R_SIZE][C0]; r++)
 	   for (c=C1; c<A[C_SIZE][C0]; c++)

            A[r][c] = a[i++];
            
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **c_c_mR(
double **A,
int cA,
double **B,
int cB
)
{
int r;

    for(r=R1; r<A[R_SIZE][C0]; r++)

            B[r][cB] = A[r][cA];
return(B);
}
/* ------------------------------------ */
double  **c_r_mR(
double **A,
int rA,
double **B,
int rB
)
{
int c;

    for(c=C1; c<A[C_SIZE][C0]; c++)

            B[rB][c] = A[rA][c];
return(B);
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **c_c_r_mR(
double **A,
int cA,
double **B,
int rB
)
{
int rc;

    for(rc=RC1; rc<A[R_SIZE][C0]; rc++)

            B[rB][rc] = A[rc][cA];
return(B);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **c_c_D_mR(
double **AC,
double **AD
)
{
int      r;

  m0_mR(AD);
  
  for(r=R1; r<AC[R_SIZE][C0]; r++)

             AD[r][r] = AC[r][C1];
 return(AD);
}
/* ------------------------------------ */
double **c_D_c_mR(
double **D,
double **U
)
{
int  r;
int  c;

  for (   r=R1; r<D[R_SIZE][C0]; r++)
    for ( c=C1; c<D[C_SIZE][C0]; c++)

        if(r==c)       
          
               U[r][C1] = D[r][c];
              
 return(U);
}
/* ------------------------------------ */
/* ------------------------------------ */
double **c_s_mR(
double  s,
double **A,
int r,
int c
)
{
int Rmax = (A[R_SIZE][C0]-R1);
int Cmax = (A[C_SIZE][C0]-C1);

    if( r<R1 ||
        c<C1 ||
        r> Rmax||
        c> Cmax)
    {
     printf("\n Error : c_coef_R(); \n\n");
     printf("\n R = %d;  C = %d; \n",r,c);
     printf("\n R and C must be : \n");
     printf("\n R>=1; C>=1;\n R=<%d; C=<%d;\n",
              Rmax,
              Cmax);
     printf("\n Press return to continue. \n");
     fflush(stdout);
     getchar();
     exit(EXIT_FAILURE);
    }
         A[r][c] = s;
         
  return(A);         
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **c_r_reverse_order_mR(
double **U,
double **V
)
{
int c;

    for(c=C1; c<U[C_SIZE][C0]; c++)

            V[R1][csize_R(V)+C1-c] = U[R1][c];
return(V);
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **c_rU_rA_cn_mR(
double **U,
int rU,
double **A,
int rA,
int cn
)
{
int c;

    for(c=C1; cn<A[C_SIZE][C0]; c++,cn++)

            A[rA][cn] = U[rU][c];
            
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **c_cV_cA_rn_mR(
double **V,
int cV,
double **A,
int cA,
int rn
)
{
int r;

    for(r=R1; rn<A[R_SIZE][C0]; r++,rn++)

            A[rn][cA] = V[r][cV];
            
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */
double  **c_Uc_r_mR(
double **U,
int     Uc,
double **A,
int     rA
)
{
int c;

    for(c=C1; Uc<U[C_SIZE][C0]-C1; c++,Uc++)

            A[rA][c] = U[R1][Uc];
return(A);
}
/* ------------------------------------ */
/* ------------------------------------ */

c_mR(); copies matrix A into matrix B. It does not check the size of the matrices. Having this option in place has been a great help to me.

ca_A_mR(); copies an array of numbers into a matrix.

c_c_mR(); copies a column of A into a column of B.

c_r_mR(); copies a row from A into a row from B.

c_c_r_mR(); copies a column of A into a row of B.