Develop a program which computes the current value of the vector {x} based on the following forward iteration:
{x}(n+1) = [K] {x}(n), n = 0,1,2, ... ,8,9.
In other words, the next vector {x} is equal to the product of [K] and the current vector {x}.
Perform the matrix multiplication by using the function:
void matrix_mult(double a[4][4], double b[4], double c[4], int rows);
You should pass the matrix [K] and a vector {x} to matrix_mult()
which will pass back a new vector {y} ).
[K] is a constant 4x4 matrix defined by:
double K[4][4] = { { 2., -4., 1., 0.},
{-4., 5., -2., 1.},
{ 1., -2., 6., -3.},
{ 0., 1., -3., 7.}};
The initial components of the vector {x}(0) are specified by:
double x[4] = { 1./3., 2./3., 1./3., pow(3.,0.5)/3.};
First, print the value of the initial vector {x}(0) on the screen.
Then, perform forward iteration 10 times (for n=0 to 9). Each time
after new vector is computed from [K]{x}, normalize that vector by
using the function
double unit_vec(double vec[4], int cols)
which was discusseed in class (see Program w8-5.c; this function
transforms a vector to a unit vector - of magnitude 1). For the
matrix multiplication with the vector [K]{x}, see Program w8-3.c .
Always use the normalized vector as the vector {x}(n) for the next
iteration.
For each iteration, print the new vector, its length, and the normalized
new vector in main().
*/
/* Use the skeleton below to build your program */
/* Insert the needed statements at ..... places */
#include
#include
double unit_norm(double vec[4], int cols);
void matrix_mult(double a[4][4], double b[4], double c[4], int rows);
main()
{
double K[4][4] = { { 2., -4., 1., 0.},
{-4., 5., -2., 1.},
{ 1., -2., 6., -3.},
{ 0., 1., -3., 7.}};
double y[4], x[4] = { 1./3., 2./3., 1./3., pow(3.,0.5)/3.};
// Enter your C statements
.........................
.........................
}
void matrix_mult(double a[4][4], double b[4], double c[4], int rows)
{
// compute c[]=a[][]*b[]
..........................
..........................
return;
}
double unit_norm(double vec[4], int cols)
{
double sum;
// normalize a vector
...........................
...........................
return sum;
}
/* Your output should look like:
Initial vector:
x[0] = [ 0.333333 0.666667 0.333333 0.577350]
New vector:
y[1] = [-1.666667 1.910684 -0.732051 3.708119]
The length of this vector is: 4.551322
Normalized new vector:
x[1] = [-0.366194 0.419808 -0.160844 0.814734]
.
.
.
New vector:
y[10] = [-3.096892 5.315900 -6.556405 6.293838]
The length of this vector is: 10.974897
Normalized new vector:
x[10] = [-0.282180 0.484369 -0.597400 0.573476]
*/