Class User Defined Function
Class User Defined Function
a. Una función es una pieza de código de un lenguaje de programación que acepta un argumento de entrada por
parte del usuario por ejemplo la función y con una salida o respuesta.
b. La funcion ayuda a programar fácilmente, lo que permite ahorrar tiempo con el calculo que se realiza
frecuentemente.
c. Son muchas las funciones internas de matlab, pero en algún momento se tiene la necesidad de definir una
función propia.
d. La función definida por el usuario se guarda como un archivo punto m (*.m). Matlab puede utilizar el archivo si
está guardado en el directorio en el que se esta trabajando.
e. El archivo con el que se guardo la función se puede incorporar como subprograma dentro de otro programa de
mayor tamaño. Es posible construir programas extensos uniendo funciones que se pueden evaluar y depurar
independientemente.
f. Las funciones internas de matlab y las funciones definidas por el usuario poseen la misma estructura. Cada una
tiene un nombre que se le asigna a la función, una alimentación proporcionado por el usuario y la salida.
g. La primera línea, cuando se crea una función definido por el usuario, que se guarda como un
archivo (*.m), por ejemplo el archivo triangle.m es de la siguiente forma:
Ejemplo 1: rectanglearea.m
Ejemplo 2: spher.m
Ejemplo 3: trajectory.m
Ejercicio 1: polynomialseconddegree.m
%La función evalua un polinomio de segundo grado en el intervalo (a ≤ x ≤ b)
function [] = polynomialseconddegree(a,b)
x=a:0.01:b;
y=5*x. ^2 - 2*x +1;
plot(x,y);
end
Ejercicio 2: circleonpolarcoordinates.m
% La función grafica una parte de la circunferencia de radio 1 con centro en el origen en
% coordenada polares; dependiendo del valor que se asigne a la variable angle, si angle es 𝜋 se
% mostrará la mitad superior de la circunferencia, y si angle es 2𝜋 se
% mostrará una circunferencia completa
function []=circleonpolarcoordinates(angle)
tetha=0:0.01:angle;
r=tetha.^0;
polar(tetha,r);
end
Ejercicio 3: forcegravity.m
function [mass,density] = forcegravity(r)
%La función calcula la masa y la densidad del plenta Tierra.
global G;
global g;
G=6.6712e-11;
g=9.81;
mass=g*r^2/G;
volume=4*pi*r^3/3;
density=mass/volume;
end
Ejercicio 4: factorials.m
% La función calcula el factorial de n.
function [factorial] = factorials(n)
if n==0
factorial=1;
else
while (n<0 || rem(n,1)~=0)
disp("recuerda que n debe der entero y positivo")
n=input('introduce nuevamente n=? ');
end
f=1;
for i=1:1:n
f=f*i;
end
factorial=f;
end
end
Ejercicio 5: lessernumberinsidedatalist.m
% La función calculará el menor número al interior de una lista de datos, ingresados los datos
% uno por uno con el teclado
function [lesser] = lessernumberinsidedatalist(n)
while (n<=0 || rem(n,1)~=0)
disp("recuerda que n debe ser entero y positivo")
n=input('newly enter the value of n=? ');
end
x1=input('Introduce el dato 1 ');
lesser=x1;
for i=2:1:n
fprintf('Introduce el dato %g ',i),x=input(' ');
if lesser >x
lesser=x;
end
end
end
Ejercicio 6: lessernumberinsidearrayonedimensional.m
% La función calcula el menor número al interior de un vector unidimensional, ingresados todos
% los datos al mismo tiempo en un solo vector.
% enter the elements on way of array one dimensional x=[x1,x2,x3, ... ,xn]
function [lesser] =lessernumberinsidearrayonedimensional(x)
lesser=x(1);
n=length(x);
for i=2:1:n
if lesser>x(i)
lesser=x(i);
end
end
end
Ejercicio 7: orderinglessergreaternumbersinsidearrayonedimensional.m
% La función ordena los números de menor a mayor al interior de una matriz unidimensional,
% ingresados todos los datos al mismo tiempo en un solo vector
% La funcón regresa otro vector, como una lista de datos ordenados de menor a mayor
% enter the elements on way of array one dimensional x=[x1,x2,x3, ... ,xn]
function [x] =orderinglessergreaternumbersinsidearrayonedimensional(x)
n=length(x);
for j=1:1:n-1
greater=x(1);
for i=1:1:n-j
if greater >x(i+1)
x(i)=x(i+1);
x(i+1)=greater;
else
greater=x(i+1);
end % fin del if
end % fin del for interior (anidado)
end % fin del for exterior
end
En programación, poder definir funciones propias para ejecutarlas en un programa es de verdadera utilidad, ya que
serán la mayoría de programas que queramos crear para operar con ellos.
Para crear un fichero que contenga una función sera muy importante crear o guardar el archivo.m con el mismo
nombre de la función para su correcta ejecución posterior.
Un archivo.m puede contener varias functions. Sin embargo, solo la primera de ellas puede
ser invocada desde fuera del archivo: desde un guion, desde the command window,
otra funcion ubicada en otro archivo. ¿Cuál es la utilidad entonces de escribir varias functions
en un archivo.m? La respuesta es sencilla, a veces una function es lo suficientemente
compleja como para dividir su codigo en varias functions. A la primera function ubicada en
un archivo.m se le llama función principal y al resto funciones auxiliares. Las funciones ubicadas
en un mismo archivo pueden invocarse entre ellas, pero desde fuera del archivo solo se
puede llamar a la principal.
a. The mean ( ⏨
x)
n
∑ xi
i=1 x1 + x2 + x3 + ⋯ + xn
x=
⏨ =
n n
b. The variance s 2
n
∑ (x i - ⏨
x)2
i=1 x ) 2 + (x 2 - ⏨
(x 1 - ⏨ x ) 2 + (x 3 - ⏨
x ) 2 + … + (x n - ⏨
x)2
s2 = =
n-1 n-1
s = + s2
Example numerical.
x={9, 8, 10, 5, 7}
5
∑ xi
i=1 9 + 8 + 10 + 5 + 7 39
a. x=
⏨ = =
5 5 5
x = 7.8
⏨
s 2 = 3.7
c. s = + 3.7
s = 1.923538406
average.m
% La funcion calcula el promedio
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [promedio]=average(x)
suma=0;
n=length(x);
for i=1:1:n
suma=suma+x(i);
end
promedio=suma/n;
end
variance.m
% La funcion calcula la varianza y la desviacion estandar
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [varianza,standarddeviation]=variance(promedio,x)
n=length(x);
suma=0;
for i=1:1:n
suma=suma+(x(i)-promedio)^2;
end
varianza=suma/(n-1);
standarddeviation=sqrt(varianza);
end
parameters.m
% El programa calcula la media, la varianza y la desviacion estandar
% con una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
clear all,clc
x=input('Introduce el arreglo en forma de vector? ');
n=length(x);
[promedio]=average(x)
[varianza,standarddeviation]=variance(promedio,x)% fin del programa
% La funcion calcula el promedio
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [promedio]=average(x)
suma=0;
n=length(x);
for i=1:1:n
suma=suma+x(i);
end
promedio=suma/n;
end
% La funcion calcula la varianza y la desviacion estandar
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [varianza,standarddeviation]=variance(promedio,x)
n=length(x);
suma=0;
for i=1:1:n
suma=suma+(x(i)-promedio)^2;
end
varianza=suma/(n-1);
standarddeviation=sqrt(varianza);
end
% end program
parameters.m
% El programa calcula la media, la varianza y la desviacion estandar
% con una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
clear all,clc
x=input('Introduce el arreglo en forma de vector? ');
n=length(x);
[promedio]=average(x)
[varianza,standarddeviation]=variance(promedio,x)
% end program
a. The mean ( ⏨
x)
n
∑ xi
i=1 x1 + x2 + x3 + ⋯ + xn
x=
⏨ =
n n
mediana = x n + 1 ; si n es par.
2
xn + xn
+1
2 2
mediana = ; si n es impar.
2
c. The variance s 2
n
∑ (x i - ⏨
x)2
i=1 x ) 2 + (x 2 - ⏨
(x 1 - ⏨ x ) 2 + (x 3 - ⏨
x ) 2 + … + (x n - ⏨
x)2
s2 = =
n-1 n-1
s = + s2
Example numerical.
x={9, 8, 10, 5, 7}
5
∑ xi
i=1 9 + 8 + 10 + 5 + 7 39
a. x=
⏨ = =
5 5 5
x = 7.8
⏨
mediana = x n + 1 ; si n es par.
2
x n + x n +1
2 2
mediana = ; si n es impar.
2
primero se ordenan los datos (9, 8, 10, 5, 7) de menor a mayor (5, 7, 8, 9, 10); n=5 datos
mediana = x n + 1 = x 5 + 1 = x 6 = x3 = 8
2 2 2
5
∑ (x i - ⏨
x)2
i=1 (9 - 7.8) 2 + (8 - 7.8) 2 + (10 - 7.8) 2 + (5 - 7.8) 2 + (7 - 7.8) 2 14.8
c. s2 = = =
5-1 5-1 4
s 2 = 3.7
d. s = + 3.7
s = 1.923538406
average.m
% La funcion calcula el promedio
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [promedio]=average(x)
suma=0;
n=length(x);
for i=1:1:n
suma=suma+x(i);
end
promedio=suma/n;
end
inicio
% program that claculate median
clear,clc
x = {x1 , x2 , x3 , … , xn }
% x=[x1,x2,x3, ... ,xn]
x=input('enter the elements on way of array');
n n=length(x);
for j=1:1:n-1
para j=1,∆j = 1, j = n - 1 greater=x(1);
for i=1:1:n-j
if greater >x(i+1)
greater = x1
x(i)=x(i+1);
x(i+1)=greater;
para i=1,∆i = 1, i = n - j else
greater=x(i+1);
False True end % fin del if
greater > xi+1
end % fin del for interior
end % fin delfor exterior
greater = xi+1 xi = xi+1
if rem(n,2)==0
mediana=(x(n/2)+x((n/2)+1))/2;
xi+1 = greater else
mediana=x((n+1)/2);
end
disp(x)
fprintf('\nLa mediana es %g picocurie/gramo\n',mediana)
% end program
False n True
residuo =0
2
(x n + x n )
mediana = x n + 1 2 2
+1
2 mediana =
2
mediana
fin
themedian.m
% La funcion calcula la mediana
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [mediana]=themedian(x)
n=length(x);
for j=1:1:n-1
greater=x(1);
for i=1:1:n-j
if greater >x(i+1)
x(i)=x(i+1);
x(i+1)=greater;
else
greater=x(i+1);
end % fin del if
end % fin del for interior
end % fin delfor exterior
if rem(n,2)==0
mediana=(x(n/2)+x((n/2)+1))/2;
else
mediana=x((n+1)/2);
end
end
variance.m
% La funcion calcula la varianza y la desviacion estandar
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [varianza,standarddeviation]=variance(promedio,x)
n=length(x);
suma=0;
for i=1:1:n
suma=suma+(x(i)-promedio)^2;
end
varianza=suma/(n-1);
standarddeviation=sqrt(varianza);
end
parameterscentral.m
% El programa calcula la: media, mediana, varianza y desviacion estandar
% con una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
clear all,clc
x=input('Introduce el arreglo en forma de vector? ');
n=length(x);
[promedio]=average(x)
[mediana]=themedian(x)
[varianza,standarddeviation]=variance(promedio,x) % fin del programa
% La funcion calcula el promedio de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [promedio]=average(x)
suma=0;
for i=1:1:n
suma=suma+x(i);
end
promedio=suma/n;
end
% La funcion calcula la mediana
% de una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
function [mediana]=themedian(x)
n=length(x);
for j=1:1:n-1
greater=x(1);
for i=1:1:n-j
if greater >x(i+1)
x(i)=x(i+1);
x(i+1)=greater;
else
greater=x(i+1);
parameterscentral.m
% El programa calcula la: media, mediana, varianza y desviacion estandar
% con una lista de datos agrupados en forma de un vector
% Las datos se deben ingresar como un vector x=[x1,x2,x3, ... ,nx]
clear all,clc
x=input('Introduce el arreglo en forma de vector? ');
n=length(x);
[promedio]=average(x)
[mediana]=themedian(x)
[varianza,standarddeviation]=variance(promedio,x)
% end program
Elaborar un programa que ajuste el modelo de línea recta a un conjunto de datos, por el método de mínimos
cuadrados :
a. la pendiente de la línea recta [a]
b. la intersección con el eje y [b]
c. el modelo lineal [f(x)=ax+b]
d. las graficas de el diagrama de dispersión junto con el modelo ajustado
e. el coeficiente de correlación de Karl Pearson. [r 2 ]
n n n
n ∑ xi yi - ∑ xi ∑ yi
i=1 i=1 i=1
a=
2
n n
n ∑ xi2 - ∑ xi
i=1 i=1
b. y - intercept (b)
c. Linear model.
f(x) = y = ax+b
f(x) = y = ax + b
y sixa
yn
⋮
y3
y2
y1
x1 x2 x3 ⋯ xn exis x
n
∑ [f(xi ) - ⏨
y]2
i=1
r2 = n
∑ [y i - ⏨
y]2
i=1
n
∑ yi
i=1
ten presente que el promedio es y=
⏨
n
r= r2
Example numerical.
x={-2, -1, 0, 1, 2}
y={ 0, 0, 1, 1, 3}
Substituyendo los datos x={-2, -1, 0, 1, 2} , y={ 0, 0, 1, 1, 3} en las fórmula; n=5 datos.
a.
5 5 5
5 ∑ xi yi - ∑ xi ∑ yi
i=1 i=1 i=1 5[x1 y1 + x2 y2 + x3 y3 + x4 y4 + x5 y5 ] - (x1 + x2 + x3 + x4 + x5 )(y1 + y2 + y3 + y4 + y5 )
a=
2
=
5 5 5 x12 + x22 + x32 + x42 + x52 - (x1 + x2 + x3 + x4 + x5 ) 2
5∑ xi2 - ∑ xi
i=1 i=1
5[(-2)(0) + (-1)(0) + (0)(1) + (1)(1) + (3)(2)] - (-2 - 1 + 0 + 1 + 2)(0 + 0 + 1 + 1 + 3) 5(0 + 0 + 0 + 1 + 6) - (0)(5) 5(7) + 0
a= = =
2
5 (-2) + (-1) + 0 + 1 + 2 2 2 2 2
- (-2 - 1 + 0 + 1 + 2) 2 5(4 + 1 + 0 + 1 + 4) - 0 2 5(10) - 0
35 7
a= =
50 10
a = 0.7
b.
5 5 5 5
∑ xi2 ∑ yi - ∑ xi ∑ xi yi
i=1 i=1 i=1 i=1
x12 + x22 + x32 + x42 + x52 (y1 + y2 + y3 + y4 + y5 ) - (x1 + x2 + x3 + x4 + x5 )(x1 y1 + x2 y2 + x3 y3 + x4 y4 + x5 y5 )
b= 2
=
5 5 5 x12 + x22 + x32 + x42 + x52 - (x1 + x2 + x3 + x4 + x5 ) 2
5∑ xi2 - ∑ xi
i=1 i=1
b=1
c. f(x) = y = 0.7x + 1
d.
yn
⋮
y3
y2
y1
x1 x2 x3 ⋯ xn exis x
5
∑ [f(xi ) - y⏨] 2
i=1 [(0.7x1 + 1) - 1] 2 + [(0.7x2 + 1) - 1] 2 + [(0.7x3 + 1) - 1] 2 + [(0.7x4 + 1) - 1] 2 + [(0.7x5 + 1) - 1] 2
r2 = =
5
∑ [yi - y⏨] 2 (y1 - y⏨) 2 + (y2 - y⏨) 2 + (y3 - y⏨) 2 + (y4 - y⏨) 2 + (y5 - y⏨) 2
i=1
2 [(-2 × 0.7 + 1) - 1] 2 + [(-1 × 0.7 + 1) - 1] 2 + [(0 × 0.7 + 1) - 1] 2 + [(1 × 0.7 + 1) - 1] 2 + [(2 × 0.7 + 1) - 1] 2
r =
(0 - 1) 2 + (0 - 1) 2 + (1 - 1) 2 + (1 - 1) 2 + (3 - 1) 2
2 (-1.4) 2 + (-0.7) 2 + 0 2 + (0.7) 2 + (1.4) 2 1.96 + 0.40 + 0.49 + 1.96 4.9
r = = = = 0.8167
1+1+0+0+4 6 6
5
∑ yi
i=1 y1 + y2 + y3 + y4 + y5 0+0+1+1+3 5
ten presente que el promedio es y⏨= = = = =1
5 5 5 5
r= r2 = 0.8167
r = 0.9037
inicio
x = {x1 , x2 , x3 , ⋯ , xn }
y = {y1 , y2 , y3 , … , yn }
sumaxy=0
sumax=0
sumay=0
pendienteinterseccion.m
% La function calcula la pendiente de la recta y la interseccion con el eje y
% con dos lista de datos agrupados, cada uno, en forma de un vector
% Las datos se deben ingresar como dos vectores
% separados por una coma x=[x1,x2,x3, ... ,nx], y=[y1,y2,y3, ... ,yn]
function [a,b]=pendienteinterseccion(x,y)
sumaxy=0;
sumax=0;
sumay=0;
sumax2=0;
n=length(x);
for i=1:1:n
sumaxy=sumaxy+x(i)*y(i);
sumax=sumax+x(i);
sumay=sumay+y(i);
sumax2=sumax2+x(i)^2;
end
a=(n*sumaxy-sumax*sumay)/(n*sumax2-sumax^2);
b=(sumax2*sumay-sumax*sumaxy)/(n*sumax2-sumax^2);
end
coefficientcorrelation.m
% La function calcula the Karl Pearson's coefficient of correlation.
% con dos listas de datos agrupados, cada una, en forma de un vector.
% Los datos se deben ingresar como dos vectores, separados por una coma
% x=[x1,x2,x3, ... ,nx], y=[y1,y2,y3, ... ,yn]. También deberan ingresar
% la pendiente de la recta (a) y la interseccion de la recta con ele eje y (b)
function [r2,r]=coefficientcorrelation(a,b,x,y)
n=length(x);
sumay=0;
for i=1:1:n
sumay=sumay+y(i);
end
f=a*x+b;
suma1=0;
suma2=0;
promedioy=sumay/n;
for i=1:1:n
suma1=suma1+(f(i)-promedioy)^2;
suma2=suma2+(y(i)-promedioy)^2;
end
r2=suma1/suma2;
r=sqrt(r2);
end
linearmodel.m
%La función grafica un diagrama de dispersion
% junto con el ajuste de linea recta
% Los datos se deben ingresar como dos vectores, separados por una coma
linearfit.m
% El programa ajusta el modelo lineal a dos conjuntos de datos
% agrupados en dos vectores [x1,x2,x3, ... ,xn], [y1,y2,y3, ... , yn]
% y muestra en pantalla el diagrama de dispersion junto con
% la linea recta ajustada y los grafica en el intervalo (x1 ≤ t ≤ x2)
% Tambien calcula la pendienete de la recta (a),
% la interseccion de la recta con el eje y (b) y el coeficiente
% de correlacion de Karl Pearson
clear all,clc
x=input('Introduce el arreglo en forma de vector x=? ');
y=input('Introduce el arreglo en forma de vector y=? ');
n=length(x);
[a,b]=pendienteinterseccion(x,y)
[r2,r]=coefficientcorrelation(a,b,x,y)
linearmodel(a,b,x,y)
fprintf('El modelo ajustado es f(x)=%gx +%g\n',a,b) % fin del programa
linearfit.m
% El programa ajusta el modelo lineal a dos conjuntos de datos
% agrupados en dos vectores [x1,x2,x3, ... ,xn], [y1,y2,y3, ... , yn]
% y muestra en pantalla el diagrama de dispersion junto con
% la linea recta ajustada y los grafica en el intervalo (x1 ≤ t ≤ x2)
% Tambien calcula la pendienete de la recta (a),
% la interseccion de la recta con el eje y (b) y el coeficiente
% de correlacion de Karl Pearson
clear all,clc
x=input('Introduce el arreglo en forma de vector x=? ');
y=input('Introduce el arreglo en forma de vector y=? ');
n=length(x);
[a,b]=pendienteinterseccion(x,y)
[r2,r]=coefficientcorrelation(a,b,x,y)
linearmodel(a,b,x,y)
fprintf('El modelo ajustado es f(x)=%gx +%g\n',a,b) % fin del programa
% end program