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:
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 -lmEjercicios
- ¿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