Sei sulla pagina 1di 3

Metodos Matematicos de Especialidad. Especialidad de Construccion.

Curso 12-13

Ejercicios sencillos de programacion en Matlab


1. Construir una matriz juntando 5 matrices identidad 3 2. Construir una matriz aleatoria de dimensiones 6 1 y 6. 3. Construir una matriz aleatoria de dimensiones 15 11. 3 una al lado de otra.

6 y hacer cero las las 3 y 4 y uno las las 15 y eliminar las las y las columnas 7 y

4. Supongase que se quieren eliminar las columnas 4 y 6 de la matriz A, que tiene dimensiones 8 8. >Conseguir an dicho objetivo las instrucciones siguientes? A(:,4)=[]; A(:,6)=[]; 5. Construir una matriz aleatoria de dimensiones 7 7 e invertir el orden de sus las.

6. Construir una matriz aleatoria de dimensiones 7 7 y ordenar sus columnas de forma que los elementos de la primera la esten ordenados de mayor a menor. 7. Ejecutar la instruccion rand('state', 1). Construir una matriz aleatoria de dimensiones 11 11 cuyos elementos esten comprendidos entre 3 y 10, y hacer cero los elementos que sean menores que 5, y 1 los que sean mayores que 8. 8. Ejecutar la instruccion rand('state', 1). Construir dos matrices aleatorias A y B de dimensiones 9 4 cuyos elementos esten comprendidos entre 0 y 15, y redondear sus elementos al entero mas proximo. Luego igualar a 10 las componentes en las que las dos matrices coincidan. 9. Crear una matriz 10 10 y un vector 10 1 y resolver el sistema correspondiente.

10. Ejecutar la instruccion rand('state', 1). Ejecutar A=10*rand(14), que sera una matriz aleatoria de dimensiones 14 14 y con elementos entre 0 y 10, y sea b=12*rand(11,1). Sea C la matriz resultante de eliminar las las y las columnas 3, 5 y 9 de A. Sea d el vector resultante de hacer iguales a cero las posiciones de b que sean menores que 4. Hallar la norma 1 de la solucion del sistema Cx = d. 11. Utilizando las instrucciones tic y toc, calcular de forma aproximada el numero de multiplicaciones que matlab lleva a cabo por segundo. Para ello se multiplicara una matriz aleatoria 100 100 por si misma varias veces y se tendra en cuanta que al multiplicar una matriz m p por una matriz p n se deben realizar pmn multiplicaciones (el coste de las sumas se supondra despreciable). 12. Escribir un programa y=(A,B) (donde A y B son matrices) que tenga como salida un 1 si A=B, 0 si A y B son distintos pero tienen al menos una componente igual en la misma posicion (es decir aij = bij para algun (i; j)) y -1 si no tienen ninguna componente igual en la misma posicion (es decir aij 6= bij para algun (i; j)) 1

13. Construir un function ax2 + bx + c = 0.

le y=solecuacion(a,b,c) que calcule las soluciones a la ecuacion

14. Programar un function le [z,niter]=newtonescalar(fun,derfun,x0,eps) para el metodo de Newton en una ecuacion escalar. \z" es el valor al que converge el metodo, \niter" es el numero de iteraciones necesarias hasta que tiene lugar la convergencia, \fun" y \derfun" son m- les correspondientes a f y a su derivada, y x0 es la estimacion inicial. Las iteraciones deben parar cuando la la distancia entre dos iteraciones consecutivas sea menor que eps. 15. Programar un function le y=multipvec(A,x) que multiplique la matriz A por el vector x. Utilizando las instrucciones tic y toc, comparar el tiempo de ejecucion de este programa con el de la instruccion de Matlab multiplicando una matriz 100 100 por un vector varias veces. 16. Programar un function le d=divisores(n) que calcule los divisores de un numero natural n. El programa debe advertir al usuario cuando el numero introducido no es natural. 17. Programar un function le q=esprimo(n) cuya salida sea 1 si n es primo y 0 en caso contrario. El programa debe advertir al usuario cuando el numero introducido no es natural. 18. Programar un function iguales que n. le p=numprimos(n) que calcule los numeros primos menores o

