how to add+multiply matrices

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • arperidot
    New Member
    • Feb 2010
    • 11

    how to add+multiply matrices

    Develop a program which computes the current value of the vector {x}
    based on the following forward iteration:

    {x}(n+1) = [K] {x}(n)+ {z}, n = 0,1,2,3,4.

    In other words, the next vector {x} is equal to the product of [K] and
    the current vector {x} + constant vector {z}.

    Perform the matrix multiplication by using the function:

    void matrix_mult(dou ble a[3][3], double *b, double *c, int rows);

    You should pass the matrix [K], and a pointer array {x}
    to matrix mult(), which will pass back a vector {y}=[K]{x}.

    [K] is a constant 3x3 matrix defined by:

    double k[3][3] = { { 1.2, -3.0, 1.1},
    {-4.1, 6.2, -2.2},
    { 3.4, -2.5, -3.3} };

    The initial components of the vector {x}(0) are specified by:

    double x[3] = { 1./sqrt(2.), 0., -1./sqrt(2.) },

    while the constant vector {z} is:

    double z[3] = { 1./sqrt(3.), -1./sqrt(3.), 1./sqrt(3.) }.

    >>I've been trying for a week to finish this but i have only been able get the vector addition part done in [K] {x}(n)+ {z} so now it only computes [K] {x}(n). Can someone finish this off for me or help me in newbie language because it is due soon and my head hurts from trying. Thanks in advance!


    Code:
    #include <stdio.h>
    #include <math.h>
    void unit_norm(double *vec, int cols);
    void matrix_mult(double a[3][3], double *b, double *c, int rows);
    main()
    {
     int row, i, j;
     double k[3][3] = {{1.2, -3.0,  1.1},
                      {-4.1, 6.2, -2.2},
                      {3.4, -2.5, -3.3}};
     double y[3], x[3] = { 1./sqrt(2.), 0., -1./sqrt(2.) };
    
     double w[3], z[3] = { 1./sqrt(3.), -1/sqrt(3.), 1./sqrt(3.) };
    
     printf("\nInitial vector:\n\n");
     printf("x[0] = [");
     for(row=0; row<3; row++)
            printf(" %.6f ", x[row]);
     printf("]\n\n");
    
      for(i=0; i<=4; i++)
      {
       matrix_mult(k,x,y,3);
       printf("New Vector:\ny[%d] = [", i+1);
       for(j=0; j<=2; j++)
            printf(" %.6f ", y[j]);
       printf("]\n");
    
       unit_norm(y,3);
       printf("Normalized new vector:\nx[%d] = [", i+1);
       for(j=0; j<=2; j++)
            printf(" %.6f ", y[j]);
       printf("]\n");
       for(j=0; j<=2; j++)
            x[j] = y[j];
       printf("\n");
      }
      return(0);
    }
    
    void matrix_mult(double a[3][3], double *b, double *c, int rows)
    {
            int k, s;
            double dot_p;
            for(s=0; s<rows; s++)
            {
             for(k=0, dot_p=0.; k<3; k++)
                    dot_p += a[s][k]*b[k];
            c[s] = dot_p;
            }
            return;
    }
    
    void unit_norm(double *vec, int cols)
    {
            double norm;
            double sum=0.;
            int n;
            for(n=0; n<cols; n++)
             sum += vec[n] * vec[n];
            sum = sqrt(sum);
            for(n=0; n<cols; n++)
                vec[n] = vec[n]/sum;
    return;
    }
Working...