Está en la página 1de 58

CAPÍTULO III –

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.

% Genera un numero aleatorio entero del 1


al 100
a = randi(100);
% Si es par, su residuo es 0
if rem(a, 2) == 0
fprintf('El numero es %d\n',a)
disp('a es par')
b = a/2;
end
7
Estructuras de Control de Flujo
 Casos especiales
Ausencia de sentencia(s)1

 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.

% Genera un numero aleatorio entero del 1


al 100
a = randi(100);
% Si es par, su residuo es 0
if rem(a, 2) == 0
else
fprintf('El numero es %d\n',a)
disp('a es impar')
b = a/2;
end
9
Estructuras de Control de Flujo
 Por consecutivas evaluaciones de condiciones:
If … elseif …. else

 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.

El valor for k=1:10


de a se a = k^2; for indice = inicial : incremento : final
actualiza end
Si la expresión es un vector fila, los elementos se usan
a(k) se for k=1:10 uno a la vez una vez cada que se les pasa por el bucle
almacena a(k) = k^2;
en una end
matriz fila
Estructuras de Control de Flujo
 Sentencia Especial: La sentencia break hace que se termine la ejecución del bucle
for y/o while más interno de los que comprende a dicha sentencia

Sentencia break

 Sintaxis:
 La sentencia del salto break se
ejecutará siempre que la evaluación
de condición resulte verdadera.

 Al ejecutarse break se finalizara la


ejecución del bucle for obviando la
ejecución de las sentencias
posteriores; es decir sentencia(s)3
Estructuras de Control de Flujo
 Sentencia Especial: Pasa el control a la siguiente iteración en los bucles for o while
en el cual aparezca, salteando al posible conjunto sentencias del cuerpo del bucle
que le sucedan.

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:

 Método para la Resolución de Ecuaciones No Lineales.

 Método para la Resolución de Ecuaciones Lineales.

 Método para la Interpolación y aproximación polinomial.

 Método para el Ajuste de Curvas.

 Métodos para la Derivación Numérica.


Solución de Ecuaciones No Lineales
 MÉTODO DE PUNTO FIJO (También llamado como Método de Aproximación Sucesiva)
 Aproxima la función 𝑥 = 𝑔 𝑥 iniciando con el valor inicial de partida 𝑝1 y la formula de
recurrencia 𝑝𝑛 = 𝑔(𝑝𝑛−1 )
Solución de Ecuaciones No Lineales
 MÉTODO DE PUNTO FIJO
Solución de Ecuaciones No Lineales
 MÉTODO DE PUNTO FIJO
Solución de Ecuaciones No Lineales
 MÉTODO DE PUNTO FIJO
Solución de Ecuaciones No Lineales
 Argumentos de Entrada/Salida

 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;

P(1) = 0; error = 0.1;


it = 1; max = 40;
fprintf('METODO DEL PUNTO FIJO\n');
fprintf('\tit\t\txi\t\terror\n');
for k = 2:max
P(k) = feval('myfun',P(k-1));
error = abs(P(k)-P(k-1));
if error<10^-3
disp('Converge');
break;
end
fprintf('\t%d\t%f\t%f\n',it,P(k),error);
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));
Solución de Ecuaciones No Lineales
 MÉTODO DE NEWTON RAPHSON
 Si el valor inicial para la raíz es 𝑥𝑖 entonces se puede trazar una tangente desde el punto
𝑥𝑖 , 𝑓(𝑥𝑖) de la curva.
Solución de Ecuaciones No Lineales
 MÉTODO DE NEWTON RAPHSON
 Utilize el método de Newton-Raphson para calcular la raíz de 𝑓 𝑥 = 𝑒 −𝑥 − 𝑥
empleando como valor inicial 𝑥0 = 0.

SOLUCIÓN

 La primera derivada de la función es: 𝑓′ 𝑥 = −𝑒 −𝑥 − 1. Sustituyendo en la ecuación


anterior:
𝑒 −𝑝𝑘 − 𝑝𝑘
𝑝𝑘+1 = 𝑝𝑘 +
−𝑒 −𝑝𝑘 − 1

 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];

 Donde x es incógnita y 𝑎0 , 𝑎1 , … 𝑎𝑛 son reales.


Análisis Numérico
 RAICES DEL POLINOMIO
 Las raíces de un polinomio son aquellos valores de x que anulan (hacen cero) al
evaluarlos en dicho polinomio. Mediante la función roots(p) se pueden encontrar
las raíces de un polinomio

 Complementariamente se puede calcular un polinomio a partir de sus raíces con


usando la función poly(p)
>> raices = roots(P) >> poly(P) MATLAB adopta el convenio de que los
polinomios son vectores fila y sus
raices = ans = raíces vectores columna

-1.6506 + 0.0000i 1 -10 35 -50 24


-0.1747 + 1.5469i
-0.1747 - 1.5469i
Análisis Numérico
 RAICES DEL POLINOMIO
 Si el argumento de entrada a poly es una matriz A; entonces dicha función
devuelve el polinomio característico de A, es decir det(λI-A) como vector fila.
>> A = [1 2 3;4 5 6;7 8 0]
Las raíces de este polinomios son
A=
los autovalores de la matriz A
1 2 3 >> r = roots(p)
4 5 6
7 8 0 r=

