Funciones
## Objetivos de Aprendizaje
- Comprender scripts vs archivos de funciones
- Crear y llamar funciones
- Pasar parametros y devolver valores
- Trabajar con funciones anonimas
- Manejar listas de argumentos variables
## Scripts vs Funciones
### Scripts
- Guardados en archivos `.m` con comandos
- Operan sobre variables en el espacio de trabajo
- No tienen argumentos de entrada/salida
```matlab
% miscript.m
a = 5;
b = 10;
c = a + b;
disp(c);
```
### Script vs Funcion
- Aceptan entradas y devuelven salidas
- Tienen su propio espacio de trabajo
- Encapsulan codigo reutilizable
```matlab
% mifuncion.m
function salida = mifuncion(entrada)
salida = entrada * 2;
end
```
## Estructura del Archivo de Funcion
### Funcion Basica
```matlab
function salida = cuadrado(x)
%CUADRADO Devuelve el cuadrado de un numero
% cuadrado(x) calcula x^2
salida = x ^ 2;
end
```
### Multiples Entradas y Salidas
```matlab
function [suma, producto] = calc(x, y)
%CALC Calcula suma y producto
% [s, p] = calc(x, y) devuelve suma s y producto p
suma = x + y;
producto = x * y;
end
```
### Funcion sin Salida
```matlab
function printMessage(msg)
%PRINTMESSAGE Muestra un mensaje
disp(msg);
end
```
## Llamando Funciones
### Llamada Basica
```matlab
% Salida unica
resultado = cuadrado(5);
disp(resultado); % 25
% Multiples salidas
[s, p] = calc(3, 4);
disp(s); % 7
disp(p); % 12
```
### Paso por Valor
```matlab
% MATLAB usa paso por valor para la mayoria de tipos
function y = doble(x)
x = x * 2;
y = x;
end
a = 5;
b = doble(a);
disp(a); % 5 (sin cambios)
disp(b); % 10
```
## FuncionesAnonimas
### FuncionAnonima Basica
```matlab
% Sintaxis: @(args) expresion
sqr = @(x) x ^ 2;
resultado = sqr(5); % 25
% Multiples entradas
add = @(x, y) x + y;
resultado = add(3, 4); % 7
```
### Usando FuncionesAnonimas
```matlab
% Como argumentos de funciones
arr = [1, 2, 3, 4, 5];
resultado = arrayfun(@(x) x^2, arr);
% Crear manejadores de funcion
f = @(x) sin(x) / x;
f(0) % Devuelve 1 (limite)
```
### Devolviendo Multiples Valores
```matlab
% Usando celdas
stats = @(x) {mean(x), std(x)};
resultado = stats([1, 2, 3, 4, 5]);
meanVal = resultado{1}; % 3
stdVal = resultado{2}; % 1.5811
```
## Argumentos Variables
### Numero Variable de Entradas
```matlab
function resultado = sumAll(varargin)
%SUMALL Suma todos los argumentos de entrada
resultado = 0;
for i = 1:length(varargin)
resultado = resultado + varargin{i};
end
end
sumAll(1, 2, 3) % 6
sumAll(1, 2, 3, 4) % 10
```
### Numero Variable de Salidas
```matlab
function varargout = powers(x, n)
%POWERS Devuelve potencias de x de 1 a n
for i = 1:n
varargout{i} = x ^ i;
end
end
[a, b, c] = powers(2, 3); % a=2, b=4, c=8
```
## Funciones Anidadas
### Alcance de Funciones Anidadas
```matlab
function outerFunction(x, y)
%OUTERFUNCTION Funcion externa
z = 10;
function innerFunction(a)
%INNERFUNCTION Funcion anidada
% Puede acceder a x, y, z del alcance externo
resultado = a + x + y + z;
disp(resultado);
end
innerFunction(5);
end
```
### Variables Compartidas
```matlab
function mainFunction()
compartido = 0;
function incrementar()
% Puede modificar la variable compartida
compartido = compartido + 1;
end
incrementar();
incrementar();
disp(compartido); % 2
end
```
## Argumentos Predeterminados
### Verificando Existencia de Entrada
```matlab
function resultado = saludar(nombre)
if ~exist('nombre', 'var')
nombre = 'Mundo';
end
resultado = ['Hola, ', nombre, '!'];
end
saludar() % 'Hola, Mundo!'
saludar('MATLAB') % 'Hola, MATLAB!'
```
### Usando nargin
```matlab
function resultado = interes(principal, tasa, anos)
if nargin < 3
anos = 1;
end
if nargin < 2
tasa = 0.05;
end
if nargin < 1
principal = 1000;
end
resultado = principal * (1 + tasa) ^ anos;
end
```
## Retorno Temprano
### Salida Anticipada
```matlab
function resultado = safeDivide(a, b)
%SAFEDIVIDE Divide a por b de forma segura
if b == 0
resultado = NaN;
return;
end
resultado = a / b;
end
```
## Funciones de Funciones
### Pasando Funciones como Argumentos
```matlab
% Usar @ para manejador de funcion
f = @(x) x^2 - 2*x + 1;
root = fzero(f, 0); % Encontrar raiz de funcion
% Integracion
integral(@sin, 0, pi) % 2
```
### Optimizacion
```matlab
% Encontrar minimo de funcion
f = @(x) (x-3)^2 + 1;
[xMin, fMin] = fminsearch(f, 0);
```
## Resumen
- Los scripts contienen comandos; las funciones acceptan entradas y devuelven salidas
- Los archivos de funciones comienzan con la palabra clave `function`
- Funciones anonimas: `@(args) expresion`
- Usar `varargin`/`varargout` para argumentos variables
- Las funciones anidadas tienen acceso al espacio de trabajo padre
- Usar `nargin`/`nargout` para verificar el numero de argumentos
- Usar `@` para crear manejadores de funcion
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →