Está en la página 1de 7

FUNCIONES EN MATLAB

Es una subrutina que permite organizar en módulos el Ejemplo de funciones propias de Matlab,
desarrollo de aplicaciones, permitiendo ahorrar ya conocidas hasta el momento:
muchas líneas de código, sobre todo, cuando se trate sin, cos, fix, floor, mod, etc…
de aplicaciones más complejas.
Ejemplo la creación de una función para
calcular la hipotenusa de un triángulo
rectangular.
Función
function h=calhipo(a,b)
h=(a^2+b^2)^0.5;

Entradas Salidas
¿Cuántas variables de entrada y salida
tiene esta función?

Pequeños ejercicios
E1: Desarrolle una función E2: Desarrolle una función E3: Desarrolle una función
llamado mayorde3 que a partir llamado prombet, que calcule llamado sumabet, que calcule la
de 3 números escalares el promedio entre el máximo y suma de todos los enteros
ubicado cada uno en un mínimo de 3 números. comprendido en el intervalo
parámetro de entrada, calcule Ejemplo: [a;b]. Usar iterativas.
el mayor de ellos, luego prombet(2,4,9)=>5.5 Ejemplo: sumabet(3,6)=>18
verifique que funcione. function p=prombet(a,b,c) function s=sumabet(a,b)
Ejemplo: M=a; s=0;
mayorde3(7,9,2)=>9 if M<b
for i=a:b
M=b;
end s=s+i;
function m=mayor3(a,b,c) end
if M<c
if a>b&&a>c M=c;
m=a; end
else m=a;
if b>c if m>b
m=b; m=b;
else end
if m>c
m=c; m=c;
end end
end p=(M+m)/2;

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 48


Funciones con varias variables de salida y funciones que llaman a otras
E1: Desarrolle una función que halle el mayor entre 2 números y otra que halle el menor de 2
números y una tercera función que ordene 3 valores en 3 variable de salida
function m=mayor(a,b) function m=menor(a,b)
if a>b if a>b
m=a; m=b;
else else
m=b; m=a;
end end

function [a,b,c]=ordenar(m,n,p) Esta es la orden que debes ingresar en la línea


a=menor(menor(m,n),p); de comando para llamar a la función ordenar:
c=mayor(mayor(m,n),p); [a,b,c]=ordenar(6,7,4)
b=m+n+p-a-c;

Nota: Todos los archivos que están relacionados deben estar grabados en una misma carpeta.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 49


Pequeños ejercicios
E1: Cree una función (no cree funciones E2: Cree una función llamado cuenta, que
adicionales) que convierta una coordenada calcule el número de dígitos. (usar iterativas,
polar en coordenada cartesiana en 2 variables no usar logaritmos)
de salidas. Considere los ángulos en Ejemplo: cuenta(34561) =>5
sexagesimal y pruebe en la ventana de
comandos. Cree otra función que calcule el dígito de una
x=rcos(teta) posición determinada. (usar la función anterior,
y=rsin(teta) cuenta)
Ejemplo: Ejemplo: extrae(37456,2) =>7
[x,y]=convertir(10,30)
x=>8.666 y=>5

E3: Cree otra función que calcule la suma y E4: Cree otra función que verifique si un
producto de sus dígitos usando las funciones número es capicúa.
anteriores. Ejemplo:
Ejemplo: capicúa(121) =>true
[s,p]=calsumprod(325) capicúa(127) =>false
s=>10 p=>30

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 50


FUNCIONES RECURSIVAS
Una función recursiva es aquella función que se llama a sí misma una o varias veces, por ello, si la
función tiene la forma: f(xi ) = g(f(xi−1 )) , entonces esta, puede ser implementada como una
función recursiva. Pero es necesario tener algún criterio de parada.

Ejemplos de casos donde se podría implementar la función recursiva:


1. n!=n(n-1)! 0!=1
2. ∑ 𝑛 = 𝑛 + ∑(𝑛 − 1) ∑ 0=0
3. Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2) Fibonacci(1)=0,Fibonacci(2)=1
4. Triángulo de pascal

Implemente las funcione pascal(f,t) donde f es la fila del triángulo y t es el término a extraer de
esa fila. Por ejemplo pascal(5,3) debe devolver 6 o pascal(8,4) debe devolver 35.
5. La derivada enésima de función determinada.
(𝑛) 𝑓(𝑥 + ℎ)(𝑛−1) − 𝑓(𝑥)(𝑛−1)
𝑓(𝑥) = 𝐿𝑖𝑚ℎ→0

(𝑛−1) (𝑛−1)
𝑓(𝑥 + ℎ) − 𝑓(𝑥)
𝑓(𝑥)(𝑛) ≈ , 𝑐𝑜𝑛 ℎ 𝑚𝑢𝑦 𝑝𝑒𝑞𝑢𝑒ñ𝑜

6. Mayor(n,V)= Al mayor entre V[n] y Mayor(n-1,V) Mayor(1,V) = V[1]


7. La determinante de una matriz de n x n, considere el siguiente ejemplo para el caso de 3x3.
𝑎1,1 𝑎1,2 𝑎1,3
𝑎2,2 𝑎2,3 𝑎2,1 𝑎2,3 𝑎2,1 𝑎2,2
|𝑎2,1 𝑎2,2 𝑎2,3 | = 𝑎1,1 |𝑎 𝑎 | -𝑎1,2 |𝑎 𝑎 |+𝑎1,3 |𝑎 |
3,2 3,3 3,1 3,3 3,1 𝑎3,2
𝑎3,1 𝑎3,2 𝑎3,3
8. El Juego de Buscaminas en un tablero de mxn.

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 51


E1: Desarrolle una función recursiva llamado %Versión recursiva
funfactorial, que calcule el factorial de un function f=funfactorial(n)
número n. if n==0
Solución f=1;
%Versión normal else
function f=funfactorial(n) f=n*funfactorial(n-1);
f=1; end
for i=1:n
f=f*i;
end
E2: Desarrolle una función recursiva llamado %Versión recursiva
funsuma, que calcule la suma de los n function s=funsuma(n)
primeros números naturales.
if n==0
Solución
s=0;
%Versión normal
else
function s=funsuma(n)
s=n+funsuma(n-1);
s=0;
end
for i=1:n
s=s+i;
end
E3: Desarrolle una función recursiva llamado %Versión recursiva
fibo, que calcule el término enesimo(n) de la function f=fibo(n)
serie de Fibonacci, considere la serie de la
if n==1
siguiente manera:0, 1, 1, 2, 3, 5, 8, 13, …
Solución f=0;
%Versión normal elseif n==2
function f=fibo(n) f=1;
if n==1 else
f=0; f=fibo(n-1)+fibo(n-2);
elseif n==2 end
f=1;
else
Ejemplo propuesto
f1=0;f2=1;
Implemente una función recursiva
for i=3:n para cada uno de los casos anteriores.
f=f1+f2;
f1=f2;
f2=f;
end
end

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 52


DESARROLLO MODULAR DE PROGRAMAS GRANDES
Cuando se tenga que desarrollar la solución de un programa grande, será fundamental
que se tenga que modular(usar funciones), para facilitar la estructura, tanto en el
diseño, escritura y mantenimiento del código. El uso de módulos, permitirá la
reutilización de código y el trabajo en equipo, es decir cada conjunto de módulos puede
ser delegado a otros desarrolladores.

Principal

Módulo 1 Módulo 2 Módulo 3

Módulo 4 Módulo 5

E1: Leer los 2 lados de un triángulo %Modulo Principal 3 4 5


rectangular y mostrar la hipotenusa. clc;clear;
Solución
[a,b]=leerdatos();
%Versión sin funciones h=calhipotenusa(a,b);
mostrar(h);
Principal

%Modulo para leer los lados


clc; clear; function [a,b]=leerdatos()
a=input('Ingrese lado a:'); a=input('Ingrese lado a:');
b=input('Ingrese lado b:'); b=input('Ingrese lado b:');
h=(a^2+b^2)^0.5;
fprintf('La hipotenusa es %d\n',h) %Modulo para calcular la hipotenusa
function h=calhipotenusa(a,b)
h=(a^2+b^2)^0.5;
%Versión con funciones
%Modulo para mostrar la
hipotenusa
Principal
function mostrar(h)
fprintf('La hipotenusa es %d\n',h)
Calcular Mostrar
Leer datos
Hipotenusa Resultado

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 53