>> p = poly(A) 12.1229


-5.7345
p= -0.3884

1.0000 -6.0000 -72.0000 -27.0000


Análisis Numérico
 RAICES DEL POLINOMIO
 Un polinomio puede ser evaluado en un punto determinado usando la función
polyval(p,s) donde p es el polinomio (como vector fila) y s es el punto a evaluar

>> p1 = [1 3 2] >> polyval(p1,[4 6])


Del mismo modo s puede ser una
p1 = ans = matriz:

1 3 2 30 56 >> polyval(p1,A)

>> polyval(p1,4) ans =


La evaluación en vector
ans = o matriz se hace 6 12
elemento a elemento 20 30
30
Análisis Numérico
 EJERCICIO
 Generar puntos con la función linspace y definir un polinomio p = [1 4 -7 -10],
evaluar sus valores en el vector creado por linspace y graficar.

x = linspace(-1,3); %Se generan los puntos


p = [1 4 -7 -10]; %Definimos el polinomio p
y = polyval(p,x); %Evaluamos p(x) en los
valores de x, y esto en y
plot(x,y)
Análisis Numérico
 OPERACIONES CON POLINOMIOS
 Podemos realizar operaciones de multiplicación y división de polinomios
mediante las funciones conv y deconv.
Análisis Numérico
 OTRAS CARACTERÍSTICAS

polyderv(p); Calcula la derivada


de un polinomio p.

polyderv(a,b); Calcula la derivada del


producto de los
polinomios a y b.
Análisis Numérico
 OTRAS CARACTERÍSTICAS >> e = c+[0 0 0 d] >> g = polyder(f)

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'.

syms: Crea variables simbólicas


sym: Convierte a variable simbólica.
double: Convierte a variable numérica.
Análisis Numérico
CONSTRUCCIÓN DE OBJETOS SIMBÓLICOS

>> 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=double(a) % Obtiene el valor


numérico de la variable a y lo almacena en n >> B=sym(A) % B es la expresion simbolica de A

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

>> syms x,f=x^2+2*x+1 % Crea la expresión simbólica f

f=

x^2 + 2*x + 1
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]

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])

Recordar que también puede graficar


considerando a la función como una cadena de
caracteres y arrays de funciones como cadenas

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).

>> ff = @(x)x.^3-2*x-5 syms x


h1=2*x^2+x-1;
ezplot(h1,[-2,2])
>> [x,fval]=fminbnd(ff,0,2) [x,val]=fminbnd('2*x^2+x-1',-2,2)

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

>> [x,fval]=fminsearch(@fcn3d,[0,1]) fval =


8.0152e-10
x=
>> [x1,fval]=fminsearch(@(x)100*(x(2)-x(1).^2).^2+(1-
1.0000 1.0000
x(2)).^2,[0,1])
fval = x1 =
2.4289e-10 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=fzero(@(x)x.^2-3,-3) >> x = fzero(@cos,[1 2]) >> fzero('cos(x)-log(x)',pi)

x= x= ans =

-1.7321 1.5708 1.3030


>> x=fzero(@(x)x.^2-3,[1 3]) >> fzero('sin(x)-x^2',pi)
x= ans =
1.7321 0.8767
Análisis Numérico
SOLVE
syms x
Realiza la solución simbólica de expresiones algebraicas eqn = sin(x) == x^2 - 1;
S = solve(eqn,x)
solve(eq) Resuelve eq=0
solve(eq, var) fplot([lhs(eqn) rhs(eqn)], [-2 2])
solve(eq1, eq2, ..., eqn)
g = solve(eq1, eq2, ..., eqn, var1, var2, ..., varn)

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

clear all; clc;


X = 0:pi/100:pi;
Y = sin(X);
Z=trapz(X,Y)

Para una integración con N+1 puntos


espaciados uniformemente, la
aproximación es
Análisis Numérico
INTEGRACIÓN
Integración numérica con variables simbólicas
>> syms x;
>> int(-2*x/(1 + x^2)^2)
int(expr) INTEGRAL
int(expr, v) DEFINIDA
ans =
int(expr, a, b)
int(expr, v, a, b) 1/(x^2 + 1)
>> syms x z;
int(x/(1 + z^2), z) INTEGRAL
INDEFINIDA
ans =

x*atan(z)
Análisis Numérico
INTEGRACIÓN
trapz(x,y) : Realiza una integración numérica trapezoidal

clear all; clc;


X = 0:pi/100:pi;
Y = sin(X);
Z=trapz(X,Y)

Para una integración con N+1 puntos


espaciados uniformemente, la
aproximación es

También podría gustarte

  • Clase 01
    Clase 01
    Documento29 páginas
    Clase 01
    Paolo Sovero
    Aún no hay calificaciones
  • Clase 04
    Clase 04
    Documento115 páginas
    Clase 04
    Paolo Sovero
    Aún no hay calificaciones
  • Clase 02
    Clase 02
    Documento43 páginas
    Clase 02
    Paolo Sovero
    Aún no hay calificaciones
  • Clase 01
    Clase 01
    Documento61 páginas
    Clase 01
    Paolo Sovero
    Aún no hay calificaciones