3. Ficheros .m
• Sistema de ecuaciones
-cos x + y = -0.5
ln(x+1) – 3 arcsen y = 2.5
y1 = cos x – 0.5
y2 = sen ln(x+1) – 2.5
3
4. Solución numérica y gráfica
índices de las soluciones:
i =
1568 4982 7466
valores de las soluciones:
sol =
1.5670 4.9810 7.4650
5. x = 0:0.001:10;
y1=cos(x)-0.5;
y2=sin((-2.5+log(x+1))/3);
plot(x,y1)
hold on
plot(x,y2)
grid
i=find(abs(y1-y2)<0.0005);
disp('índices de las soluciones:')
i
disp('valores de las soluciones:')
sol = x(i)
h = plot(x(i), y1(i), '*');
set(h,'Linewidth',5)
xlabel('variable x')
ylabel('valores de las funciones y1 y y2')
title('solución gráfica de un sistema de ecuaciones')
7. Programa
% dominio de valores de la variable x
x = 0:0.001:10;
% funciones y1 y y2
y1=cos(x)-0.5;
y2=sin((-2.5+log(x+1))/3);
8. % gráfica de y1
plot(x,y1)
% retiene la ventana para graficar y2
hold on
% gráfica de y2
plot(x,y2)
% rejilla
grid
9. % se buscan los índices de los vectores x, y1 o y2
% que cumplen que y1 = y2 con una precisión de 0.0005
i=find(abs(y1-y2)<0.0005);
% impresión de los índices de las soluciones
disp('índices de las soluciones:')
i
% impresión de las soluciones
disp('valores de las soluciones:')
sol = x(i)
10. % trazado de los puntos de intersección de las 2
curvas
% usando los valores de los índices
h = plot(x(i), y1(i), '*');
set(h,'Linewidth',5)
% leyendas de los ejes
xlabel('variable x')
ylabel('valores de las funciones y1 y y2')
title('solución gráfica de un sistema de ecuaciones')
11. Funciones
function fact = factorial(n)
% esta función calcula el factorial
% de un numero entero n
% comprueba que el argumento de entrada sea
% un número entero y positivo
if ~((fix(n)==n) &(n>=0))
error('el número debe ser entero positivo')
end
% cálculo del factorial
fact = prod(1:n);
12. fix
>> help fix
FIX Round towards zero.
FIX(X) rounds the elements of X to the nearest integers
towards zero.
See also floor, round, ceil.
Overloaded functions or methods (ones with the same name in other
directories)
help darray/fix.m
help sym/fix.m
Reference page in Help browser
doc fix
13. Uso de la función
>> factorial(5)
>> f5=factorial(5)
>> factorial(3.4)
>> factorial(-3)
>> help factorial
14. Recursividad
function fact = factorial2(n)
% retorna el factorial de un número entero n
% Si no es un entero o es negativo la función
% muestra un mensaje de error
if fix(n)~=n |n<0
help factorial2
error('la función solo acepta enteros naturales!')
end
% método recursivo
if n==0
fact=1;
else
fact=n*factorial2(n-1);
end
15. Bucle for% Instrucciones de control: bucle
for
% inicialización
vector=[];
for i=1:inf
% resto de la division de i por 5
if (rem(i,5)==0)
% concatenación
vector=[vector i];
end
if length(vector)==10
% salida del bucle for
break
end
end
>> bucle_for
>> vector
vector =
Columns 1 through 9
5 10 15 20 25 30 35
40 45
Column 10
50
16. Bucle while
% Instrucciones de control: bucle
while
vector=[];
i=1;
while (length(vector)<10)
i=i+1;
if (rem(i,5)==0)
vector=[vector i];
end
end
>> bucle_while
>> vector
vector =
Columns 1 through 9
5 10 15 20 25 30 35
40 45
Column 10
50
17. Señal saturada
• Tenemos una señal u(t)
• Limitar esta señal entre los valores
– max
– min
• min=0; max=10
• satura(6.5, min, max) 6.5
• satura(10.5, min, max) 10
• Satura(-1.5, min, max) 0
18. Función saturar
function limite = saturar(u, min, max)
% limitación de una señal
% si señal < min entonces señal = min,
% si señal > max entonces señal = max,
% si min <= señal <= max la señal no se modifica
% expresiones lógicas retornan 0(F) ó 1(V)
expr1 = (u >= max);
expr2 = (u <= max);
expr3 = ((u < max) & (u > min));
limite = expr1 .* max + expr2 .* min + expr3.*u;
19. Señal a saturar
close all
clear all
% los límites de la señal
min = 0;
max = 10;
% señal sinusoidal con ruido
t = 0:100;
ruido = 3*randn(size(t));
u = 15*sin(0.1*t)+ ruido;
% la saturación
sgn = saturar(u,min,max);
% señal no saturada
figure(1)
plot(t,u);
% señal saturada
hold on
h=plot(t,sgn);
set(h,'LineWidth',2)
21. Ejplo 1
• Escribir un programa que calcula media y la
varianza de una serie de valores
22. % cierra todas las ventanas graficas
close all
% borra todas las variables del espacio de trabajo
clear all
% calcular la media y la varianza de una serie de valores
% sinusoide entre -2pi y +2pi
x=-2*pi:pi/10:2*pi;
y=sin(x);
% ruido gaussiano del mismo tamaño que x e y
% con varianza 1
b=randn(size(x));
z=y+b;
23. % calculo de la media y la varianza
med_z=mean(z);
var_z=std(z)^2;
% trazado de la señal ruidosa e impresion de resultados
% trazado de los diferentes puntos con el simbolo '*'
plot(x,z,'*')
hold on % para trazar otra curva sobre el mismo grafico
% trazado de la curva que pasa por esos puntos
plot(x,z)
% anotaciones en los ejes
xlabel('variable x')
ylabel('sinusoide ruidosa')
title('media y varianza de una serie de valores')
% impresion de valores en la ventana grafica
gtext([' media : ' num2str(med_z)])
gtext([' varianza : ' num2str(var_z)])
24. gtext
• Muestra un texto en una ventana en el lugar
seleccionado con el mouse
• Acepta una cadena de caracteres o una tabla de
cadenas con la transformación de caracteres a valor
numérico por el comando num2str
28. clear all, close all
x=-2*pi:pi/100:2*pi;
% vector y (2da dimensión)
y = 2*x;
% vector z (3ra dimensión)
z = sinc(x-y);
% trazado de la función en 3D
% retorna el puntero h
h=plot3(x,y,z);
% grosor del trazo
set(h,'LineWidth',2)
grid
63. gca
>> help gca
GCA Get handle to current axis.
H = GCA returns the handle to the current axis in the current
figure. The current axis is the axis that graphics commands
like PLOT, TITLE, SURF, etc. draw to if issued.
Use the commands AXES or SUBPLOT to change the current axis
to a different axis, or to create new ones.
See also axes, subplot, delete, cla, hold, gcf, gcbo, gco, gcbf.
Reference page in Help browser
doc gca
64. openvar
• Edita una variable en la ventana del editor
>> x=rand(5,10);
>> openvar('x')
71. Scripts .m
• No aceptan argumentos de llamada
• No retornan valores
• Operan únicamente sobre las variables del espacio
de trabajo
72. Funciones
• Pueden aceptar argumentos de llamada y re-envio
de resultados
• Las variables internas son locales a menos que
sean declaradas globales
• Las funciones son útiles porque extienden las
posibilidades del lenguaje
73. Descripción de una Función
• La línea de definición con la palabra clave function
• 1ra línea de comentario
– lookfor
• Algunas lineas de comentario
– help mi_funcion
• Cuerpo de la función
74. • Escriba una función para calcular el factorial de un
número entero
• factorial.m
77. • Escribir un programa que calcula media y la
varianza de una serie de valores
• El script llama a 3 funciones
– Genera la señal ruidosa
– Calcula la media y la varianza
– Muestra la curva
79. • genera_serie.m
function z = genera_serie
– Retorna el vector z sin recibir parámetros de llamada
• calcula_med_var.m
function [med, var]= calcula_med_var(w)
– Retorna un vector con la media y la mediana después de recibir la
señal z
• traza_serie.m
function traza_serie(x,z)
– Recibe los vectores x y z para el trazado y no regresa argumentos
80. • La variable x es declarada global en la función que
la genera y las que la utilizan
• global x y z
• isglobal(x)
– Regresa 1 si es global
– 0 si no lo es
81. Derivada de una función
• >> x = [0 3 8 1];
• >> diff(x)
• >> p= [ 1 0 -1]
• >> p_derivada = polyder(p)
82. derivada.m
x = -1:.01:1; % intervalo de la variable x
f = x.^2-1; % función a derivar
plot(x,f); % trazado de la función f(x)
dx = diff(x); % incrementos dx de la variable x
df = diff(f); % incrementos df de la función f(x)
df_dx = df./dx; % derivada de f(x)
hold on
plot(x(1:length(x)-1),df_dx,':');
axis([-1 1 -2 2])
grid
84. integral.m
dx = 0.001; % paso de integración
a = -1; b = 1; % limites del dominio de integración
x = a:dx:b; y = x;
g = cumsum(y.*dx); % suma acumulada de las áreas
% de los rectángulos
% trazado de la integral
plot(x,g), hold on
% trazado de la función y = f(x)
plot(x,y,'-.')