Herramientas Computacionales Scripts y funciones en MATLAB Patricio
Herramientas Computacionales Scripts y funciones en MATLAB Patricio Poblete Maíra Marques Enero 2015
MATLAB Un conjunto de comandos se pueden almacenar en un archivo con nombre terminado en “. m” y ejecutar escribiendo su nombre (sin el “. m”). Este tipo de archivo se llama “m-file”. >> sinxdivx. m: 3
MATLAB Un uso importante de los m-files es para definir funciones. hipotenusa. m: function c = hipotenusa(a, b) % Calcula la hipotenusa de un % triángulo rectángulo de catetos a y b % Entradas: % a, b: largos de los catetos % Salida: % c = largo de la hipotenusa % Uso: % c = hipotenusa(a, b) c = sqrt(a^2+b^2) >> hipotenusa(3, 4) c = 5 ans = 5 >> hipotenusa(1, 1) c = 1. 4142 ans = 1. 4142 4
MATLAB Ejemplo: Evaluación de un polinomio function y = evalpoli(a, x 0) % Evalúa el polinomio con coeficientes a % en el punto x 0 % Entradas: % a: vector de coeficientes a 0, a 1, a 2, . . . % x 0: punto en el que se evalúa el polinomio % Salida: % y = a 0 + a 1*x 0 + a 2*x 0^2 +. . . % Uso: % y = evalpoli(a, x 0) n=0: length(a)-1 x=x 0. ^n y=a*x' >> evalpoli([2, 3, -5, 1], 3) n = 0 1 2 3 x = 1 3 9 27 y = -7 ans = -7 5
MATLAB Ejercicio: Escribir una función Harmonic(n) que calcule la suma Escribir otra función Harmocic. Vector(v), que recibe un vector y retorna un vector con la función Harmonic aplicada a cada una de sus componentes 6
MATLAB Ejercicio(Parte 2) : Utilizar esta función para investigar la relación con la función logaritmo natural log(n). Escribir y estudiar la función Harmonic 2(n) que calcula 7
MATLAB Una función puede retornar más de un valor function [re 1, im 1, re 2, im 2] = ec 2(a, b, c) % Resuelve ecuación de segundo grado % Entrada: % a, b, c: coeficientes de ecuación a*x^2+b*x+c=0 % Salida: % re 1, im 1, re 2, im 2: parte real e imaginaria de las sols % [re 1, im 1, re 2, im 2] = ec 2(a, b, c) d=b^2 -4*a*c; if d>=0 re 1=(-b+sqrt(d))/(2*a); re 2=(-b-sqrt(d))/(2*a); im 1=0; im 2=0; else re 1=-b/(2*a); re 2=re 1; im 1=sqrt(-d)/(2*a); im 2=-im 1; end >> r 1 i 1 r 2 i 2 [r 1, i 1, r 2, i 2] = ec 2(1, -1) = 1. 6180 = -0. 61803 = 0 >> r 1 i 1 r 2 i 2 [r 1, i 1, r 2, i 2] = ec 2(1, -1, 1) = 0. 50000 = 0. 57735 = 0. 50000 = -0. 57735 8
MATLAB El problema del granizo (Conjetura de Collatz) Un granizo cae desde altura n y sigue las siguientes reglas: Si está a una altura n par, baja a altura n/2 Si está a altura n impar, sube a altura 3 n+1 Conjetura: Para toda altura inicial n≥ 1, el granizo llega eventualmente al suelo (altura 1) 9
MATLAB Investiguemos cómo evoluciona la altura para distintos valores de n. La siguiente función entrega un vector con las alturas hasta llegar al suelo: >> y=granizo(31); >> plot(1: length(y), y)) function h = granizo(n) i=0; while n>1 i=i+1; h(i)=n; if rem(n, 2)==0 % par n=n/2; else n=3*n+1; end h(i+1)=1; 10
MATLAB Ejercicio: Escriba una función “demora(n)” que entregue el número de pasos que demora la caída desde altura n, y utiliza la función “scatter” para hacer un gráfico de los puntos (n, demora(n)) ¿Será algo aleatorio? >> scatter(1: 1000, rand(1, 1000)) 11
MATLAB function i = demora(n) i=1; while n>1 i=i+1; if rem(n, 2)==0 % par n=n/2; else n=3*n+1; end end function pares(nmax) n=1: nmax; d=zeros(1, nmax); for i=1: nmax d(i)=demora(i); end scatter(n, d); end >> pares(10000) 12
MATLAB 13
MATLAB 14
MATLAB 15
MATLAB 16
- Slides: 15