viernes, 14 de febrero de 2014

Operaciones matriciales y vectoriales



En esta sección realizaremos las operaciones básicas matriciales y resolveremos el problema de autovalores par amatrices de tamaño determinado.

El producto vectorial lo realizamos con la siguiente función:
int dot(int *a, int *b, int size)
{
    int contador, suma=0;
    for( contador=0; contador<size; contador++ ) suma+=a[contador]*b[contador];
 return suma;
}

Ejercicios
  • Realizar la función que calcule el producto vectorial.
  • Realizar la función que calcule la multiplicación de 2 matrices.

Ahora veamos como se resuelve el problema de autovalores de una matríz de 2x2, sabemos de antemano que los autovalores de esta matriz se encuentran a través de la ecuación cuadrática Det(A-mI)=0, cuyas raices están dadas por:

\lambda=\frac{Tra(A)\pm\sqrt{Tra(A)-4*Det(A)}}{2}

Donde Tra es la traza de la matriz y Det su determinante.
Veamos el algoritmo:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

int det2(int A[2][2])
{
    return A[0][0]*A[1][1]-A[0][1]*A[1][0];
}

int tra2(int A[2][2])
{
    return A[0][0]+A[1][1];
}

double* autovalores(int A[][2])
{
    static double lambda[2];
 int tra=tra2(A);
 lambda[0]= (tra+sqrt(tra*tra-4*det2(A)))/2;
 lambda[1]= (tra-sqrt(tra*tra-4*det2(A)))/2;

 return lambda;
}


int main()
{
    srand(time(NULL));
    int a[2][2];
 int i,j;
 double *lambda;
 for(i=0;i<2;i++) {
     for(j=0;j<2;j++) {
      a[i][j]=rand()%10-5;
   printf("%d ",a[i][j]);
  }
  printf("\n");
 }

    lambda=autovalores(a);
 printf("Los autovalores son %f y %f\n",lambda[0], lambda[1]);

    return 0;
}

Para evaluar la raiz hemos usado la librería matemática que no se enlaza por defecto cuando vamos a compilar. Esto es, para compilar debemos hacer:
gcc autovalores.c -o autovalores -lm
Ejercicios
  • ¿Qué consideraciones debemos tener para que el algoritmo soporte complejos?
  • Modificar el código anterior para resolver el problema de autovalores para un operador de orden 3.

No hay comentarios:

Publicar un comentario