Clase 7 Matlab Scripts y Funciones

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 24

CC1000

Herramientas Computacionales
para Ingeniería y Ciencias

Clase 8 - MATLAB
Scripts y Funciones
Patricio Poblete
Maíra Marques

Otoño 2016
Scripts

Un “script” (o “m-file”) es un conjunto de


comandos almacenados en un archivo. El
nombre del archivo debe terminar en “.m”.

2
Ejemplo

Graficar la función sin(x)/x

3
Ejemplo

Graficar la función sin(x)/x


sindivx.m:
x=linspace(0,10*pi);
y=sin(x)./x;
plot(x,y) >> sinxdivx

4
Funciones

Un uso importante de m-files es para definir


funciones. Ejemplo: Calcular hipotenusa.

5
Funciones

Un uso importante de m-files es para definir


funciones. Ejemplo: Calcular hipotenusa.
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)
end
6
Funciones

Un uso importante de m-files es para definir


funciones. Ejemplo: Calcular hipotenusa.
function c = hipotenusa( a, b ) >> hipotenusa(3,4)
% Calcula la hipotenusa c = 5
% de un triángulo rectángulo ans = 5
% de catetos a y b
>> r2=hipotenusa(1,1)
% Entradas:
c = 1.4142
% a, b: largos de los catetos
% Salida: r2 = 1.4142
% c = largo de la hipotenusa
% Uso:
% c = hipotenusa(a, b)
c = sqrt(a^2+b^2)
end
7
Evaluación de un polinomio

8
Evaluación de un polinomio

9
Evaluación de un polinomio
function y = evalpoli( a, x )
% Evalúa el polinomio con vector de coeficientes a
% en el punto x
% Entradas:
% a: vector de coeficientes a0, a1, a2, ...
% x: punto en el que se evalúa el polinomio
% Salida:
% y = a + a1*x + a2*x^2 + ...
% Uso:
% y = evalpoli(a, x)
n=0:length(a)-1
potx=x.^n
y=a*potx'
end

10
Evaluación de un polinomio
function y = evalpoli( a, x )
% Evalúa el polinomio con vector de coeficientes a
% en el punto x
% Entradas:
% a: vector de coeficientes a0, a1, a2, ...
% x: punto en el que se evalúa el polinomio
% Salida:
% y = a + a1*x + a2*x^2 + ...
% Uso:
% y = evalpoli(a, x)
n=0:length(a)-1
potx=x.^n
y=a*potx'
end

>> evalpoli([2, 3, -5, 1],3)


n = 0 1 2 3
x = 1 3 9 27
y = -7
ans = -7 11
Una función puede retornar más
de un valor: Ecuación de 2º grado

12
Una función puede retornar más
de un valor: Ecuación de 2º grado

13
Una función puede retornar más
de un valor: Ecuación de 2º grado

14
Una función puede retornar más
de un valor: Ecuación de 2º grado
function [ re1, im1, re2, im2 ] = ec2( 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:
% re1,im1,re2,im2: partes real e imaginaria de las sols
% Uso: [re1, im1, re2, im2] = ec2(a, b, c)
d=b^2-4*a*c;
if d>=0
re1=(-b+sqrt(d))/(2*a);
re2=(-b-sqrt(d))/(2*a);
im1=0;
im2=0;
else
re1=-b/(2*a);
re2=re1;
im1=sqrt(-d)/(2*a);
im2=-im1;
end
15
Una función puede retornar más
de un valor: Ecuación de 2º grado

16
Una función puede retornar más
de un valor: Ecuación de 2º grado

>> [r1,i1,r2,i2] = ec2(1,-1,-1)


r1 = 1.6180
i1 = 0
r2 = -0.6180
i2 = 0

>> [r1,i1,r2,i2] = ec2(1,-1,1)


r1 = 0.5000
i1 = 0.8660
r2 = 0.5000
i2 = -0.8660

17
Ejercicio

Escriba una función Harmonic(n) que calcule


la suma

Grafique esta función para n=1,…,1000 y


estudie su relación con la función log(n).
Nota: Para aplicar una función f a cada
elemento de un vector a, se usa
arrayfun(@f, a)
18
Solución
function h = Harmonic( n )
% Calcula 1+1/2+1/3+...+1/n
nn=1:n;
h=sum(1./nn);
end

>> nn=1:1000;
>> plot(nn,arrayfun(@Harmonic,nn))

19
El problema del granizo
La 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 una altura n impar, sube a altura 3n+1

Conjetura:
Para toda altura inicial n≥1, el granizo llega
eventualmente al suelo (altura 1)
20
Siguiendo el rastro del granizo

Grafiquemos cómo evoluciona la altura a partir


de un valor de n dado.
function granizo( n )
% Grafica las alturas por donde va pasando un granizo
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; % impar
end
end
h(i+1)=1;
plot(1:length(h),h)
end 21
Ejemplo
>> granizo(100)

22
Ejemplo
>> granizo(31)

23
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?
>> x=1:1000;
>> y=rand(1,1000);
>> scatter(x,y,10,'filled')

24

También podría gustarte