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!
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;
}