E2: Leer los 3 lados de un triángulo y mostrar los 3 ángulos. %modulo principal
Solución clc;
%Versión sin funciones a=leerdato('a');
b=leerdato('b');
c=leerdato('c');
Principal C=calangulo(a,b,c);
clc B=calangulo(a,c,b);
a=input('Ingrese lado a:'); A=calangulo(b,c,a);
b=input('Ingrese lado b:'); imprimir(A,B,C);
c=input('Ingrese lado c:');
C=acosd((a^2+b^2-c^2)/(2*a*b)); %modulo leer datos
B=acosd((a^2+c^2-b^2)/(2*a*c)); function lado=leerdato(let)
A=acosd((b^2+c^2-a^2)/(2*b*c)); fprintf('Ingrese lado %s:',let);
fprintf('El angulo A es %.2f\n',A) lado=input('');
fprintf('El angulo B es %.2f\n',B)
fprintf('El angulo C es %.2f\n',C) %modulo calcular angulo
function C=calangulo(a,b,c)
%Versión con funciones C=acosd((a^2+b^2-c^2)/(2*a*b));
Principal %modulo muestra resultados
function imprimir(A,B,C)
fprintf('El angulo A es %.2f\n',A)
Calcular Mostrar
Leer datos fprintf('El angulo B es %.2f\n',B)
Angulo Resultado fprintf('El angulo C es %.2f\n',C)

E3: Leer las coordenadas de los 3 vértices de un %principal


triángulo, luego mostrar el perímetro y área. clc;clear;
%Versión sin funciones [x1,y1,x2,y2,x3,y3]=leerdatos();
[perimetro,L12,L23,L13]=calperimetro(x1,y1,x2,y2,x3,y3);
area=calarea(L12,L23,L13,perimetro/2);
Principal mostrar(perimetro,area);

clc function[x1,y1,x2,y2,x3,y3]=leerdatos()
fprintf('Ingrese coordenada 1:\n'); [x1,y1]=leerpunto(1);
fprintf('\tIngrese coordenada x:');x1=input(''); [x2,y2]=leerpunto(2);
fprintf('\tIngrese coordenada y:');y1=input(''); [x3,y3]=leerpunto(3);
fprintf('Ingrese coordenada 2:\n');
fprintf('\tIngrese coordenada x:');x2=input(''); function [x,y]=leerpunto(n)
fprintf('\tIngrese coordenada y:');y2=input(''); fprintf('Ingrese coordenada %d:\n',n);
fprintf('Ingrese coordenada 3:\n'); fprintf('\tIngrese coordenada x:');x=input('');
fprintf('\tIngrese coordenada x:');x3=input(''); fprintf('\tIngrese coordenada y:');y=input('');
fprintf('\tIngrese coordenada y:');y3=input('');
L12=((x1-x2)^2+(y1-y2)^2)^0.5; function [perimetro,L12,L23,L13]=calperimetro(x1,y1,x2,y2,x3,y3)
L23=((x3-x2)^2+(y3-y2)^2)^0.5; L12=caldis(x1,y1,x2,y2);
L13=((x1-x3)^2+(y1-y3)^2)^0.5; L23=caldis(x2,y2,x3,y3);
perimetro=L12+L23+L13; L13=caldis(x1,y1,x3,y3);
p=perimetro/2; perimetro=L12+L23+L13;
area=(p*(p-L12)*(p-L13)*(p-L23))^0.5;
fprintf('El perimetro es %.2f\n',perimetro); function d=caldis(x1,y1,x2,y2)
fprintf('El area es %.2f\n',area); d=((x1-x2)^2+(y1-y2)^2)^0.5;

function area=calarea(a,b,c,p);
%Versión con funciones
area=(p*(p-a)*(p-b)*(p-c))^0.5;

Principal function mostrar(perimetro,area)


fprintf('El perimetro es %.2f\n',perimetro);
Calcular Calcular Mostrar fprintf('El area es %.2f\n',area);
Leer datos
perimetro area Resultado

calcular
Leer punto
distancia

Autor: Ing. Máximo Obregón R. (+51) 951629294 / maximo@uni.edu.pe 54

También podría gustarte