Nota: Respete los prototipos de las funciones y no olvide el pseudocódigo para cada ejercicio.
Si necesita probar su programa, el siguiente texto: "La bella y graciosa moza, marchose a lavar la ropa. La mojo en el arroyuelo y cantando la lavo. La froto sobre una piedra, la colgo de un abedul." tiene 3 de 1, 10 de 2, 1 de 3, 4 de 4, 5 de 5, 2 de 6, 3 de 8, y 1 de 9 para un total de 29 palabras.
/*transforma el numero decimal numdec a la base base y lo devuelve así transformado */
int dec_a_base (int numdec, int base);/*transforma a decimal el numero numbase que originalmente está en la base base y lo devuelve así transformado*/
int base_a_dec (int numbase, int base);
Por ejemplo: el número 321 en base 4 (1 * 4^0 + 2 * 4^1 + 3 * 4^2) corresponde al número 57 en base 10 (decimal).
Ayuda: en ambos casos conviene comenzar por la cifra menos significativa (es decir la que corresponde a base^0).
Comenzando con un vector normalizado, elegido al azar
(seleccionando cada componente al azar), se lo multiplica por la matriz
M.
Al resultado se lo normaliza y se lo vuelve a
multiplicar por la matriz M ( o sea M x V =
W ).
Repitiendo el paso anterior hasta que la diferencia entre el resultado
W normalizado y el vector
V (medida como la norma de ese vector diferencia
dividido por el tamaño del vector) sea menor que un dado epsilon. (La
norma de un vector se define como: |V| =
raiz_cuadrada(sumatoria(V[i]*V[i])))
El autovector es W y el autovalor es su norma.
Implemente este algoritmo con las siguientes funciones:
#define N 3
/* realiza la multiplicación MxV = W, n es la dimensión de V, W y de las filas y columnas de Mat */
/* no debe utilizar ningún vector ni matriz auxiliar */
void MultMatVec ( double Mat[][N], double V[], double W[], int n );/* calcula y retorna la norma del vector V y también normaliza el vector V */
/* no debe utilizar ningún vector ni matriz auxiliar */
double Normaliza ( double V[], int n );/* calcula y retorna un autovalor de la matriz M y pone en V su correspondiente autovector normalizado */
/* n es la dimensión del vector V y también el número de filas y columnas de la matriz M */
/* epsilon es el error máximo tolerado en el autovector. como se lo describe en el enunciado */
/* sólo puede utilizar un vector auxiliar, ninguna matriz auxiliar */
double AutoVyV ( double Mat[][N], double V[], int n, double epsilon );
Si desea probar su algoritmo, le sugerimos que utlice la siguiente matriz:
{{0.0159, 0.2176, 0.4909},
{0.6283, 0.4054, 0.1294},
{0.8125, 0.5699,0.5909}}
cuyos autovalores y correspondientes autovectores normalizados son:
1.2661 -> {{0.3943, 0.4114, 0.8218},
-0.3475 -> {-0.7566, 0.5792, 0.3033} y
0.0937 -> {0.3303, -0.8424, 0.4259}.