19. Escribir un function le [xn,xacum]=generecdiferlineal(b,c,x0,x1,n) que genere los n primeros terminos de la sucesion de nida por la ecuacion en diferencias lineal de segundo orden xn+2 + bxn+1 + cxn = 0; n 0

con x0 y x1 como datos iniciales. xacum es el vector la [x0 x1 x2 ...xn]. Consideremos ahora el caso en que b = 13=3, c = 4=3. Es facil comprobar utilizando la teor a de ecuaciones en diferencias lineales, que la solucion "teorica" a este problema es xn = A donde 1 3
n

+ B4n

3 3 x0 (4x0 x1 ) ; B = x1 11 11 3 Por ello, si se toma x0 = 1 y x1 = 1=3, la solucion teorica sera A= xn = Se pide: (a) Generar los 40 primeros terminos de la sucesion correspondiente a este caso.>Concuerdan los resultados numericos con los teoricos? >Por que? >Como se podr a solucionar este problema? (b) >Que sucede en el caso en que las condiciones inciales se cambian a x0 = 1; x1 = 1? (c) >Existir a el mismo problema si se trabajase con la ecuacion en diferencias con b = 1=6 para la que la solucion teorica es del tipo xn = A donde A y B dependen de x0 y x1 ? 2 1 2
n

1 3

5=6; c =

+B

1 3

20. Programar un function le y=multipmat(A,B) que calcule el producto AB y avise si las matrices no se pueden multiplicar. 21. Programar un function le y=multiptrian(A,B) que calcule el producto AB cuando A y B son triangulares superiores evitando las operaciones innecesarias. Comparar mediante algun ejemplo la e ciencia de esta funcion frente a la funcion multipmat. 22. Programar un function le y=multiptridiag(A,B) que calcule el producto AB cuando A y B son matrices tridiagonales evitando las operaciones innecesarias. 23. Programar un function le y=diagonal(A) cuyo resultado sea un vector con los elementos de la diagonal principal de A. Idem y=diagonal(A,i) cuyo resultado sea un vector con los elementos de la i-esima diagonal por encima (o por debajo si i es negativo) de la diagonal principal de A. Nota: y=diagonal(A) produce el mismo resultado que la instruccion de Matlab diag(A). 24. Programar un function le y=partesup(A) cuyo resultado sea una matriz con "la parte superior de A", es decir una matriz de las mismas dimensiones de A, que coincida con A en la diagonal principal y por encima y tenga ceros por debajo. y=partesup(A) produce el mismo resultado de la instruccion de Matlab triu(A). Idem y=parteinf(A) que calcule la parte inferior de A, lo que produce el mismo resultado que la instruccion de Matlab tril(A). 25 Evaluacion e ciente de un polinomio ( algoritmo de Horner). Dado un polinomio p(x) = a0 xn + a1 xn
1

+ an

1x

+ an ;

(1)

para evaluar p en no se procede como cabr a esperar en un principio de la expresion (1), pues esto consume un gran numero de operaciones. En la practica se procede segun el siguiente procedimiento anidado. p( ) = ( ((a0 + a1 ) + a2 ) + ) + an (2)

Por ejemplo, en el caso de un polinomio de grado 3 se tiene: p( ) = ((a0 + a1 ) + a2 ) + a3 Observese que para evaluar (2) solo se llevan a cabo n multiplicaciones. Es decir, la evaluacion de un polinomio de grado n se puede llevar a cabo de forma que solo consuma n ops. Lo anterior se puede escribir de forma recursiva en la forma b0 = a0 b1 = b0 + a1 . . . bi = bi
1

(3)

+ ai ; i = 1; :::; n

y entonces p( ) = bn . A este algoritmo que se conoce como el algoritmo de Horner. Se pide programar un function le y=evalpol(coef,x) que proporcione el resultado de evaluar en los elementos del vector x el polinomio cuyos coe cientes estan dados (ordenados de mayor a menor grado) por el vector coef.

Potrebbero piacerti anche