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(double 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!
Expand|Select|Wrap|Line Numbers
- #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;
- }