Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Clase 05
Clase 05
PROGRAMACIÓN EN
MATLAB
Estructuras de Control de Flujo
Los algoritmos tienen tres estructuras básicas:
1. Estructura Secuencial.
2. Estructura Selectiva.
3. Estructura Iterativa.
ESTRUCTURA SECUENCIAL
Es aquella en que la acción (instrucción), sigue a otra secuencia.
Acción 01;
Acción 02;
Acción 03;
…
Acción n 2
Estructuras de Control de Flujo
ESTRUCTURA SELECTIVA
Permiten realizar una u otra operación según se cumpla o no determinada
condición. Las siguientes figuras nos muestran tres posibles formas de bifurcación.
3
Estructuras de Control de Flujo
Sentencias de Control Selectiva Simple. La condición del if puede ser una
condición matricial del tipo A==B, donde
Por evaluación de condición: if …. else A y B son del mismo tamaño. Para que la
condición se cumpla es necesario que
sean igual dos a dos todos los elementos
de las matrices A y B
4
Estructuras de Control de Flujo
Sintaxis: 𝑖𝑓 𝐴 == 𝐵 exige que todos los elementos sean iguales dos a dos
𝑖𝑓 𝐴~ = 𝐵 exige que todos los elementos sean diferentes dos a dos
Donde:
condición, es la expresión a evaluarse. Su resultados es del tipo lógico (1 =
true, 0 = false).
sentencia(s)1, puede ser una o mas sentencias a ejecutarse siempre que
condición = true.
sentencia(s)2, puede ser una o mas sentencias a ejecutarse siempre que
condición = false (es opcional).
5
Estructuras de Control de Flujo
Casos especiales
Ausencia de sentencia(s)2
Sintaxis:
6
Estructuras de Control de Flujo
Ejercicio:
Crear un código que genere un número aleatorio entero del 1 al 100, y que a través
del condicional if diga si es par.
Sintaxis:
8
Estructuras de Control de Flujo
Ejercicio:
Crear un código que genere un número aleatorio entero del 1 al 100, y que a través
del condicional if diga si es par.
Sintaxis:
Estructuras de Control de Flujo
Ejercicio:
Crear un código que genere un número aleatorio entero del 1 al 100, y que a través
del condicional 𝑖𝑓 clasifique para los siguientes intervalos los números para valores
menores que 30, entre 31 y 800, mayores a 80.
a = randi(100, 1);
if a < 30
disp('menores a 30')
elseif a < 80
disp('entre 300 y 80')
else
disp('mayor a 80')
end
11
Estructuras de Control de Flujo
Por múltiples comparaciones: Alternativamente, cuando desee probar la igualdad con un
conjunto de valores conocidos, use:
switch … case …. otherwise
Sintaxis:
Estructuras de Control de Flujo
Ejemplo:
[dayNum, dayString] = weekday(date, 'long', 'en_US');
switch dayString
case 'Lunes'
disp('Inicia la semana de trabajo')
case 'Martes'
disp('Dia 2')
case 'Miercoles'
disp('Dia 3')
case 'Jueves'
disp('Dia 4')
case 'Viernes'
disp('Ultimo dia de la semana de trabajo')
otherwise
disp('Fin de semana!')
end
13
Estructuras de Control de Flujo
ESTRUCTURA ITERATIVA
Conocidas también como estructuras repetitivas, nos permiten repetir una
secuencia de instrucciones un número determinado de veces.
14
Estructuras de Control de Flujo
Por evaluación de condición: Conocidas también como estructuras repetitivas, nos
permiten repetir una secuencia de instrucciones un número determinado de veces.
Sentencia while
Sintaxis:
Estructuras de Control de Flujo
Sentencia while, donde condición puede ser una expresión vectorial o matricial. Las
sentencias se siguen ejecutando mientras haya elementos distintos de cero en
condición, es decir mientras haya algún o algunos elementos true. El bucle termina
cuando todos los elementos de condición son false (es decir, cero)
Sintaxis:
Estructuras de Control de Flujo
Los bucles while son similares a los bucles for. La gran diferencia es la forma en que
MATLAB decide cuántas veces repetir el bucle. Los bucles while continúan hasta
que se satisface algún criterio. El formato para un bucle while es
k=0;
while k<3
k=k+1;
a(k)=5^k
end
Estructuras de Control de Flujo
Por recorrido de contador: La sentencia for repite un conjunto de sentencias un
número pre-determinado de veces
Sentencia for
Sintaxis:
Estructuras de Control de Flujo
Ejemplo: Codificar y analizar el siguiente código.
x=1;y=2;z=3;
for i=1:3
x=2*x;
while x<5
y=y+1;
z=z*x;
x=y;
end
end
fprintf('x=%i \n',x);
fprintf('y=%i \n',y);
fprintf('z=%i \n',z);
Estructuras de Control de Flujo
La estructura del bucle for es simple. La primera línea identifica el bucle y define un
índice, que es un número que cambia en cada paso a través del bucle. Después de
la línea de identificación viene el grupo de comandos que se quiere ejecutar.
Finalmente, la terminación del bucle se identifica mediante el comando end.
Sentencia break
Sintaxis:
La sentencia del salto break se
ejecutará siempre que la evaluación
de condición resulte verdadera.
Sentencia continue
rango(k) define los valores de k para cada
Sintaxis: uno de los cuales se efectuará una iteración.
El cuerpo del bucle for contiene una
sentencia condiciona if que evalúa una
condición.
La sentencia de salto continue se ejecutará
siempre que la evaluación de condición
resulte verdadera.
Al ejecutarse continue se iniciará una nueva
iteración, salteando las instrucciones que
preceden a continue; es decir sentencia(s)3.
Introducción a los Métodos Numéricos
Son la rama de las matemáticas que se encargan de diseñar algoritmos para que a
través de números y reglas matemáticas simples, simular procesos matemáticos
complejos aplicados a procesos del mundo real. Entre los más aplicados podemos
mencionar:
Entrada: Salida:
𝑔(𝑥) : función iterativa 𝑝: aproximación resultante por el método
𝑝1 : valor inicial para el método de fijo.
punto fijo 𝑘: número de iteraciones
𝜀: tolerancia 𝑃: vector columna contiene la secuencia de
𝑚𝑎𝑥1 : máximo número de iteraciones aproximaciones 𝑃(1) , 𝑃 2 … 𝑃(𝑘)
𝑒𝑟𝑟𝑜𝑟: error cometido en la aproximación 𝑝
Solución de Ecuaciones No Lineales
Algoritmo (Diagrama de Flujo)
clear all; clc;
SOLUCIÓN
Empezando con un valor inicial 𝑥0 = 0, se aplica esta ecuación iterativa para calcular.
Solución de Ecuaciones No Lineales
MÉTODO DE NEWTON RAPHSON
% Metodo de Newton Raphson
clear all; clc;
P(1) = 0; error = 0.1;
it = 1; max = 40; METODO DE NEWTON RAPHSON
f = inline('exp(-x)-x');
df = inline('-exp(-x)-1');
it xi error
fprintf('METODO DE NEWTON RAPHSON\n'); 1 0.500000 0.500000
fprintf('\tit\t\txi\t\terror\n');
for k = 2:max
2 0.566311 0.066311
P(k) = P(k-1) - feval(f,P(k-1))/feval(df,P(k-1)); 3 0.567143 0.000832
error = abs(P(k)-P(k-1));
if error<10^-8
4 0.567143 0.000000
disp('CONVERGE'); CONVERGE
break;
end
Número de iteraciones 4
fprintf('\t%d\t%f\t%f\n',it,P(k),error); El valor calculado es 0.567143
it = it+1;
end
if k == max
fprintf('Máximo número de iteraciones excedido');
p = P(k);
end
fprintf('Número de iteraciones %d\n',it-1);
fprintf('El valor calculado es %f\n',P(k-1));
Análisis Numérico
POLINOMIOS
Los polinomios se representan por vectores cuyos elementos son los
coeficientes del polinomio en orden descendente. Por ejemplo, el polinomio:
𝑥 3 + 2𝑥 2 + 3𝑥 + 4
P = [1 2 3 4];
1 3 2 30 56 >> polyval(p1,A)
e= g=
>> a = [-1 2 3 -2]; b = [1 4 8 12]; -1 -2 3 14 46 31 -14
>> c = conv(a,b) -6 -10 12 42 68 9
>> f = c+[0 0 0 -d]
c=
f=
-1 -2 3 14 40 20 -24 -1 -2 3 14 34 9 -34
>> d = a+b >> [q,r]=deconv(c,b)
d= q=
-1 2 3 -2
0 6 11 10
r=
0 0 0 0 0 0 0
Análisis Numérico
AJUSTE DE CURVAS POR EL MÉTODO DE MÍNIMOS CUADRADOS
polyfit(x,y,n) : Calcula los coeficientes de un polinomio p(x) de grado n que ajusta
el dato, p(x(i)) a y(i)..
clear all; clc;close all;
% Se genera la data
xd=[0 1 2 3 4 5];
yd=[0.25 0.3 0.1 0.33 0.26 0.4];
p1=polyfit(xd,yd,1);
p2=polyfit(xd,yd,5);
% Graficar
x=-1:0.01:5;
y1=polyval(p1,x);
y2=polyval(p2,x);
h = plot(xd,yd,'sr',x,y1,'b',x,y2,'k');
axis([-0.15 5 -0.4 0.8]);
legend('datos','n=1','n=3');
grid on
Análisis Numérico
Ejercicio
Cree un vector de 5 puntos equidistantes en el intervalo [0,1] y evalúe en esos puntos
clear all;clc;
x = linspace(0,1,5);
y = 1./(1+x);
% Ajuste un polinomio de grado 4 a los 5 puntos.
p = polyfit(x,y,4);
% Evalúe la función original y
% el ajuste polinómico en una cuadrícula
% más detallada de puntos entre 0 y 2
x1 = linspace(0,2);
y1 = 1./(1+x1);
f1 = polyval(p,x1);
figure
plot(x,y,'o')
hold on
plot(x1,y1)
plot(x1,f1,'r--')
legend('y','y1','f1')
Análisis Numérico
INTERPOLACIÓN
yi=interp1(x,y,xi,method) : A partir de los puntos x e y (ambos vectores del mismo
tamaño) interpola los puntos yi correspondientes a xi; method es el método de
interpolación utilizado.
% Aqui se representa los sensos anuales
% correpondiente desde 1900 hasta 1990
% en EEUU en millones de personas
clear all; clc;
t = 1900:10:1990;
p = [75.995 91.972 105.711 123.203 131.669...
150.697 179.323 203.212 226.505 249.633];
% Ahora interpolaremos los datos desde 1900
%hasta el 2000
x = 1900:1:2000;
y = interp1(t,p,x,'spline');
plot(t,p,'o',x,y)
Análisis Numérico
CONSTRUCCIÓN DE OBJETOS SIMBÓLICOS
El MATLAB básico debe tener números con los que trabajar, o variables a las que se
les a asignado un valor numérico, por ejemplo, no podemos preguntar a MATLAB por
el seno de una variable a la que no se le a asignado valor previamente. Entonces
mediante los objetos simbólicos Matlab puede manipular expresiones de este tipo
(expresiones simbólicas), formado por símbolos y no solamente números.
>> y = sin(x)
Undefined function or variable 'x'.
>> a=sym(pi) % representación >> A=[1 1/3; 1 sqrt(2)] % A es uma matriz de tipo numerico
simbólica del valor numerico pi
A=
a=
1.0000 0.3333
pi 1.0000 1.4142
n= B=
3.1416 [ 1, 1/3]
[ 1, 2^(1/2)]
Análisis Numérico
CONSTRUCCIÓN DE OBJETOS SIMBÓLICOS
Para definir variables simbólicas que no tengan asignados valores concretos, se utiliza
el comando syms, un espacio en blanco y a continuación las variables simbólicas que
queramos construir. Ejemplo:
>> syms x y % creamos variables simbólicas x e y , con la que ya podemos operar %en
forma simbólica
Análisis Numérico
Operaciones Aritméticas
Análisis Numérico
Operaciones Aritméticas
>> syms x y
2*x^2-1/7*y
ans =
2*x^2 - y/7
f=
x^2 + 2*x + 1
Análisis Numérico
EJERCICIO
syms x a b c
f=a*x^2+b*x+c;
syms t
g = subs(f,x,t);
h=subs(g,{a,b,c},{2,1,0})
u=subs(h,t,2)
v=subs(h,t,[1:4])
Análisis Numérico
EJERCICIO
Construya f=a*x^2+b*x+c, sustitúyase x por t, para a =2,b=1,c=0, obténgase el valor
de f, cuando t=2 y t=[1:4]
function y=mifcn(x)
y(1)=200*sin(x)./x;
y(2)=x^2;
end
fh = @mifcn
fplot(fh,[-20 20])
fplot('[200*sin(x)./x,x.^2]',[-20 20])
Análisis Numérico
EJERCICIO
f='2*exp(-x).*sin(x)';
fplot(f,[0,8]);
title('f'),xlabel('x')
Análisis Numérico
[x,fval]=fminbnd(func,a,b) : Encuentra el valor mínimo en una función de una sola
variable en un intervalo fijo (a y b).
x= x=
0.8165 -0.2500
fval = val =
-6.0887 -1.1250
Análisis Numérico
[x,fval]=fminsearch(func,x0) : Encuentra el valor mínimo en una función multivariable
empezando en un valor estimado x0.
>> [x1,fval]=fminsearch('100*(x(2)-x(1).^2).^2+(1-x(2)).^2',[0,1])
function y=fcn3d(x)
y = 100*(x(2)-x(1)^2)^2+(1-x(1))^2; x1 =
end 1.0000 1.0000
fval =
8.0152e-10
Análisis Numérico
LOCALIZACIÓN DE CEROS
fzero(func,a) : Devuelve el cero de una función unidimensional, donde a es el punto cerca del
cual se busca el cero. func es un manipulador de función.
x= x= ans =
syms x
eqn = x^5 == 3125;
S = solve(eqn,x)
syms a b c x
eqn = a*x^2 + b*x + c == 0
Análisis Numérico
INTEGRACIÓN
trapz(x,y) : Realiza una integración numérica trapezoidal
x*atan(z)
Análisis Numérico
INTEGRACIÓN
trapz(x,y) : Realiza una integración numérica trapezoidal