You are on page 1of 118

UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

UNIVERSIDAD NACIONAL DE INGENIERÍA


FACULTAD DE INGENIERÍA MECÁNICA

1
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

1. INTRODUCCION AL MATLAB…………………………………………………………………………… 04
1.1. Objetivos…………………………………….…..………………………………………..……….….… 05
1.2. Ventanas del MatLab………………………………………………………………………………. 05
1.2.1. Ventana de Comandos…………….….…………………………………………..……..… 05
1.2.2. Ventana del Editor………..………….………………………………………..….…........... 05
1.2.3. Ventana de Gráficos……………………………………………………………………………. 06
1.3. Operadores aritméticos en MatLab………………………………………….……………….. 06
1.4. Números y Formatos…………………………..………….….…………………………………..… 06
1.5. Operadores Relacionales..………..………….…………………………………………..….…... 07
1.6. Formatos Numéricos………….………………………………………………………………………. 07
1.7. Funciones Matemáticas Elementales……………………………………………………..….… 07
1.8. Vectores y Matrices…………………………………………………………………………………… 08
1.8.1. Funciones Matriciales………………………………………………………..……………… 09
1.9. Operaciones de Matrices………………………………………………………………………… 09
1.10. Problemas Desarrollados…………….……………………………………………………….. 10
1.11. Problemas Propuestos………….………………………………………………………………… 12
2. ESTRUCTURAS DE CONTROL EN MATLAB 15
2.1. Objetivos…………………………………………………………………………………………………. 16
2.2. Programas y Funciones……………………………………………………………………………… 16
2.3. Instrucciones Básicas en MatLab…………………………………….……………………….. 17
2.3.1.Sentencia de Decisión (if)………………………………..………………………………… 17
2.3.2.Sentencia switch……………………………………………………………………………….. 17
2.3.3. Sentencias FOR y WHILE…………………………………………………………………… 17
2.4. Entrada y Salida en un archivo Script…………………………………………………………… 18
2.5. Problemas Desarrollados……………………………………………………………………………. 19
2.6. Problemas Propuestos..……………………………………………………………………………. 27
3. METODOS DIRECTOS DE SISTEMAS DE ECUACIONES LINEALES 28
3.1. Objetivos……………………….……………………………………………………………………………. 29
3.2. Fundamento Teórico……...……………………………………………………………………………. 29
3.3. Instrucciones Básicas en MatLab…………………………………….……………………….. 30
3.4. Problemas Desarrollados……..………………………………..………………………………… 32
3.5. Método de Eliminación Gaussiana…………………………………………………………….. 35
3.6. Método de Gauss Jordan……………………………………….……………………………………… 40
3.7. Problemas Propuestos……………………………..…………………………………………………… 42
4. METODOS ITERATIVOS PARA SEL…………………………………………………………………………. 43
4.1. Objetivos……………………….……………………………………………………………………………. 44
4.2. Fundamento Teórico……...……………………………………………………………………………. 44
4.2.1. Métodos Iterativos SEL…………………………………….……………….…………….. 44
4.2.2. Convergencia de los Métodos Iterativos…………..………………………………… 44
4.3. Problemas Desarrollados………………..………………………………………………………….. 44
4.4. Problemas Propuestos……………………………..…………………………………………………… 50
5. SOLUCION DE ECUACIONES NO LINEALES……………………………………………………………. 52
5.1. Objetivos……………………….……………………………………………………………………………. 52
5.2. Fundamento Teórico……...……………………………………………………………………………. 52
5.2.1. Métodos Iterativos de Intervalo……………………….……………….…………….. 52
5.2.2. Método de Iteración Funcional………….…………..………………………………… 56
5.3. MATLAB Simbólico……………..…………..………………………………………………………….. 56
5.4. Funciones para resolver ecuaciones no lineales…………………………………………… 69

2
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
5.5. Problemas Propuestos……………………………..…………………………………………………… 70
6. APROXIMACION DE FUNCIONES…………………………………………………………………………. 72
6.1. Objetivos……………………….……………………………………………………………………………. 73
6.2. Fundamento Teórico……...……………………………………………………………………………. 73
6.2.1. Diferencias Divididas………………………..……………….……………….…………….. 73
6.3. Polinomios en MatLab…………………………………..…………..………………………………… 77
6.4. Problemas Propuestos……..…………..………………………………………………………….. 81
7. DIFERENCIACION E INTEGRACION NUMERICA…………………………………………………. 84
7.1. Objetivos……………………….……………………………………………………………………………. 84
7.2. Fundamento Teórico……...……………………………………………………………………………. 84
7.3. Problemas Desarrollados…………………………..…………..………………………………… 88
7.4. Problemas Propuestos……..…………..………………………………………………………….. 96
8. SOLUCION DE ECUACIONES DIFERENCIALES………………………………………………………. 97
8.1. Definición…………………….……………………………………………………………………………. 98
8.2. ODE de Primer Orden...……………………………………………………………………………. 98
8.3. El problema del valor Inicial para las ODE de Primer Orden……….…………….. 98
8.4. Método del paso Simple……………………………..…………..………………………………… 99
8.5. Método de la Serie de Taylor………..………………………………………………………….. 99
8.6. Método de Euler…………..…………………………..…………..………………………………… 101
8.7. Euler Aplicado a un Péndulo simple.………………………………………………………….. 103
8.8. Método de Heun (Predictor Corrector)…………………………………………………….. 106
8.9. Método de Runge Kutta..…………………………..…………..………………………………… 109
8.9.1. Método de Runge Kutta de Orden 2……………………………………………….. 109
8.9.2. Método de Runge Kutta de Orden 4……………………………………………….. 111
8.10. Problemas Propuestos..…………………………..…………..………………………………… 121

3
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 1
Introducción al MATLAB

4
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

1. INTRODUCCION AL MATLAB
1.1. Objetivos: Manejar los comandos básicos del MATLAB para operaciones con Escalares, vectores y
matrices.
1.2. Ventanas del MatLab
1.2.1. Ventana de comandos.- Se escriben los comandos y se ejecutan los diferentes programas, esta
se muestra a continuación

Al lado izquierdo vemos los programas recientes, en el centro la ventana de comandos y al lado derecho
parte superior variables actuales y en la parte inferior historial de comandos.

1.2.2. Ventana del editor.- Nos permite escribir programas y funciones.

5
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

1.2.3. Ventana de Gráficos:

Como vemos nos permite graficar un solo grafico o puede dividir la pantalla en forma matricial.
1.3. Operadores aritméticos en MatLab
Los operadores básicos son: +, -, *, /, ^
Ejemplo:
>> 3+5/6-4^2*5
6
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
ans = -76.1667
MATLAB trabaja de acuerdo a las prioridades:
a) Expresiones entre paréntesis
b) Potencias
c)* y / trabajan de izq. A derecha. (3*4/5= 12/5)
d) + y – de izq. A der. (3+4-5= 7-5)
1.4. Números y Formatos
MATLAB reorganiza diferentes clases de números

La notación “e” es usada para números muy grandes o muy pequeños:


-1.3412e+03 = - 1.3412×103 = -1341.2
-1.3412e-01 = - 1.3412×10-1 = -0.13412
1.5. Operadores relacionales:
 < Menor (para complejos sólo afecta a partes reales)
 <= Menor o igual (sólo afecta a partes reales)
 > Mayor (sólo afecta a partes reales)
 >= Mayor o igual (sólo afecta a partes reales)
 x = = y Igualdad (afecta a los números complejos)

 x ῀= y Desigualdad (afecta a los números complejos)

1.6. Formatos numéricos

1.7. Funciones matemáticas elementales

7
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

El argumento de las funciones puede ser un número, una variable o una expresión. Cuando en una
expresión aparece alguna función, su valor se calcula antes que cualquier otra cosa.

Ejemplo 1
>> sqrt (7)
>> sqrt (7/5)
>> a=2.1; sqrt (2*a)
>> exp(3)
>> 7*exp(5/4)+3.54
>> x = 5*cos(pi/6) , y=5*sin(pi/6)
>> acos(x/5), asin(y/5)
Ejercicio: Evaluar las siguientes expresiones matemáticas en MATLAB.
a) log9.8(2)
b) √5 +e2
c) | Arcsen(-0.5) |
d) tan(e)

8
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
1.8. Vectores y Matrices
Selección de los elementos de un vector x o matriz A

Funciones Matriciales

1.9. Operaciones de matrices


 x(n) Devuelve el n-ésimo elemento del vector x
 x ([n, m, p]) Devuelve los elementos del vector x situados en las posiciones n-ésima, m-ésima y p-
ésima.

9
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
 x(n: m) Devuelve los elementos del vector x situados entre el n-ésimo y el m-ésimo, ambos inclusive
 x(n: p:m) Devuelve los elementos del vector x situados entre el n-ésimo y el m-ésimo, ambos
inclusive pero separados de p en p unidades
 A(m, n) Devuelve el elemento (m, n) de la matriz A (fila m y columna n)
 A ([m, n], [p, q]) Devuelve la submatriz de A formada por la intersección de las filas n-ésima y m-
ésima y las columnas p-ésima y q-ésima.
 A(n:m,p:q) Devuelve la submatriz de A formada por las filas que hay entre la n-ésima y la m-ésima, y
por las columnas que hay entre la p-ésima y la q-ésima
 A(a:p:b,c:q:d) Devuelve la submatriz de A formada por las filas que hay entre la a-ésima y la b-ésima
tomándolas de p en p, y por las columnas que hay entre la c-ésima y la d-ésima tomándolas de q en
q.
 A(:,p:q) Devuelve la submatriz de A formada por las columnas que hay entre la p-ésima y q-ésima.
 A(n:m,:) Devuelve la submatriz de A formada por las filas que hay entre la n-ésima y la m-ésima
 A(n,:) Devuelve la fila n-ésima de la matriz A
 A(:,p) Devuelve la columna p-ésima de la matriz A
 A (:) Devuelve un vector columna cuyos elementos son las columnas de A situadas por orden
 A (:,:) Devuelve toda la matriz A
 [A,B,C] Devuelve la matriz formada por las submatrices A, B, C.

Representación gráfica de funciones


La forma más sencilla de dibujar con MATLAB una función y=f(x) es:
>> ezplot ('expresión de la función')
Esta orden dibuja la gráfica de la función dada por la expresión, para x variando en un intervalo.
>> ezplot('sin(x^2)*x/2',[-2*pi 2*pi])

10
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

sin⁡(𝑥 2 )
𝑓(𝑥) = 𝑥⁄ y x varia entre -2π y 2π
2
1.10.- PROBLEMAS DESARROLLADOS
Si se desea dibujar la función en un intervalo distinto, [a,b], hay que indicarlo expresamente en la
orden:
>> ezplot ('expresión de la función',[a, b])
También se pueden dibujar varias gráficas separadas en la misma ventana, usando la orden
>> subplot (m, n, p)
Este comando permite dividir la ventana gráfica en una matriz m x n de sub-ventanas gráficas,
activando para dibujar la p-ésima de ellas.
plot (y) : produce un gráfico lineal de los elementos del vector y versus los índices de y.
>>y = [ 0 0.6 0.9 0.1 0.8 0.3 0.4];
>>plot (y)
plot (x, y) : Dados dos vectores de la misma dimensión, x e y, produce un gráfico lineal de los
elementos del vector x versus los elementos del vector y
>>t = 0: 0.1: 4*pi;
>>y = sin (t);
>>plot (t, y, 'r')
Ejemplo 2:
>>x=linspace(-3,3,500);y=exp(-x.^2);z=2*exp(-x.^2);
>>plot(x,y,'-',x,z,'--') % dibujamos dos funciones
>>title('Campanas de Gauss')
>>xlabel('Eje de Abscisas') % Etiqueta el eje horizontal
>>ylabel('Eje de Ordenadas') % Etiqueta el eje vertical
>>legend('exp(-x^2)', '2*exp(-x^2)') % Leyenda
Produce:

11
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

1.11. PROBLEMAS PROPUESTOS


1) Crear los siguientes vectores:

𝑥 = [0⁡√3⁡𝜋⁡𝑒 2 ]
𝑦 = [0⁡0.1𝜋⁡0.2𝜋⁡0.3𝜋⁡0.4𝜋⁡0.5𝜋⁡0.6𝜋⁡0.7𝜋⁡0.8𝜋⁡0.9𝜋⁡𝜋]
2) Crear un vector z de cuatro números complejos
3) Listar el 3er elemento del vector z
4) Listar los 5 primeros elementos del vector y
5) Listar los 5 últimos elementos del vector y
6) Listar los elementos de posiciones impares del vector y
7) Listar los elementos de posiciones 2, 4, 5, y 7 del vector y
8) Crear los vectores a = [1 2 3 4 5] y b = [1 3 5 7 9]
9) Fusionar los vectores a y b en un vector c
10) Obtener la transpuesta del vector c
11) Crear las siguientes matrices:
1 2 3 4
𝑔=[ ]
5 6 7 8
1 1 1 1
ℎ=[ ]
2 2 2 2
12) Multiplicar las matrices g y h
13) Multiplicar g con la transpuesta de h
14) Multiplique g y h componente a componente
15) Eleve al cuadrado a cada elemento de g
16) Resolver el sistema:

12
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
2𝑎 + 3𝑏 + 𝑐 = 6
4𝑎 + 𝑏 + 2𝑐 = 7
6𝑎 + 𝑏 + 7𝑐 = 4

Mediante la función inv.


17) Resuelva el sistema anterior mediante \.
18) Utilizando MATLAB determine el valor de la expresión

19) Crear la siguiente matriz

1 0 0 0 1 2 3 4
0 2 0 0 5 6 7 8
0 0 3 0 9 10 11 12
𝑇= 0 0 0 4 20 0 5 4
1 5 9 20 0 0 0 0
2 6 10 0 0 0 0 0
3 7 11 5 0 0 0 0
[4 8 12 4 0 0 0 0 ]

Luego extraer la siguiente submatriz

3 0 9 10
𝑇1 = [ 0 4 20 0]
9 20 0 0
10 0 0 0

20) Escriba las matrices A y B definidas por

21) Obtener la siguiente Matriz:


1 −2 0 0 0
−2 1 −2 0 0
𝑅 = 0 −2 1 −2 0
0 0 −2 1 −2
[ 0 0 0 −2 1 ]

Sugerencia: Use la función diag.


22) Si b = [1, 2, 3, 4, 5]’, resuelva el sistema Rx=b
23) Crear la siguiente matriz, dado el orden de la matriz “n”.

13
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

14
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 2
Estructuras de Control en MATLAB

2. ESTRUCTURAS DE CONTROL EN MATLAB


2.1 Objetivos.- Aplicar las instrucciones de control en MATLAB, para la implementación de programas.
2.2 Programas y Funciones
Archivos *.m
Estos son de dos clases: Script y Function

15
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Estos archivos se editan en la ventana de edición: File/New/M_file


Cabecera de una función:

Variables entrada: input_args

Variables Salida: outputs_args

[Variables de salida]: si es más de un variable se separan por comas. Si es solo una se puede omitir los
[]
(Variables de entrada): si es más de una separadas por comas.
Las funciones (functions) se deben grabar como archivo m (M-file) y el nombre del archivo debe ser
igual al nombre de la función.

2.3 Instrucciones básicas en MATLAB


2.3.1 Sentencia de Decisión (if)

La sentencia if Condicional if Condicional doble if Condicional


simple múltiple
if <condición> if <condición> if <condicion1>
sentencias; sentencias1 sentencias1

16
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
end else elseif <condicion2>
sentencias2 sentencias2
end elseif <condicion3>
sentencias3
else
sentenciasN
end
2.3.2.- La sentencia SWITCH

switch selector
case valor1
sentencias1
case valor2
sentencias2
............
otherwise
sentenciasN
end

Operadores lógicos y relacionales


Operadores relacionales: <, >, <=, >=, == (igual), ~= (distinto).
Operadores lógicos: & (y), | (o), ~ (negación).

2.3.3.- Sentencias FOR y WHILE


Sentencia FOR(Para- Sentencias WHILE(Mientras)
Desde)
for contador=vector while condición
Sentencias Sentencias
end end

La sentencias BREAK
La sentencia break hace que se termine la ejecución del bucle más interno de los que comprenden a
dicha sentencia.
2.4.- Entrada y Salida en un archivo script
Salida:
disp(X) displaya el arreglo sin incluir el nombre.
Ejemplo:
>> X=[1 2 3; 4 5 6; 7 8 9];

17
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
>> disp(X)
1 2 3
4 5 6
7 8 9
Si es una cadena el texto es mostrado:
Ejemplo:
>> nombre='Jose Garcia';
>> disp (nombre)
Jose Garcia
>> disp('Jose Garcia')
Jose Garcia

Ejemplo: error ('no se puede ejecutar') termina el archivo .m.

Salida con:
fprintf.............................................. Escribe texto con formato
Ejemplo: var1=555; fprintf ('el resultado es %3i', var1)
var2=3.7; fprintf ('el resultado es %3.1f\n', var2)
var3=‟hola‟; fprintf ('el resultado es %s\n', var3)
var4=‟X‟; fprintf ('el resultado es %c\n', var4)
fprintf (' „%s valor de la variable %c es el %3i y %3.1f\n',‟,var3,var4,var1,var2)

2.5.- PROBLEMAS DESARROLLADOS


Ejemplo 1
Creación de un Archivo Script
a) Crear una carpeta de trabajo laboratorios y almacenarla en su USB.

18
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
b) Establecer la ruta donde el MATLAB buscara su programa, para ello digite en la ventana de comandos
la instrucción cd seguida de la ruta de su carpeta de trabajo:
>> cd c:\laboratorios y presione la tecla Enter
c) Crear un nuevo archivo-m:
Haga clic en el menú File, seleccione la opción New y haga clic en Script Aparecerá una ventana en
blanco donde deberá digitar su programa:
d) Digite:
n=input('Ingrese numero de periodos=');
x=0:pi/100:2*pi*n;
y=exp(-x/10).*sin(2*x);
plot(x,y)
title('Amortiguamiento')
xlabel('Tiempo(seg)')
ylabel('Posicion (m)')
grid

e) Grabar el programa:
Hacer clic en el menú File, clic en la opción Save, luego digite el nombre del programa: prog11 y haga
clic en el botón guardar.
f) Ejecución del programa:
En la ventana de comandos escriba el nombre del programa: prog11 y presione la tecla Enter.
El programa solicitara el ingreso de un dato:
Ingrese número de períodos = Digite 6 y presione Enter.

Ejemplo 2.-
Creación de una función.
Por ejemplo, escriba una función que calcule para un número entero “n”, la suma de cifras del Número n
y el número de cifras del Número n:
19
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
a) Digitar el siguiente código:

% cifras.m
% Funcion que calcula para un numero entero n :
% sumcif : Suma de cifras del Numero n
% numcif : Numero de cifras del Numero n
function [sumcif,numcif]=cifras(n)
sumcif=0;
numcif=0;
while n~=0
digito=rem(n,10);
sumcif=sumcif + digito;
numcif=numcif + 1;
n=fix(n/10);
end
end

b) Grabarlo con el nombre “cifras.m”:


c) Llamado de la función:
>> [s n]=cifras(1234)
s= 10
n= 4
Ejemplo 3.-
a) Crear una función expo1 que permita obtener la suma de términos de la serie de Taylor para aproximar
el exponencial de un número real x dado n entero:

𝑥
𝑥 𝑥2 𝑥3
𝑒 = 1 + + + + ⋯,⁡⁡⁡⁡⁡⁡− ∞ < 𝑥 < ∞
1! 2! 3!

b) expo1.m
function s=expo1(x,n)
s=1;
for i=1:n
s=s+x^i/factorial(i);
end
end
Para ejecutarla escriba:
>> expx=expo1(0.5,6)

20
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
expx = 1.6487
Una variante de esta función puede ser retornando además el error comparado con la función exp
propia del MATLAB.

function [s,err]=expo2(x,n)
% expo2.m
s=1;
for i=1:n
s=s+x^i/factorial(i);
end
err=abs(exp(x)- s);
end
Ejecución
>> [s err]=expo2(0.5,6)
s= 1.6487
err =
1.6526e-006
Funciones Inline
Se puede construir funciones en línea utilizando:
También se pueden declarar funciones en línea:
f=inline (‘expresion_variables_x1_x2_...’, ‘x1’, ‘x2’,..)
f : es una variable de memoria
Ejemplo: g = inline('sin(2*pi*f + theta)', 'f', 'theta')
Ejemplo 4.-
>> f=inline ('x^2+y^2','x','y')
f = Inline function:
f(x,y) = x^2+y^2
>> f(3,4)
ans = 25
Funciones Recursivas
Son funciones que se llaman a sí mismas:
Ejemplo 5.-

%fact.m
function f=fact(n)
if n==0
f=1;
elseif n==1
f=1;
21 else
f=n*fact(n-1);
end
end
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

>> fact(5)
ans = 120
Ejemplo 6.- Sentencia if
%prog41.m
t = rand(1)
if t > 0.75
s=0
elseif t < 0.25
s=1
else
s = 1-2*(t-0.25)
end

>> prog41
t = 0.1270
s= 1
Ejemplo 7.-Sentencia SWITCH:
%ejemplo switch
opc = input('Ingrese opcion==>');
switch opc
case 3
disp('Mecanica')
case 4
disp('Mecanica-Electrica')
case 5
disp('Naval')
case 6
disp('Mecatronica')
otherwise
disp('Fuera de Rango...')
end

Ejecución
>> prog51
Ingrese opcion==>5
Naval

22
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Ejemplo 8.-Sentencia FOR:
%prog61
for k=1:100 % contador
x=sqrt(k); % obtiene la raíz de k
if x>5, % si raíz es mayor a 5
fprintf('x= %5.2f , k= %3d \n',x,k) % muestra en pantalla x y k
break % sale del lazo
end % fin del if
end % fin del for

Ejecución
>> prog61
x= 5.10 , k= 26

Ejemplo 9

%prog71
m = 10;
k = 1;
while k<=m
x = k/10;
disp([x, x^2, x^3]); % imprimirá una tabla de valores
k = k+1;
end

Ejecución
>> prog71
0.1000 0.0100 0.0010
0.2000 0.0400 0.0080
0.3000 0.0900 0.0270
0.4000 0.1600 0.0640
0.5000 0.2500 0.1250
0.6000 0.3600 0.2160
0.7000 0.4900 0.3430
0.8000 0.6400 0.5120

23
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
0.9000 0.8100 0.7290
1 1 1
Ejemplo 10.- Ejemplo Grafico
Sabiendo que las coordenadas cartesianas de una circunferencia son de la forma x=r*cos (θ) ,
y=r*sen(θ) crear una función que se llame circunferencia1.m que dibuje una circunferencia y que
tenga como parámetros de entrada el radio y el ángulo. La función tiene que tener como parámetros
de salida todos los pares de valores x, y. Para realizar el programa, hay que tener en cuenta que el
radio permanece constante y lo que va cambiando es el ángulo θ.
Solución:
function [x,y]=circunferencia1(radio, paso)
r=radio;
fi=0;
i=0;
if paso>60, error('Angulo muy grande'), end
for fi=0:paso:360
fi2=fi*2*pi/360;
i=i+1;
x(i)=r*cos(fi2);
y(i)=r*sin(fi2);
end
plot(x,y,'o')
end

Ejecución
>> circunferencia1(5,10)
ans =

Columns 1 through 6

5.0000 4.9240 4.6985 4.3301 3.8302 3.2139

Columns 7 through 12

2.5000 1.7101 0.8682 0.0000 -0.8682 -1.7101

24
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Columns 13 through 18

-2.5000 -3.2139 -3.8302 -4.3301 -4.6985 -4.9240

Columns 19 through 24

-5.0000 -4.9240 -4.6985 -4.3301 -3.8302 -3.2139

Columns 25 through 30

-2.5000 -1.7101 -0.8682 -0.0000 0.8682 1.7101

Columns 31 through 36

2.5000 3.2139 3.8302 4.3301 4.6985 4.9240

Column 37

5.0000

2.6.- PROBLEMAS PROPUESTOS


1.- Escriba un programa que lea 3 matrices de “n” filas por n columnas y me diga si las 3 son iguales si
son iguales 2 o si las 3 son diferentes.
2.- Escriba un programa que lea una edad y me indique si la persona es :

25
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
a) Un bebe…entre 1 y 4 años
b) Un niño… entre 5 y 11 años
c) Un adolescente… entre 12 y 16 años
d) Un joven entre 17 y 25 años
e) Un adulto entre 26 y 65 años
f) Un adulto mayor más de 65 años.
3.- Escriba un programa que lea una señal aleatoria que varía entre -1 y 1 , me deberá indicar cuantas
veces la señal cruza por cero, que puede ser de positivo a negativo o al revés.
4.- Escriba un programa que lea un vector y me indique cuantas veces se repite cada valor. Además
debe indicar que valor se repite más veces (MODA):
5.- Escriba un programa que grafique el seno amortiguado con la siguiente formula:
x=0:pi/100:2*pi*n;
y=exp(-x/r).*sin(2*x);
Donde r debe variar: 5, 10,15, 20 y n será número de periodos, use el comando subplot
que particiona la pantalla.
6.- Ingresar las siguientes matrices al MATLAB.

7.- Guardar las matrices con el nombre matrices_01.mat


8.- Calcular
8.1.- Calcular las transpuestas mi.’
8.2.- Calcular el determinante det(mi).
8.3.- Calcular la inversa inv(mi)
9.- Guardar los resultados como matrices_02.mat
10.- Calcular m1.*m2 + m4./m5 mostrar resultados.

26
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

3. MÉTODOS DIRECTOS DE SISTEMAS DE ECUACIONES LINEALES

3.1. Objetivo:
Aplicar los métodos directos de factorización y eliminación en la solución de sistemas lineales.
3.2. Fundamento Teórico
27
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Sea el sistema de Ecuaciones Lineales:
𝑎11 𝑥1 + 𝑎12 𝑥2⁡⁡ + 𝑎13 𝑥3 … … … + 𝑎1𝑛⁡ 𝑥𝑛 = ⁡ 𝑏1
𝑎21 𝑥1 + 𝑎22 𝑥2⁡⁡ + 𝑎23 𝑥3 … … … + 𝑎2𝑛⁡ 𝑥𝑛 = ⁡ 𝑏2
……………………………………………………
……………………………………………………
𝑎𝑛1 𝑥1 + 𝑎𝑛2 𝑥2⁡⁡ + 𝑎𝑛3 𝑥3 … … … + 𝑎𝑛𝑛⁡ 𝑥𝑛 = ⁡ 𝑏𝑛
O en forma matricial:
𝑎11 𝑎12 … … 𝑎1𝑛 𝑥1 𝑏1
𝑎21 𝑎22 … … 𝑎2𝑛 𝑥2 𝑏2
[… … … … . . … . . ] [… .] = [ … ]
𝑎𝑛1 𝑎𝑛2 𝑎𝑛𝑛 𝑥𝑛 𝑏𝑛
Puede resolver sistemas lineales Ax = b usando la inversa de la matriz A:
>> x=inv(A)*b
Pero es numéricamente ineficiente comparada con otros procedimientos para calcular la inversa
conocidos como factorizaciones que dan origen a los métodos directos.
Métodos Directos
En MATLAB se utiliza el comando \ para denotar la inversa por la izquierda, por lo cual para resolver un
sistema de ecuaciones lineales (SEL) se ejecutaría el siguiente Comando:
>> x=A\b
Métodos Directos: Factorizaciones
A=L*U tenemos 𝒂𝒊𝒋=∑𝒏𝒌=𝟏 𝒍𝒊𝒌 𝒖𝒌𝒋

Clases de Factorizaciones:

 Doolitle lii=1 Todo i (Eliminación Gaussiana)


 Crout uii=1 Todo i preferencia matrices tridiagonales
 Cholesky A=LLT A simétrica y definida positiva

Aplicando en el sistema lineal:


A.x = b A = LU
L.U.x = b
Hacemos Ux = z

28
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Tenemos dos sistemas triangulares
Lz = U (1)
Ux = b (2)
(1) Se resuelve por sustitución directa
(2) (2) se resuelve por sustitución inversa
Método Directo - Eliminación Gaussiana con o sin Pivoteo, consiste en trasformar el sistema aumentado en
una matriz triangular superior y luego resolver el sistema triangular aplicando sustitución inversa.

3.3. Instrucciones básicas en MATLAB


Muchas matrices especiales son funciones predefinidas; entre ellas están:

29
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Resolución de sistemas

Operaciones Lógicas con Matrices

Factorizaciones

30
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

3.4. PROBLEMAS DESARROLLADOS


Factorización LU con pivoteo en MATLAB

31
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Ejemplo de la factorización de Doolitle


𝟐𝟓 𝟎𝟓 𝟎𝟒 𝟏 𝟎 𝟎 𝒖𝟏𝟏 𝒖𝟏𝟐 𝒖𝟏𝟑
[𝟏𝟎 𝟎𝟖 𝟏𝟔] = [ 𝟐𝟏 𝟏 𝟎] [ 𝟎 𝒖𝟐𝟐
𝒍 𝒖𝟐𝟑 ]
𝟎𝟖 𝟏𝟐 𝟐𝟐 𝒍𝟑𝟏 𝒍𝟑𝟐 𝟏 𝟎 𝟎 𝒖𝟑𝟑

Cuál de las opciones nos daría la correcta matriz L de la factorización de Doolitle?


25 5 4
A) [ 0 6 14.400 ]
0 0 −4.240
1 0 0
B) [0.400 1 0]
0.320 1.500 1
1 0 0
C) [0.400 1 0]
0.320 1.733 1
1 0 0
D) [10 1 0]
8 12 1
La respuesta es la C)

Ejemplo de la Factorización de Crout


Para la misma matriz anterior cual es la matriz U de la factorización de Crout
25 5 4
A) [ 0 6 14.400]
0 0 −4.24
1 0.200 0
B) [0 1 2.6667]
0 0 1
1 0.400 0.320
C) [0 1 1.733]
0 0 1
32
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
1 10 8
D) [0 1 12]
0 0 1
La respuesta es la B)
Algoritmo de Cholesky (Matrices A definidas positivas y Simétricas)
For k=1, 2…n do
For i =1, 2… do
1
𝑎𝑘𝑖 = ⁡ ℎ𝑘𝑖 = (𝑎𝑘𝑖⁡⁡ − ⁡ ∑𝑖−1
𝑗=1 ℎ𝑖𝑗 ℎ𝑘𝑗 )⁡
ℎ𝑖𝑖

𝑎𝑘𝑘 = ⁡ ℎ𝑘𝑘 = ⁡ √𝑎𝑘𝑘 − ⁡ ∑𝑘−1 2


𝑗=1 ℎ𝑘𝑗

Nota: en este algoritmo hki y hkk se refiere a lki y lkk respectivamente.

Ejemplo: de la Factorización de cholesky


𝟏 𝟐 𝟑 𝒍𝟏𝟏 𝟎 𝟎 𝒍𝟏𝟏 𝒍𝟏𝟐 𝒍𝟏𝟑
[𝟐 𝟖 𝟏𝟒] = [𝒍𝟐𝟏 𝒍𝟐𝟐 𝟎 ] [ 𝟎 𝒍𝟐𝟐 𝒍𝟐𝟑 ]
𝟑 𝟏𝟒 𝟒𝟏 𝒍𝟑𝟏 𝒍𝟑𝟐 𝒍𝟑𝟑 𝟎 𝟎 𝒍𝟑𝟑
Cuál de las opciones nos daría la correcta matriz L de la factorización de Cholesky?
1 0 0
A) [3 1 0]
2 1.7333 1
3 1 1
B) [0 1 8 ]
0 0 √41

1 0 0
C) [2 8 0 ]
3 4 √41

1 0 0
D) [2 2 0]
3 4 4
Respuesta (D)

Ejemplo de Eliminación Gaussiana:


Sea el sistema lineal

O en forma matricial:
Paso1: El elemento pívot es a11

33
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Paso2: Eliminando el elemento a21 = 5 y modificando los elementos restantes de la fila 2. Multiplicamos los
elementos de la fila 1 por a21/a11 = 5 y restamos la fila 2. Esto nos da:

Paso 3: Eliminamos los elementos restantes debajo del pívot y modificamos los elementos restantes. En este
caso a31 es cero. En este punto, tenemos:

Paso 4: Continue para dar forma de matriz triangular seleccionando los elementos pivotes, eliminando los
elementos debajo del pivote y modificacndo los elementos remanentes. Esto da:

Donde la ultima matriz es una matriz triangular superior ( aumentada).


La solución de esta matriz triangular superior es usando sustitución inversa.
Paso 5. La sustitución hacia atrás o inversa:
X3 =35/5 = 7
X2 = (-88)+ (77)/ (-11) = 1
X1 = (27-2-21) = 4
4
El vector solución es: 𝑥 = [1]
7

3.5. METODO DE ELIMINACION GAUSSIANA Es un método para resolver un sistema de ecuaciones, Ax =


b; la matriz A,es transformada a una matriz triangular superior por efecto de las operaciones elementales.
Sea el sistema triangular superior:

34
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

function x=backsubs(A,b)
% backsubs
% Datos
% A = es la matriz
% b = vector de la mano derecha
% n = el orden de la matriz
% Resultados
% x = vector solucion
n = length(b);
x = zeros(n,1);
x(n) = b(n)/ A(n,n);
for k= n-1:-1:1
x(k) = b(k);
for j = k+1:n
x(k)=x(k)-A(k,j)*x(j);
end
x(k) = x(k)/A(k,k);
end
end
Utilicemos este método para resolver el sistema de ecuaciones:

Hallar su solución con el programa anterior.

35
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
DESCOMPOSICION TRIANGULAR: El sistema de ecuaciones Ax = b es almacenado en un arreglo
de n x (n+1), los coeficientes del vector b se almacenan en la columna (n+1), conocida como la matriz
aumentada y se representa [A,b] :

Para realizar este procedimiento presentamos el programa que realiza el método de eliminación y
también de cálculo del vector x:
Como el método realiza una serie de intercambios también presentamos la función intercambio:

function A=intercambio(A,i)
[n n1]= size(A);
k=i+1;
while(k<=n)&(A(k,i)==0)
k=k+1;
end
if k<=n
temp=A(i, : );
A(i, : )= A(k, : );
A(k, : )= temp;
end
end

Finalmente la función que realiza el método de eliminación de Gauss lo utilizaremos para resolver
el siguiente sistema de ecuaciones:

2𝑥1 + 𝑥2⁡ + ⁡ 𝑥3⁡⁡⁡ = 2


4𝑥1⁡ + 2𝑥2 + ⁡ 𝑥3 = 3
𝑥1 + ⁡⁡ 𝑥2 ⁡ + ⁡⁡ 𝑥3 ⁡ = 2

La matriz ampliada será:


2 1 1 2
[4 2 1 3]
1 1 1 2

36
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

function x=eliminacion(AA,b)
% AA = es la matriz
% A = es la matriz aumentada
% b = es el vector derecho
% x = vector solucion
[n n1 ] = size(AA);
x = zeros(n,1);
A = [AA b'];
n1 = n+1;
for i=1:n
if A(i,i) ==0
A= intercambio(A,i);
end
for k= i+1:n
pivote = A(k,i)/A(i,i);
for j= i:n1
A(k,j)= A(k,j)-pivote*A(i,j);
end
end
end
x= backsubs(A, A(:,n1));
end

a) Crear la Subrutina llamada Cholesky que permita resolver el sistema lineal Ax=b, comprobando
primero si A es una matriz simétrica, en caso contrario enviar mensaje de fracaso
b) Obtener la factorización de Cholesky de la matriz
4 2 2 4
𝐴 = [2 5 7 0 ]
2 7 19 11
4 0 11 25
i. Manualmente
ii. Utilizando la función chol de MATLAB
c) Crear la Subrutina llamada Doolitle que permita resolver el sistema lineal Ax=b, usando
la factorización LU
1 −3 2 𝑚𝑚21 =−2 1 −3 2 𝑚32 =3 1 −3 2
31 =4
𝐴 = [−2 8 −1] → [0 2 3 ]→ [0 2 3]
4 −6 5 0 6 −3 0 0 12

1 −3 2 1 0 0 1 0 0
𝑈 = [0 2 3 ] ⁡⁡⁡⁡𝐿 = [𝑚21 1 0] = [−2 1 0]
0 0 −12 𝑚31 𝑚32 1 4 3 1
Notemos que:
1 0 0 1 −3 2 1 −3 2
𝐿 ∗ 𝑈 = [−2 1 0] [0 2 3 ] = [−2 8 −1] = 𝐴
4 3 1 0 0 −12 4 −6 5

37
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
d) Resolver el sistema de ecuaciones lineales, siguiente: A*x = b
5 −3 2 𝑥1 10
[−3 8 4 ] [𝑥2 ] = [20]
2 4 −9 𝑥3 09
i) Usando la función inv del MATLAB
ii) Compare sus resultados usando A-1 , compare el resultado de usar la función inv. ¿Qué es lo
que Ud. concluye?
iii) ¿Qué valor tiene el producto: A * A-1 ?
iv) ¿Cuál es el resultado esperado a partir de A*A-1 = A-1*A?

3.6. MÉTODO DE GAUSS-JORDAN Para invertir una matriz, el método de Gauss-Jordan es el más
eficiente; esto quiere decir, que para el sistema Ax = b; usando la matriz aumentada el método de
Gauss-Jordan reduce el número de operaciones, obtiene prácticamente la respuesta directamente.

%%%%%%%%Inicio%%%%%%%
function x=GaussJordan(AA,b)
%Datos
%AA = es la matriz
% A = es la matriz aumentada
% b = es el vector excitación
% n = orden de la matriz
% Resultados
% x = vector solucion
[ n n]= size(AA);
x = zeros(n,1);
A = [AA b'];
n1=n+1
38
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
for i=1:n
if A(i,i)==0
A=intercambio(A,i);
end
piv=A(i,i)
for j= i:n1
A(i,j)= A(i,j)/piv;
end
for k=1:n
if (k>i)||(k<i)
pivote=A(k,i);
for j=i:n1
A(k,j) = A(k,j)-pivote*A(i,j);
end
end
end
end
for i=1:n
x(i)=A(i,n1);
end
end
%%%%%%%%%% Fin %%%%%%%%

Ejecución:
>> AA=[2 1 1;4 2 1;1 1 1]
>> b=[2 3 2]
>>GaussJordan(AA,b)
n1 = 4
ans = 0
1
1

39
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
3.7. PROBLEMAS PROPUESTOS

1.- Desarrolle una función para averiguar si una matriz es simétrica, en este caso enviar un

Mensaje de éxito y caso contrario enviar un mensaje de fracaso.

2.- Un sistema eléctrico arroja las siguientes ecuaciones:

220=10i2 -5i2+0i3

0=-5i1 +15i2 -5i3

0=0I1 -5I2 +12I3

a) Resuelva método simple \.


b) Resuelva por método de matriz inversa.

3.- Crear una subrutina que nos lleve a una matriz triangular inferior.

4.- Crear una función que resuelva el sistema anterior y pruébelo para dos casos diferentes.

5.- Crear la subrutina Crout que permita resolver el sistema lineal Ax = b, debe comprobar

primero si A es una matriz simétrica, caso contrario enviar un mensaje de fracaso.

6.- Resolver el sistema de ecuaciones lineales Ax = b, siguiente:

5 −3 2 𝑥1 10
[−3 8 𝑥
4 ] [ 2 ] = [20]
2 4 −9 𝑥3 09

a) Con Gauss Jordan


b) Con inv de MATLAB.

40
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 4
Métodos Iterativos para Resolver Sistemas de Ecuaciones Lineales

41
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
4. MÉTODOS ITERATIVOS PARA RESOLVER SISTEMAS DE ECUACIONES LINEALES
4.1. Objetivos.- Estudiar los métodos iterativos para resolver sistemas de ecuaciones lineales a partir de
un vector inicial, generando una sucesión de vectores que deben converger bajo ciertas condiciones
a la solución en un número de iteraciones finitas. También se estudian métodos iterativos para el
cálculo de valores y vectores característicos.
4.2. Fundamento teórico
4.2.1. Métodos Iterativos para la solución de Sistemas de Ecuaciones Lineales Los métodos
(k+1)
iterativos para resolver sistemas lineales de la forma A.x=b, pueden expresarse x = Txk +c . La
matriz T y vector c varían de acuerdo al método. Además A = D – L – U.

𝑎11 0 … 0 0 0 … 0 0 −𝑎12 … −𝑎1𝑛


𝐷 = [ ⋮⁡
𝑎22 ⁡ ⋮ ], 𝐿 = [ 𝑎21 0 … 0
], 𝑈 = [0 0 … −𝑎2𝑛
]
⁡ ⋱ ⁡ ⋮ ⋮ ⋱ ⋱ ⋮ ⋮ ⋱ ⋮
0 ⋯ 0 𝑎𝑛𝑛 −𝑎𝑛1 −𝑎𝑛2 … 0 0 0 … 0

4.2.2. Convergencia de los métodos iterativos

4.3. Problemas Desarrollados


1. Implementar el método de Jacobi y resolver el siguiente sistema:
4𝑥1 + 0.24𝑥2 − 0.08𝑥3 = 8
0.09𝑥1 + 3𝑥2 − 0.15𝑥3 = 9
0.04𝑥1 − 0.08𝑥2 + 4𝑥3 = 20
METODO ITERATIVO DE JACOBI Los métodos iterativos se basan en lo siguiente:
sea f(x) = x – g(x)=0 .La solución al vector x viene dada por la sucesión x0, x1, x2…..y evaluada por
punto fijo, como

𝒙(𝒎+𝟏) = 𝒈(𝒙(𝒎) ), 𝒎 = 𝟏, 𝟐, 𝟑, ..

42
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

%%%%%% INICIO JACOBI %%%%%%%


function x=jacobi(A,b)
% Datos
% A = es la matriz
% b = es el vector del lado derecho
% n = el orden de la matriz
%RESULTADOS
% x = vector solución
[n n]=size(A);
x = zeros(n,1);
y = zeros(n,1);
error = 0.0005;
NTOL = 50;
flag = 1;
k = 0;
fprintf('%5d',k);
for m =1:n
fprintf('%10.5f',x(m));
end
%prueba de diagonalizacion
i=1;
%%%%%%Inicio while
while ( i<=n) & (flag == 1)
suma = 0;
for j=1:n
if (i>j)||(i<j)
suma = suma + abs(A(i,j));
end
end
if abs(A(i,i))<= suma
fprintf('\n error de diagonalizacion');
flag = 0;
end
i=i+1;

43
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
if flag ==0
break
end
end
%%%%%%%Fin while
%%%Inicio while
while 1
flag = 1;
%%%%%% Inicio for i
for i=1:n
suma = 0;
%%% Inicio for j
for j=1:n
if (i>j)||(i<j)
suma = suma+A(i,j)*x(j)/A(i,i);
end
end
%%%Fin for j
y(i)=b(i)/A(i,i)-suma;
end
%%% Fin for i
k=k+1;
fprintf('\n %5d',k);
%%% Inicio for i
for i= 1:n
if abs(y(i)-x(i))>error
flag=0;
end
x(i) = y(i);
fprintf('%10.5f',x(i));
end
%%% Fin for i
if(NTOL==k) || (flag==1)
break
end
end
44
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
%%%% Fin while
%%%%%%%%%% FIN JACOBI %%%%%%%%%%%%%%%%%

2.-Metodo con la definicion x(k+1) = Txk +c y con el método indicado:


%%%%%%% Inicio de la Funciuon
function [z,x,numite]=jacobi(A,b,TOL,MAXITE)
D = diag(diag(A));
L = D - tril(A); U = D - triu(A); Tj = inv(D)*(L+U);
x = zeros(size(b)); % Vector Inicial
Cj = inv(D)*b; z = [];
for i = 1:MAXITE
xn = Tj*x+Cj;
err = norm(xn-x,2);
z = [z;xn‟ err];
x = xn;
if err<TOL
break
end
end
numite = i;
%%%%% Fin de la funcion
Ejecucion:
» A = [4 0.24 -0.08; 0.09 3 -0.15; 0.04 -0.08 4]
» B = [8; 9; 20]
» [z,x,numite]=jacobi(A,B,1e-6,100)

2. Con el método Gauss Seidel resolver:


2x1 + 10x2 –x3 = 11
20x1 - x2 +x3 = 20
-x1 - x2 +20x3= 18
Se observa, que aparentemente no son estrictamente dominantes en la diagonal, pero basta con
realizar un intercambiando el orden de las ecuaciones, para conseguir la dominancia:
a. Solución
20x1 - x2 +x3 = 20
2x1 + 10x2 –x3 = 11
-x1 - x2 +20x3= 18

45
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Programación en Matlab
%%%%%%%% Inicio de la función GaussSeidel
function x=GaussSeidel(A,b)
%% Datos
% A = es la matriz
% b = es el vector de la mano derecha
% n = el orden de la matriz
% Resultados
% x = vector solucion
[n n] = size(A);
x = zeros(n,1);
y = zeros(n,1);
error = 0.0005;
flag = 1;
NTOL = 50;
k = 0;
fprintf('%5d',k);
for m = 1:n
fprintf('%10.5f',x(m));
end
% prueba de diagonalizacion
i = 1;
%%%%%% Inicio del while
while (i <= n) & (flag == 1)
suma = 0;
for j = 1:n
if i ~= j
suma = suma + abs(A(i,j));
end
end
if abs(A(i,i)) <= suma
fprintf('\nError de diagonalizacion');
flag = 0;
end
i=i+1;
end % fin de la prueba
%%% Fin del while
if flag == 0
break

46
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
end
%%% Inicio del while
while 1
flag = 1;
for i = 1:n
suma = 0;
for j = 1:n
if i ~= j
suma = suma+A(i,j)*x(j)/A(i,i);
end
end
y(i) = b(i)/A(i,i)-suma;
if abs(y(i) - x(i)) > error
flag = 0;
end
x(i) = y(i);
end
k=k+1;
fprintf('\n%5d',k);
for i=1:n
fprintf('%10.5f',x(i));
end
if (NTOL == k) || (flag == 1)
break
end
end
%%%%% Fin del while
%%%%%%%%% Fin Funcion Gauss Seidel%%%%%%%

47
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
4.4. PROBLEMAS PROPUESTOS
1.- Crear una rutina en MATLAB para determinar si una matriz tiene diagonal estrictamente dominante.
function flag = dominante (A)
% flag : 1 si tiene diagonal estrictamente dominante y 0 en caso contrario
2.- Crear una rutina en MATLAB para determinar si una matriz es simétrica,
3.- Estudie el programa de Jacobi y el de Gauss Seidel haga un estudio comparativo de los 2
programas.
%% Jacobi y Gauss Seidel en un programa
disp('1.-MÉTODO DE JACOBI');
disp('2.-MÉTODO DE GAUSS');
disp('3.-SALIR');
n=input ('SELECCIONE UNA OPCION: ');
if n==1
num=input('INTODUCE EL NUMERO DE ECUACIONES: ');
A=input ('INTRODUCE LA MATRIZ DE COEFICIENTES: ');
b=input ('INTRODUCE LA MATRIZ DE COEFICIENTES INDEPENDIENTES: ');
z=input ('INTRODUZCA EL NUMERO DE ITERACIONES: ');
X0=zeros (1,num);
for f=1:z
for i=1:num
suma=0;
for j=1:num
if i~=j
suma=suma+A(i,j)*X0(j);
end
end
X(i)=(b(i)- suma)/A(i,i);
fprintf('%10.4f',X(i));
end
fprintf('\n');
X0=X;
end
elseif n==2
num =input ('INTRODUCE EL NUMERO DE ECUACIONES: ');
A=input ('INTRODUCE LA MATRIZ DE COEFICIENTES: ');
b=input ('INTRIODUCE LA MATRIZ DE COEFICIENTES INDEPENDIENTES: ');
48
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
z=input ('INTRODUZCA EL NUMERO DE ITERACIONES: ');
X0=zeros (1,num);
X=X0;
for f=1:z
for i=1:num
suma =0;
for j=1:num
if i~=j
suma=suma+A(i,j)*X(j);
end
end
X(i)=(b(i)-suma)/A(i,i);
fprintf('%10.4f', X(i));
end
X0=X;
fprintf('\n');
end
elseif n==3
return;
else
disp('ERROR');
end

49
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 5
Solución de Ecuaciones No Lineales

50
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
5. SOLUCIÓN DE ECUACIONES NO LINEALES
5.1. Objetivos: Aplicar los métodos iterativos de intervalo y los métodos iterativos funcionales, en la
solución de ecuaciones no lineales de una y más variables.
5.2. Fundamentos Teóricos
5.2.1. Métodos Iterativos de Intervalo
Método de Bisección En la resolución de ecuaciones no lineales se utilizan, salvo soluciones analíticas
simples, métodos iterativos que generan una sucesión de valores que tienden al valor de la raíz. Este
método presenta la ventaja de acotar no sólo el valor de la función, sino también el intervalo a que
pertenece la raíz. Para su aplicación es necesario que verifique las condiciones del Teorema de Bolzano,
esto es, la función debe ser continua y cambiar de signo en sus extremos
Algoritmo de Bisección:
1.- Leer (a)
2.- Leer (b)
3.- Leer (Max_Ite)
4.- Leer (Max_Error)
5.- Para i = 1 hasta Max_Ite
5.1.- m=(a+b)/2
5.2.- error=(b-a)/2
5.3.- Si ((f(a)*f(m) ) < 0)
Entonces
5.3.1.- b = m
Sino
5.3.2.- a = m
Fin Si
5.4.- Si (error < Max_Error)
Entonces
5.4.1.- Salir
Fin Si
6.- Fin Para
Ejemplo 1 Cálculo de una raíz usando el método de la bisección

function raiz = biseccion(fx,a,b )


% fx es la función
% a y b son los valores extremos del intervalo
%raíz es el valor de la solución
error=0.0005;

51
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
k=0;
fxa = feval(fx,a);
fxb = feval(fx,b);
if fxa*fxb<= 0
while(abs(b-a)/2 > error)
m = (a+b)/2;
dif=b-a;
fxm=feval(fx,m);
fprintf('%2d%8.5f%8.5f%8.5f%8.5f \n',k,a,b,m,dif);
k=k+1;
if fxa*fxm<=0
b=m;
fxb=fxm;
else
a=m;
fxa=fxm;
end
end
raiz = m;
else
fprintf('CAMBIAR LIMITES');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% FUNCION QUE VAMOS A UTILIZAR%%%%%%%%%%%%%%%%
function y= ff(x)
y = x^2-x-2;
end

>>biseccion('ff',0,3)

0 0.00000 3.00000 1.50000 3.00000

1 1.50000 3.00000 2.25000 1.50000

2 1.50000 2.25000 1.87500 0.75000

3 1.87500 2.25000 2.06250 0.37500

52
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
4 1.87500 2.06250 1.96875 0.18750

5 1.96875 2.06250 2.01563 0.09375

6 1.96875 2.01563 1.99219 0.04688

7 1.99219 2.01563 2.00391 0.02344

8 1.99219 2.00391 1.99805 0.01172

9 1.99805 2.00391 2.00098 0.00586

10 1.99805 2.00098 1.99951 0.00293

11 1.99951 2.00098 2.00024 0.00146

ans = 2.0002

>>biseccion('ff',-2,0)

0-2.00000 0.00000-1.00000 2.00000

1-2.00000-1.00000-1.50000 1.00000

2-1.50000-1.00000-1.25000 0.50000

3-1.25000-1.00000-1.12500 0.25000

4-1.12500-1.00000-1.06250 0.12500

5-1.06250-1.00000-1.03125 0.06250

6-1.03125-1.00000-1.01563 0.03125

7-1.01563-1.00000-1.00781 0.01563

8-1.00781-1.00000-1.00391 0.00781

9-1.00391-1.00000-1.00195 0.00391

10-1.00195-1.00000-1.00098 0.00195

ans = -1.0010

53
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
5.2.2. Métodos de Iteración Funcional
Continuando con los métodos de resolución de ecuaciones no lineales, analizaremos en esta
práctica los métodos de iteración funcional, esto es, métodos que convierten la ecuación f(x) = 0 en
x = g(x). Estos métodos presentan la ventaja de poder calcular raíces de multiplicidad par (no existen
intervalos en que la función cambie de signo), y el inconveniente de que no son capaces de acotar el
intervalo a que pertenece la raíz (y por tanto es difícil evaluar su proximidad a la misma).
a) Método de Punto Fijo o Aproximaciones Sucesivas
Estos métodos se basan en el Teorema de Punto Fijo, y deben cumplir las condiciones del Teorema
para garantizar su convergencia. Dichas condiciones se resumen como:

𝑔(𝑥)𝜖𝐶 1 [𝑎, 𝑏]⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡∀𝑥 ∈ [𝑎, 𝑏]: 𝑔(𝑥) ∈ [𝑎, 𝑏]⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡∀𝑥 ∈ [𝑎, 𝑏]: |𝑔′ (𝑥)| < 1
Algoritmo de aproximaciones sucesivas:
Sea f(x) = x-g(x) = 0
Entonces
1.- x0 = valor inicial
2.- Para i = 0 : n
2.1 xi+1 = g (xi)
2.2 Si (abs(xi+1- xi)<Max_Error)
Entonces
Salir
Fin Si
3.- Fin Para
4.- Escribir (xi+1)
5.- Fin
5.3. MATLAB- SIMBOLICO.- El MatLab también tiene un módulo Symbolic Math Toolbox, que permite
manejar perfectamente el cálculo matemático simbólico, manipular con facilidad y rapidez las formulas
y expresiones algebraicas y realizar la mayoría de operaciones con las mismas. Es posible expandir,
factorizar y simplificar polinomios y expresiones racionales y trigonométricas; encontrar soluciones
algebraicas de ecuaciones polinómicas y sistema de ecuaciones; evaluar derivadas e integrales
simbólicas y encontrar soluciones de ecuaciones diferénciales; manipular series de potencias, límites
y otras operaciones
DEFINICIÓN DE OBJETOS SIMBOLICOS
Para realizar cálculos simbólicos, MATLAB requiere que todas las variables(o expresiones algebraicas)
sean declaradas como simbólicas previamente con el comando syms.
Por ejemplo si queremos simplificar la expresión 6ab+3.a2 +2ab, realizamos lo siguiente:
>>syms a b
>>simplify(6*a*b+3*a^2+2*a*b)
54
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
ans =
8*a*b+3*a^2
DERIVADAS Y PRIMITIVAS
>>syms x
>> f = ‘sin(x)’
f=
sin(x)
Se pueden calcular derivadas
>>diff( f, x )
ans=
cos(x)
>>diff(diff( f, x ),x)
ans=
-sin(x)
También se pueden encontrar primitivas:
>>int(‘log(x)’) % Primitiva de la función logaritmo
ans=
x*log(x)-x
>>diff(‘x*log(x)-x ’,x) % Comprobación
ans=
log(x)
OPERACIONES CON EXPRESIONES SIMBOLICAS
Al igual que en el caso de variables numéricas se pueden sumar, restar, multiplicar, dividir y elevar a
potencias las expresiones simbólicas. Por ejemplo, dadas las siguientes funciones

f ( x)  2 x 2  3x  5, g ( x)  x 2  x  7, hallar las expresiones de f+g, f-g, f*g , f/g y f3 .


>>syms x

>> f = 2*x^2-3*x-5

f=

2*x^2-3*x-5

>> g = x^2-x+7;

>>pretty(f+g)

3x 2  4 x  2
55
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
>>pretty(f-g)

x 2  2 x  12
>>pretty(f*g)

(2 x 2  3x  5)( x 2  x  7)
También

>>h= f *g

h=

(2*x^2-3*x-5)*( x^2-x+7)

>>pretty(expand(f*g))

2 x 4  5x 3  12x 2  16x  35
>>pretty(f/g)

2 x 2  3x  5
x2  x  7
>>pretty(f^3)

(2 x 2  3x  5) 3
>>pretty(expand(f^3))

8x 6  36x 5  6 x 4  153x 3  15x 2  225

Realice lo siguiente

>>p=3*x*exp(4*x)

>>diff (p, x)

>>diff(sin(x),x)

>>diff (diff (p, x),x)

56
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
>>diff(p,x,2)

A continuación resolvemos la ecuación x4+1=0 y presentamos el resultado en escritura matemática


habitual.
>>S=solve(‘x^4+1=0’)
S=
[1/2*2^(1/2)+1/2*i*2^(1/2)]
[-1/2*2^(1/2)-1/2*i*2^(1/2)]
[1/2*2^(1/2)-1/2*i*2^(1/2)]
[-1/2*2^(1/2)+1/2*i*2^(1/2)]
>>numeric(S)

ans=
0.7071+0.7071i
-0.7071-0.7071i
0.7071-0.7071i
-0.7071+0.7071i
En el ejemplo siguiente definimos una matriz simbólica y calculamos su determinante
>>syms a x
>> A = [cos(a* x),sin(a* x);-sin((a* x),cos(a* x)]
A = [cos(a* x) sin(a* x)]
[-sin((a* x) cos(a* x)]
>>det(A)
ans = cos(a*x)^2+sin(a*x) ^2
>>pretty(inv(A))
......................................
FUNCION subs
Una vez definida explícitamente una función simbólica, es posible sustituir valores de las variables en
la función, es decir calcular el valor de la función en un punto dado, mediante los comandos que se
indican a continuación.
subs(f,a) Aplica la función f en el punto a

subs(f,a,b) Sustituye en f el valor de a por el valor de b

subs(f,variable,valor) Sustituye en la ecuación de f la variable por el valor

subs(f,{x,y,...},{a, b,...}) Sustituye en la ecuación de f las variables {x,y,...} por


los valores {a,b,...}

57
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Como ejemplo definamos la función f(x) = x3 y calculamos f(2) y f(b+2)
>> f =’x^3’
f = x^3
>> A = subs(f,2)
A=
8
>>syms b
>> B = subs(f,b+2)
B=
(b+2)^3
En el ejemplo siguiente consideramos la función de dos variables f(a, b) = a+ b, y sustituimos
primeramente a por 4, y posteriormente a por 3 y b por 5.
>>syms a b
>>subs(a+b,a,4)
ans=
4+b
>>subs(a+b,{a,b},{3,5})
ans =
8
» syms x % Definición de la variable simbólica x
» fx='x^4+2*x^2-x-3'; % Def. Función simbólica fx
» ezplot(fx,-2,2);grid on; % Representación de fx en [-2,2]
Para encontrar las raíces de forma más exacta (simbólica), además de las funciones creadas en la
práctica anterior, se puede utilizar “solve” y “fzero‟. La primera necesita que se le de una ecuación, lo
que se logra mediante:
» solve(strcat(fx,'=0'))
Para usar fzero, se le debe dar un punto próximo a la raíz o, mejor, un intervalo donde esta cambia de
signo.
» x1=fzero(fx,[-1,0]),x2=fzero(fx,[0,2])
Despejando la primera x de la expresión se tiene que:
4
𝑔(𝑥) = √3 + 𝑥 − 2𝑥 2
Definiendo y representando la función g(x) mediante
» gx=' (3+x-2*x^2)^0.25'; % Def. Función simbólica gx
» ezplot(gx,-2,2);grid on; % Representación de gx en [-2,2]

58
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Para que la sucesión de valores de punto fijo converja es necesario que se cumplan las condiciones
enunciadas. La evaluación de la derivada de la función será:
» dgx=diff(gx); % Def. Función simbólica dgx, derivada de gx
» ezplot(dgx,-2,2);grid on; % Representación de dgx en [-2,2]
Método de Newton-Raphson
A continuación utilizaremos el método de Newton, y veremos diferentes características del mismo. Este
método se puede considerar una particularización del punto fijo, si bien existen condiciones suficientes
de convergencia cuya demostración es más simple que en el caso de punto fijo.

Algoritmo de Newton-Raphson:
1.- Leer (x0)
2. - Leer (max_rep)
3. - Leer (TOL)
4.- Para n = 1 hasta max_rep

Si │xn+1-xn│< TOL
Entonces
Salir
Fin Si
5.- Escribir (xn)

Ejemplo 2 Raphson con localización de Raíces.-


Caso a) Localizar las raíces de la función

Creamos la siguiente función:


% fun1.m
function [f]=fun1(x)
f=1/2*exp(x/3)-sin(x);
Sea el siguiente programa para localizar las raíces gráficamente y mostrara los intervalos unitarios que
contengan raíces:

59
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
% Localiza.m
clc, clear all, format short
x=-10:10;
y=fun1(x);
plot(x,y),grid
disp('x vs y')
disp([x' y'])
% Intervalos que contienen raices
acu=[];
for i=1:length(x)-1
if y(i)*y(i+1)<0, acu=[acu; x(i) x(i+1)];
end
end
disp('Intervalos que contienen raices...'); disp(acu)
%%%%%%%%%% Fin%%%%%%%%%%%%%%%

Corrida del Programa


» localiza
x vs y
-10.0000 -0.5262
-9.0000 0.4370
-8.0000 1.0241
-7.0000 0.7055
-6.0000 -0.2117
-5.0000 -0.8645
-4.0000 -0.6250
-3.0000 0.3251
-2.0000 1.1660
-1.0000 1.1997
0 0.5000
1.0000 -0.1437
2.0000 0.0646
3.0000 1.2180
4.0000 2.6536
5.0000 3.6062
6.0000 3.9739
60
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
7.0000 4.4991
8.0000 6.2066
9.0000 9.6306
10.0000 14.5598
Intervalos que contienen raíces...
-10 -9
-7 -6
-4 -3
0 1
1 2

61
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Método de Newton Raphson

% raphson.m
function [acu,raiz,it]=raphson(f,df,x,TOL)
acu=[];
for it=1:100
xn=x-feval(f,x)/feval(df,x);
err=abs(xn-x);
acu=[acu; xn err];
x=xn;
if err<TOL
break
end
end
raiz=xn;

Ejecución
» f=inline('1/2*exp(x/3)-sin(x)')
» df=inline('1/6*exp(x/3)-cos(x)');
» [acu,raiz,it]=raphson(f,df,1.5,1e-8)
acu =
2.34849118108965 0.84849118108965
1.99088685483220 0.35760432625745
1.91178545812247 0.07910139670974
1.90682391153077 0.00496154659170
1.90680389529660 0.00002001623416
1.90680389497052 0.00000000032609
raiz =
1.90680389497052
it = 6
Ejemplo 2: Bisección
» f=inline('exp(-x)-x')
F=Inline function:
f(x) = exp(-x)-x
» format long
» fzero(f,1)
62
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Zero found in the interval: [0.54745, 1.32].
ans = 0.56714329040978
% bolzano.m
function [raiz,z,it]=bolzano(f,a,b,TOL)
z=[];
for it=1:1000
x=(a+b)/2;
err=(b-a)/2;
z=[z; a x b err];
if feval(f,a)*feval(f,x)<0
b=x;
else
a=x;
end
if err<TOL
break
end
end
raiz=x;

Por ejemplo se desea hallar la raíz comprendida entre 0 y 1 con una precisión de 1e-4. z contiene los
resultados parciales: a, x, b y err.
» [raiz,z,it]=bolzano(f,0,1,1e-4)
raiz = 0.56719970703125
z=
0 0.50000000000000 1.00000000000000 0.50000000000000
0.50000000000000 0.75000000000000 1.00000000000000 0.25000000000000
0.50000000000000 0.62500000000000 0.75000000000000 0.12500000000000
0.50000000000000 0.56250000000000 0.62500000000000 0.06250000000000
0.56250000000000 0.59375000000000 0.62500000000000 0.03125000000000
0.56250000000000 0.57812500000000 0.59375000000000 0.01562500000000
0.56250000000000 0.57031250000000 0.57812500000000 0.00781250000000
0.56250000000000 0.56640625000000 0.57031250000000 0.00390625000000
0.56640625000000 0.56835937500000 0.57031250000000 0.00195312500000
0.56640625000000 0.56738281250000 0.56835937500000 0.00097656250000
0.56640625000000 0.56689453125000 0.56738281250000 0.00048828125000
63
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
0.56689453125000 0.56713867187500 0.56738281250000 0.00024414062500
0.56713867187500 0.56726074218750 0.56738281250000 0.00012207031250
0.56713867187500 0.56719970703125 0.56726074218750 0.00006103515625
it = 14
Ejemplo 3 Newton Raphson para Sistemas
Resolver el siguiente sistema usando el método de Newton Raphson:

Valor inicial: x= 1, y =0.5


Solución:

Iteración 1

Iteración 2

Ejemplo 4

Aproximar la solución al siguiente sistema de ecuaciones:

Tenemos con x= (x, y)T que

64
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Estas dos expresiones las calculamos en MATLAB mediante las siguientes funciones

Desarrollo del sistema de funciones


function z=func1(w)
z=zeros(2,1);
x=w(1);
y=w(2);
z(1)=x^3-x*y^2+y^3;
z(2)=x*sin(x*y)+1;
end
%%%%%%%%%%%Fin%%%%%%%

Desarrollo de la Derivada

%%%%%%Inicio%%%%%
function z=dfunc1(w)
z=zeros(2,2);
x=w(1);
y=w(2);
z(1,1)=3*x^2-y^2;
z(1,2)=-2*x*y+3*y^2;
z(2,1)=sin(x*y)+x*y*cos(x*y);
z(2,2)=x^2*cos(x*y);
end
%%%%%%%%%%%%Fin%%%%%%%

65
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

function [x,iter]=newton(f,fp,x0,tol,itermax)
%NEWTON Método de Newton para sistemas no lineales
% Los datos de entrada son
% f: Nombre de la función que representa el sistema.
% fp: Nombre de la función que calcula el Jacobiano.
% x0: El punto inicial (vector columna).
% tol: Tolerancia para el error relativo en la solución calculada
% itermax: Número máximo de iteraciones que se repiten las iteraciones
if nargin<4
tol=1.0e-4;
end
if nargin<5
itermax=20;
end
x=x0;
normx=0;
normz=inf;
iter=0;
while (normz>tol*normx)&(iter<=itermax)
f0=feval(f,x);
fp0=feval(fp,x);
z=-fp0\f0;
normz=norm(z,2);
normx=norm(x,2);
x=x+z;
iter=iter+1;
end

[x, iter]=newton(„func1‟,‟dfunc1‟,[1,0]‟)

66
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

5.4. FUNCIONES PARA RESOLVER ECUACIONES NO LINEALES DE UNA Y MÁS VARIABLES.


EN FORMA SIMBÓLICA:
solve:
Solución Simbólica de las ecuaciones algebraicas, su argumento puede ser una ecuación algebraica
en cadena o un sistema de ecuaciones algebraicas.
ezplot :
Graficador de funciones en cadena o en forma simbólica
p.e. ezplot('x^2-y^4'), puede especificarse el rango de x que se desea graficar.
eval:
La función eval('cadena de caracteres') hace que se evalúe como expresión de MATLAB el texto
contenido entre las comillas como argumento de la función. Este texto puede ser un comando, una
fórmula matemática o -en general- una expresión válida de MATLAB. La función eval puede tener los
valores de retorno necesarios para recoger los resultados de la expresión evaluada.
EN FORMA NUMÉRICA
fzero(fun,x0):
Encuentra una raíz de la función f (x) = fun, que debe ser definida antes o allí mismo con la
instrucción inline. Esta instrucción busca un cero de f cerca del punto x0 especificado por el usuario, y
se basa en los métodos de la secante, bisección e interpolación cuadrática inversa, por lo que la
función ingresada debe ser continua.
Por ejemplo, podemos digitar:
>> x=fzero(inline(‟0.5*exp(x/3)-sin(x)‟),0)
con la cual obtenemos: x = 6.7721e-001.
feval:
Sirve para evaluar, dentro de una función, otra función cuyo nombre se ha recibido como argumento.
Por ejemplo, si dentro de una función se quiere evaluar la función calcular(A, b, c), donde el nombre
calcular se envía como argumento en la cadena nombre, entonces feval(nombre, A, b, c) equivale
a calcular(A, b, c).
fsolve:
Resuelve funciones no lineales en forma simbólica F(x)=0

67
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

5.5. PROBLEMAS PROPUESTOS


1. Realiza las derivadas de las siguientes funciones
1
log(sen(2x)) , log( 1  1  x 2
1  x2

2. Aplica la orden pretty al resultado para verla de una forma más clara.
3. Calcula la segunda derivada, respecto de su variable de las funciones anteriores
4. Calcula el valor de la segunda derivada en x=0 de la función
1
1  x2
2 f
5. Para la función f ( x, y )  sen( x)e y , calcula / x0, y 1
xy

Usando el comando int resolver.

1
6. Calcule  x 2  1 dx
7. Calcule la integral  aln( 1  bx)dx, siendo a y b parametros

1
8. Calcule la integral definida 
0
a ln( 1  bx)dx

9. Crear un programa que ubique todos los cambios de signo de una función en un intervalo y que
los muestre en una matriz, este programa debe indicar el cambio de signo en un intervalo
pequeño para asegurarnos que es un solo cambio de signo, al finalizar deberá graficar la
funcion.
10. Programar la función pfijo.m de acuerdo al siguiente Algoritmo, teniendo como

Función de iteración

x3
g ( x) 
x2  2
Para encontrar la raíz con un error menor que 0.001 tomando como valor inicial n

valor aleatorio entre 1 y 2. Mostrar los resultados indicando las iteraciones con las

aproximaciones y el error estimado.

Entrada: nombre del archivo que contiene g(x), valor inicial z, error admisible

68
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
“ex” y número máximo de iteraciones “niter”.

Salida: Vector x de aproximaciones a la raíz.

Paso 1: Verificar argumentos


Paso 2: Definir xniterx1
Paso 3: Hacer x1 = z
Paso 4: Repetir los pasos 5 y 6 para k=2 hasta niter
Paso 5: Hacer xk = g(xk-1)
Paso 6: Si (Abs( xk-xk-1) < ex salir
Paso 7: Mostrar Resultado
11. Realizar por el método de Newton. Considere 10 iteraciones.
a. f(x)= sin(x-1)- (x2-1)/2, con x0 = -4
b. f(x)=x3-x-3 con x0 = 0
c. f(x)=arctg(x) con x0 = 1.45

69
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 6
Aproximación de Funciones

70
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

6. APROXIMACION DE FUNCIONES

6.1. Objetivos.- Estudiar y aplicar los diversos métodos de aproximación de funciones mediante
interpolación polinómica, ajuste de mínimos cuadrados e interpolación por splines.

6.2. Fundamento Teórico


Problema básico de Interpolación: Dados números distintos x1, x2, x3… xn, y números arbitrarios y1,
y2, y3… xn, queremos hallar una función g(x) tal que:

G(xi) = yi 0 <=i <=n

6.2.1. Diferencias Divididas


Se define para puntos o argumentos desigualmente espaciados:
Diferencia Dividida de Primer Orden

Diferencia Dividida de Segundo Orden

Diferencia Dividida de Orden “n”

Polinomio de interpolación de Newton basado en diferencias Divididas

71
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Polinomios de interpolación de Lagrange


Para intervalos igualmente espaciados o no.

Se cumple:

Interpolación Polinómica.- Forma de Lagrange; considerando un par de puntos (x0,f(x0)) y (x1,f(x1))


entonces para un x entre x0 y x1 tendremos un polinomio de interpolación:

Entonces el polinomio de grado <= n que interpola a f(x) en x0, x1, x2, x3,………. xn es :

Cuando tenemos (n+1) puntos y entonces

Por ejemplo para n igual a 3:

72
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Ejemplo: Polinomio de Lagrange:

function p=lagrange(x,y,x0)
%*******datos******
%x, es el vector x
%y, es el vectorf(x)
%n, es el orden de la matriz
%*******resultados****
%L, es el polinomio de lagrange
%p, es el valor interpolado
n= length(x);
L= zeros(n,1);
fprintf(' k x y L\n');
for k= 1:n
prod1 = 1;
prod2=1;
for i=1:n
if(i~=k)
prod1=prod1*(x0-x(i));
prod2=prod2*(x(k)-x(i));
end
end
L(k)=prod1/prod2;
end
p= 0;
for k=1:n
p = p+L(k)*y(k);
fprintf('%5d%10.6f%10.6f%10.6f \n',k,x(k),y(k),L(k));
end
end
>> x= 1:10

73
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
>> y =[ 3 5 7 6 5 6 7 5 8 14 ]
>> t= lagrange(x,y, 7.5)
k x y L
1 1.000000 3.000000 0.000839
2 2.000000 5.000000 -0.008926
3 3.000000 7.000000 0.043640
4 4.000000 6.000000 -0.130920
5 5.000000 5.000000 0.274933
6 6.000000 6.000000 -0.458221
7 7.000000 7.000000 0.916443
8 8.000000 5.000000 0.392761
9 9.000000 8.000000 -0.032730
10 10.00000 14.00000 0.002182
t= 6.2508
Diferencias Divididas

function z=difdivididas(x,y)
n=length(x);
for j=1:n
v(j,1)=y(j);
end
fprintf('Diferencia Divididas:\n\n');
for i=2:n
for j=1:n+1-i
v(j,i)=(v(j+1,i-1)-v(j,i-1))/(x(j+i-1)-x(j));
fprintf(' %10.4f',v(j,i));
end
fprintf('\n\n');
end
for i=1:n
c(i)=v(1,i);
end
p=[y(1)];
for j=2:n;
q=poly(x([1:j-1]));
p=[0,p]+c(j)*q ;
end
74
fprintf('El polinomio de Newton es:\n');
z=p;
end
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

%Interpolar por Newton con los siguientes puntos


>> x = [0 0.5 1]
>> y = [1 0.8 0.5]
x=
0 0.5000 1.0000
y=
1.0000 0.8000 0.5000
>> difdivididas(x,y)
Diferencia Divididas:
-0.4000 -0.6000
-0.2000
El polinomio de Newton es:
ans =
-0.2000 -0.3000 1.0000 % Polinomio Interpolante de Grado 2 en forma descendente
6.3. POLINOMIOS EN MATLAB
REPRESENTACION DE POLINOMIOS EN MATLAB.- Los polinomios son representados en MatLab
como vectores fila conteniendo los coeficientes 1ordenados por potencias descendentes, veamos un
ejemplo:

>> p1=[1 -10 35 -50 24]


p1 =
1 -10 35 -50 24
>>roots(p1)
ans =
4.0000
3.0000
2.0000
1.0000

75
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Hemos ingresado el polinomio y calculado sus raíces con el comando roots, notar que el polinomio se

ha originado por: ( x  1)( x  2)( x  3)( x  4)  x  10 x  35x  50 x  24


4 3 2

EVALUACION DE POLINOMIOS.-
Podemos evaluar el polinomio para un valor de x = 0, 1, 5, 6.

>>polyval(p1,0)
ans = 24
>>polyval(p1,1)
ans = 0
>>polyval(p1,5)
ans = 24
>>polyval(p1,6)
ans = 120

X también puede ser un vector, por ejemplo que varié de 0 a 6 con incrementos de 0.5.

>> x=0:0.5:6
x = Columns 1 through 7
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
Columns 8 through 13
3.5000 4.0000 4.5000 5.0000 5.5000 6.0000
>>polyval(p1,x)
ans = Columns 1 through 7
24.0000 6.5625 0 -0.9375 0 0.5625 0
Columns 8 through 13
-0.9375 0 6.5625 24.0000 59.0625 120.0000

PRODUCTO DE POLINOMIOS.-
Podemos hallar el producto de dos polinomios como conv (convolucion)
>> p2= [1 -3 4]
p2 = 1 -3 4
>>conv(p1,p2)
ans = 1 -13 69 -195 314 -272 96
La división se realiza con deconv(pol1,pol2), o sea la división polinomio1 entre polinomio2:

>> p3=conv(p1,p2)
p3 =
76 1 -13 69 -195 314 -272 96
>>deconv(p3,p1)
ans = 1 -3 4
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

FRACCIONES PARCIALES Y DERIVADAS.-


Se puede descomponer en fracciones parciales, como vemos en el ejemplo:

>> [r,p]=residue(num,den)
r=1
2
p=3
-2
Donde la respuesta será:
num 3x  4 r (1) r (2) 1 2
    
den x 2  x  6 x  p(1) x  p(2) x  3 x  2

Realizaremos el cálculo de la derivada del polinomio,

>>polyder(p1)
ans = 4 -30 70 -50
POLINOMIO DE INTERPOLACION.-
Mediante el comando polyfit obtener un polinomio interpolante que pase por los puntos:
X 0 1 3 4 6
Y 1 0 64 225 1225
Aproxime Y (2), Y (5)
Grafique el polinomio interpolante, paso=0.01.

%Programa
x=[0 1 3 4 6]
y=[1 0 64 225 1225]
p=polyfit(x,y,length(x)-1)
xi=[2 5]
yi=polyval(p,[2 5])
xx=0:0.1:6;
yy=polyval(p,xx);
plot(x,y,'o',xi,yi,'x',xx,yy)
legend('data','estimados','polinomio')

Realice una interpolación lineal:

77
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
» x=[0 0.25 0.5 0.75 1]'
» y=[0.9162 0.8109 0.6931 0.5596 0.4055]'
» xi=[0.2 0.4 0.6]'
» yi=interp1(x,y,xi,'linear')
» plot(x,y,'o',xi,yi,'x')
Teoria: Spline cúbico natural
Sea el conjunto de datos:

Donde cada segmento puede ser aproximado con un polinomio cúbico de la forma:

Ejemplo
Realice una interpolación por splines, para:
% ejmspl.m
x=[0.9 1.3 1.9 2.1 2.6 3 3.9 4.4 4.7 5 6];
y=[1.3 1.5 1.85 2.1 2.6 2.7 2.4 2.15 2.05 2.1 2.25];
xx=0.9:0.01:6;
yy=spline(x,y,xx);
plot(x,y,'o',xx,yy)
legend('data','spline')

6.4. PROBLEMAS PROPUESTOS


1.- Representar como polinomio:
x 5  30 x 4  10 x 2  15 x  50
2.- Evalué el polinomio anterior en x=0.2, 0.4, 0.8……2.0
3.- Halle la derivada del polinomio anterior y evalúelo en 0.4, 0.8, 1.2
4.- Halle un polinomio con raíces -2, -3 -4 -5.
5.- Escribir una función que sume dos polinomios y otra que reste 2 polinomios.
6.- Multiplicar f*g si
f ( x)  x 3  6 x 2  4 x  12

g ( x)  x 2  6 x  2
7.- Obtener un polinomio que pase por los siguientes puntos:
X 1 2 4 5

78
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Y 3 10 66 127
8.- Obtenga el valor para xi= 1.5, 3, 4.5
9.- Graficar el polinomio obtenido y los valores interpolados.
10.- Mediante el comando polyfit hallar un polinomio interpolante que pase por:
X 0 1 3 4 6
Y 1 0 64 225 1225
Aproxime y (3.5), y (4.2) y y (5)
Grafique el polinomio y los valores interpolados.
11.- Estudie el método de Lagrange con este código haga un análisis

% INTERPOLACION "POLINOMIO DE LAGRAGE"


clc %permite borrar el área de trabajo
clear %permite borrar las variables almacenadas
format long %permite utilizar la máxima capacidad de la maquina
fprintf('INTERPOLACION "POLINIMIO DE LAGRAGE"\n\n\n');
%fprintf me permite ingresar comentarios de manera textual que pueden
%orientar al usuario en el uso del programa
xi=input('Ingrese los puntos pertenecientes a las x: ');
yi=input('Ingrese los puntos pertenecientes a las y: ');
%input es un comando de solicitud de entrada de datos del usuario.
n=length(xi);
x=sym('x'); %esta funcion nos permite dejar la variable 'x' como simbólica
% y asi poder trabajar con ella, sin tener que asignarle un valor.
for j=1:n
producto=1;
for i=1:j-1
producto=producto*(x-xi(i)); %calculo del producto 1 superior de L
end
producto2=1;
for i=j+1:n
producto2=producto2*(x-xi(i)); %calculo del producto 2 superior de L
end
producto3=1;
for i=1:j-1
producto3=producto3*(xi(j)-xi(i)); %calculo del producto 3 inferior de L
end

79
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
producto4=1;
for i=j+1:n
producto4=producto4*(xi(j)-xi(i)); %calculo del producto 4 inferior de L
end
L(j)=(producto*producto2)/(producto3*producto4); %cálculos de las L para
fprintf('\n L%d:\n',j-1) %poder hallar el polinomio
disp(L(j)) %la función dispo nos permite visualizar variables o texto
% en el workspace
end
pn=0;
for j=1:n
pn=pn+L(j)*yi(j); %calculo del polinomio interpolante
end
fprintf('\n POLINOMIO INTERPOLANTE: \n')
%disp(pn) % esta ejecucion la podemos utilizar cuando no necesitamos
%simplicar la expresion
pn = simple(pn); %este comando nos permite simplificar toda la expresion
disp(pn)
opc=input('\nDesea aproximar un valor (si/no): ','s');
%este comando nos permite saber si el usuario quiere obtener una
%aproximacion de un punto dado, en el polinomio que se acaba de obtener
if opc=='si'
x=input('\nIngrese el punto a aproximar: ');
y=eval(pn); %evaluar el punto en el polinomio
disp('\nLa aproximacion a f(x) es:')
disp(y)
end

80
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 7
Diferenciación e Integración Numérica

81
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
7. DIFERENCIACION E INTEGRACION NUMERICA
7.1. Objetivos.- Estudiar y aplicar los métodos para la aproximación numérica de derivadas e integrales
de funciones. La función f (x) puede conocerse en forma analítica o solo en forma discreta (tablas).
7.2. fundamento Teórico
Fórmulas para la primera derivada:
Hacia delante

Central:

Fórmulas para la segunda Derivada:


Hacia adelante

Central:

82
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Integración Numérica
Mostramos algunas fórmulas cerradas de Newton-Cotes más comunes para cualquier función f(x).
Regla de los Trapecios (n = 1)

Regla de Simpson un Tercio (n = 2)

Regla de Simpson tres Octavos (n = 3)

Regla de Milne (n = 4)

83
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Fórmulas de Newton-Cotes abiertas:
Regla del Punto Medio
n=0

n=1

n=2

n=3

Cuadratura de Gauss-Legendre:
Consideremos la cuadratura Gaussiana para evaluar:

Donde [a, b]<>[-1,1], los límites de integración debe ser [-1,1] por lo cual recurrimos a un cambio de
variable:

Reemplazando tendremos:

84
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Siendo xi las raíces o ceros del polinomio de Legendre de grado “n”, además:

A continuación se muestra una tabla conteniendo los factores de peso ci y los ceros del polinomio de

Legendre para (xi) para diversos valores de “N”.

Tabla de Gauss Legendre

Donde “N” es el número de puntos


7.3. PROBLEMAS DESARROLLADOS
Ejemplo 1
La función “diff” permite el cálculo de derivadas exactas:
» syms x
» f=exp(x)*sin(x)
» fd=diff(f)
fd =exp(x)*sin(x)+exp(x)*cos(x)
» subs(fd,1) % evaluando la derivada en x=1
ans =3.7560

85
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Ejemplo 2
Dados los siguientes puntos obtener la derivada a partir de un polinomio interpolante:
» x=[0 0.1 0.2 0.4 0.5 0.55]
» y=[1.12 1.28 1.55 1.88 1.77 1.66]
» p=polyfit(x,y,length(x)-1)
» dp=polyder(p)
» xi=[0 0.25 0.50] % Evaluará p‟(0) p‟(0.25) p‟(0.50)
» dpxi=polyval(dp,xi)
Ejemplo 3
Obtener la derivada a partir de puntos calculados con una función:

%pruebadiff1.m
f=inline('x.^2.*exp(x)')
df=inline('(x.^2+2*x).*exp(x)')
x=0:0.25:1
y=f(x)
p=polyfit(x,y,length(x)-1)
dp=polyder(p)
xi=[0 0.25 0.50 0.8 1 1.1 1.2]
dpxi=polyval(dp,xi)
dfxi=df(xi)
err=abs(dpxi-dfxi)

Ejemplo 4
Uso de fórmulas de diferenciación de dos puntos
%pruebadiff2.m
f=inline('x.^2.*exp(x)')
df=inline('(x.^2+2*x).*exp(x)')
x=1
h=0.1
dfa=(f(x+h)-f(x))/h
dfe=df(x)
err=abs(dfe-dfa)
Ejemplo 5
Cálculo de Integrales indefinidas
Se utiliza el comando int.
Ejemplo:
86
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
» syms t % variable simbólica
» f=inline(‟cos(x)*exp(x)‟);
» int(f(t),t)
» pretty(ans) % reescribimos la solucion de forma ‟elegante‟
Ejemplo 6 Integrales Definidas
La misma instrucción, int, permite realizar la integración definida. A modo de
Ejemplo:
» int((t^2+4*t)/(t^4-2*t^2+1),t,2,5)
ans =13/16+1/4*log(2)
» double(ans)
ans = 0.9858
Ejemplo 7
La función “quad” permite obtener integrales en forma numérica:
» f=inline('exp(x).*sin(x)')
» I=quad(f,1,2)
I = 4.4875
Ejemplo 8
Aproxime:

Usando la regla del trapecio h= 1


» f1=inline('exp(x).*(x.^2+2*x)')
» h=1
» Ie=exp (1)
» I=h/2*(f1(0)+f1(1))
I = 4.0774
» err=abs (Ie-I)
err = 1.3591
Usando la regla del trapecio con h=1/2
» h=0.5
» I=h/2*(f1 (0) +2*f1 (0.5) +f1 (1))
I = 3.0692
» err=abs (Ie-I)
err = 0.3509

87
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Ejemplo 9
Escriba una función para la fórmula del trapecio compuesta:
% trapecio.m
function I=trapecio(fname,a,b,n)
h=(b-a)/n;
x=a:h:b;
f=feval(fname,x);
I=h/2*(f(1)+2*sum(f(2:n))+f(n+1));

» I=trapecio(f1,0,1,8)
I = 2.74043839175033
» err=abs(I-Ie)
err = 0.02215656329129
Ejemplo 10
Resuelva la integral anterior usando la regla de Simpson 1/3, h=0.5
» h=0.5
» I=h/3*(f1(0)+4*f1(0.5)+f1(1))
I = 2.73307530647963
Ejemplo 11
Escriba una función para la formula compuesta de Simpson 1/3:
% Formula compuesta de Simpson 1/3
% n : Numero total de particiones debe ser par
function I=sim13(fname,a,b,n)
if rem(n,2)==0
h=(b-a)/n;
x=a:h:b;
f=feval(fname,x);
I=h/3*(f(1)+4*sum(f(2:2:n))+ 2*sum(f(3:2:n-1))+f(n+1));
else
disp('Lo siento n debe ser par!!!')
end
end

»I2=sim13 (f1,0,1,2)
I2 = 2.7331
Ejemplo 12

88
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Aproxime usando la regla del rectángulo:

» f2=inline('1./sqrt(-log10(x))')
» h=0.5
» I=2*h*f2(0.5)
I = 1.82261572880500
» h=0.25
» I=2*h*f2(0.25)+2*h*f2(0.75)
I = 2.05895221855840
Ejemplo 13
Elabore la siguiente función:
% rectangulo.m
function I=rectangulo(fname,a,b,n)
Luego calcule la integral anterior con n=2, 4, 8, 16, 32, 64, 128, 256.
Ejemplo 14

Aproximar, mediante cuadratura de Gauss, con n=1, 2, 3, 4:


» f1=inline('exp(x).*(x.^2+2*x)')
» I1=2*f1(0)
I1 = 0
» I2=f1(-0.5774)+f1(0.5774)
I2 = 2.1900
» Ie=exp(1)-exp(-1)
Ie = 2.3504
» err=abs(I2-Ie)
err = 0.1604
Ejemplo 15

89
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Utilizando la cuadratura de Gauss-Legendre (n=1, 2, 3, 4), estime la siguiente integral:

Solución:

» f2=inline('0.25*exp(-((x+5)/4)^2)')
» I1=2*f2(0)
I1 = 0.10480569357555
» I2=f2(-0.5774)+f2(0.5774)
I2 = 0.10940104496734
» es=abs(I2-I1)
es = 0.00459535139179
Ejemplo 16
Los Polinomios de Legendre se pueden obtener recursivamente con la siguiente formula:

Obteniéndose las siguientes formulas:

90
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Una función que genera el polinomio de Legendre para cualquier “n” será:

% legendre.m
function p=legendre(n)
if n==0
p=1;
elseif n==1
p=[1 0];
else
p=((2*n-1)*[legendre(n-1) 0]-(n-1)*[0 0 legendre(n-2)])/n;
end
end
» p=legendre(2)
p = 1.5000 0 -0.5000 % 1.5 x2 – 0.5
Ejemplo 17
Escriba una función que genera las tablas de la cuadratura de Gauss-Legendre a partir de cualquier
entero “n”, donde los valores “xi” son las raíces del polinomio de Legendre y los pesos “ci“se obtienen
con la siguiente relación:

% gauss_legendre.m
function [x,c]=gauss_legendre(n)
p=legendre(n);
x=roots(p);
c=2./(polyval(polyder(p),x)).^2./(1-x.^2);
end
» [x,c]=gauss_legendre(3)
x=
0
0.7746
-0.7746
91
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
c=
0.8889
0.5556
0.5556
Ejemplo 18
Escriba una función para obtener la integral mediante la cuadratura de Gauss-Legendre, con la
siguiente cabecera:
function I= int_gauss(f, a, b, n)

%int_gauss.m
function I=int_gauss(f,a,b,n)
[x,c]=gauss_legendre(n);
xx=feval(f,(b-a)/2*x+(b+a)/2);
I=(b-a)/2*sum(c.*xx);
end

» f1=inline('exp(x).*(x.^2+2*x)')
» I=int_gauss(f1,0,1,2)
I = 2.7085

92
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
7.4. PROBLEMAS PROPUESTOS
1.- Aproxime con la derivada central f‟(x)=(f(x+2h)-f(x-h))/(2h), y determine el valor del h crítico
para este caso
2.- Realiza las derivadas de las siguientes funciones (Con MATLAB Simbólico)
1
log(sen(2x)) , log( 1  1  x 2
1  x2

3.- Calcular la derivada de las funciones anteriores

4.- Aproxime:

Usando la regla del trapecio y h = 0.25, 0.5 y 1

5.- ¿Cuantos intervalos necesitamos para aproximar la integral?

por el método de Simpson con un error <0.001


6.- Escriba una función para la formula compuesta de Simpson 1/3:
% Formula compuesta de Simpson 1/3
% n : Numero total de particiones debe ser par
function I=sim13(fname,a,b,n)
if rem(n,2)==0
h=(b-a)/n;
x=a:h:b;
f=feval(fname,x);
I=h/3*(f(1)+4*sum(f(2:2:n))+ 2*sum(f(3:2:n-
1))+f(n+1));
else
disp('Lo siento n debe ser par!!!')
end
Utilice este programa para resolver el caso anterior.
end

93
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

CAP 8
Solución de Diferenciales Ordinarias

94
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

8. SOLUCION DE ECUACIONES DIFERENCIALES


8.1. Definición.-Una ecuación diferencial es una ecuación que envuelve derivadas de una o más
variables independientes.
Las Ecuaciones :

y  y  sen x
y  e x
d2y dy
 2 4  0
dx 2 dx
Son ecuaciones diferenciales por que envuelven derivadas de la variable independiente x.
Una ecuación diferencial que envuelve derivadas con respecto a una simple variable independiente
es llamada ECUACION DIFERENCIAL ORDINARIA o ODE(En ingles Ordinal Diferential Equation);

1
y 
y
En cambio, cuando envuelve derivadas con respecto a dos o más variables es llamada ecuación
diferencial parcial

 2V  2V
 2 2 V
x 2
y
8.2. ODE de Primer Orden Una ecuación de primer orden tiene la forma:
dy
 f ( x, y ) o M ( x, y )dx  N ( x, y )dy  0
dx

M N
Por ejemplo: (2xy+3x2)dx + x2dy = 0 Una ODE es exacta cuando se cumple que: 
y x
En el método de separación de variables se tiene la forma F(x) dx+G(y)dy=0. Por ejemplo:
dy 3x  xy 2 x(3  y 2 )
 
dx y  x 2 y y (1  x 2 )

 3  y2 
De donde
ydy

xdx
y la solución general ln  C
2 
3 y 2
1 x2  1  x 
8.3. El problema del valor inicial para las ODE de primer orden: Una ecuación de primer orden
dy
tiene la forma:  f ( x, y ) plantea una curva de solución y=y(x) en la región R, que pasa por el
dx
punto inicial (x0,y0) en R, tal que y(x0 ) = y0. cuando la ODE es separable, lineal o exacta, entonces

95
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
el problema del valor inicial tiene solución única. Que puede ser determinada por integración
indirecta.

 3  y2   3  y2 
ln    C ln 
2 
C
2 
 1  x   1  x 
8.4. Método de paso simple Sea la gráfica, donde se destaca que el valor Yk+1 es estimado como
y k 1  y k  h

xk xk+1

De acuerdo a esta ecuación, el valor de la pendiente  es usado para extrapolar a partir del valor yk
en una distancia h (llamada tamaño del paso). La aplicación de la fórmula es punto a punto o a un
paso; es decir
Nuevo valor = Valor antiguo + paso *pendiente
8.5. Método de la serie de Taylor.- El método de la serie de Taylor tiene una aplicabilidad general
y estándar; permitiendo ser comparado con otros métodos:
Sea una ecuación diferencial de la forma:
y   f ( x, y) con y( x0 )  y0

Reformulando el teorema de Taylor tenemos que

y (1) (k )h y ( 2 ) (k )h 2 y ( 3) ( k ) h 3 y ( n ) (k )h n
y k 1  yk     ..... 
1 2! 3! n!
 
donde y ( m )  P ( m1) f ( x, y ( x)) y P  f 
 x y 

x0  a, x n  b, h  (b  a)
n

Utilizando el matlab

96
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
function d=derivTaylor(x,y)
% Calculo de las cuatro primeras derivadas
% d es el vector de derivadas
d(1)=(x-y)/2;
d(2)=(2-x+y)/4;
d(3)=(-2+x-y)/8;
d(4)=(2-x+y)/16;
end

functionODETaylor (a,b,y0,n)
% ODE por Taylor 4
%Datos
%a =límite inferior
%b =límite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =número de segmentos
% Resultados
%y =es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1); x=zeros(n,1); d=zeros(4,1);
x(1) =a;
y(1)=y0;
fprintf(' x y \n');
fprintf ('=======================\n');
fprintf('%10.6f %10.6f\n',x(1),y(1));
for i=1:n-1
x(i+1)=a+h*i;
d=derivTaylor(x(i),y(i));
y(i+1)=y(i)+h*(d(1)+h*(d(2)/2+h*(d(3)/6+h*d(4)/24)));
fprintf('%10.6f %10.6f \n',x(i+1),y(i+1));
end
fprintf('=======================\n');

97
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Resultados de la ejecución del programa de Taylor para

y   ( x  y)
2 , y(0) = 1 .a = 0 , b = 2, n = 4 , h = 0.5
>>ODETaylor(0,2,1,4)
x y
=======================
0.000000 1.000000
0.500000 0.836426
1.000000 0.819628
1.500000 0.917142
2.000000 1.103683
=======================

8.6. Método de Euler.- Sea yk la aproximación a los valores y(xk) para puntos xk
x0 +kh, k= 1,2,3………..luego:
y0 = y(x0)
..
yk+1 = yk + hf(xk,yk)
xk+1 = xk + h
La ecuación diferencial

y   y( x 2  1) con y(0)  1
Si tomamos el tamaño de paso h=1, desde x=0 hasta x=2 hallamos:
x = 0, y = 1
y= 1 + 1*f(x, y) = 0
x=1, y=0
y= 0 + 1*f(x, y) = 0
El programa será mostrado pero envuelve errores muy grandes, por eso su uso es limitado. La
función será:

function z=fe(x,y)
z= y*(x.*x-1);
end

98
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

function euler(f,a,b,n,y0)
% Método de Euler
%Datos
%f =el nombre de la función como string
%a =limite inferior
%b =limite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =numero de segmentos
% Resultados
%y =es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('=======================\n');
fprintf('%10.6f %10.6f\n',x(1),y(1));
for i=1:n-1
x(i+1)=a+h*i;
y(i+1)=y(i)+h*feval(f,x(i),y(i));
fprintf('%10.6f %10.6f\n',x(i+1),y(i+1));
end
fprintf('=======================\n');
% grafico
plot(x,y)
grid on
title('plot de dy/dx=f()')
xlabel('x')
ylabel('y')
end

99
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

8.7. Euler aplicado a un péndulo simple.-


Un péndulo simple sujeto por una cuerda de Longitud L, gobernado por la ecuación :

d 2x wdw g
m 2  mg sen  y la ODE :   sen 
dt d L
function deriv = dwdfi(fi,w)
%Movimiento de un péndulo simple
global L;
g=32.2014;
%wLdw/dfi = -gsin(fi)
deriv=(-g/L)*sin(fi)/w;
end

100
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

function EulerDemo()
%Caso del pendulo simple
% Datos
%a =límite inferior (79), b =límite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =número de segmentos
% Resultados
%y =es el vector f(x)
global L;
n=28;
L=2.5;
a=79*pi/180;
b=65*pi/180;
y0=0.66488546;
h=(b-a)/n; n=n+1;
y=zeros(n,1); x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('=======================\n');
fprintf('%10.6f %10.6f\n',x(1)*180/pi,y(1));
for i=1:n-1
x(i+1)=a+h*i;
y(i+1)=y(i)+h*feval('dwdfi',x(i),y(i));
fprintf('%10.6f %10.6f\n',x(i+1)*180/pi,y(i+1));
end
fprintf('=======================\n');
% grafico
plot(x,y)
grid on
title('plot de un pendulo simple')
xlabel('fi(angulo)')
ylabel('w(rad/seg)')

101
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
RESULTADOS
Tenemos dos resultados
a) Los cálculos
b) El grafico.
Los cálculos

>>EulerDemo()
x y
=======================
79.000000 0.664885
78.500000 0.830837
78.000000 0.963411
77.500000 1.077535
77.000000 1.179378
76.500000 1.272243
76.000000 1.358153
75.500000 1.438457
75.000000 1.514110
74.500000 1.585818
74.000000 1.654121
73.500000 1.719443
73.000000 1.782123
72.500000 1.842440
72.000000 1.900625
71.500000 1.956871
71.000000 2.011343
70.500000 2.064184
70.000000 2.115515
69.500000 2.165444
69.000000 2.214065
68.500000 2.261461
68.000000 2.307707
67.500000 2.352868
67.000000 2.397005
66.000000 2.482414
65.500000 2.523779
65.000000 2.564307
=======================
102
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
El grafico

8.8. El método de Heun Utiliza el método Predictor Corrector

y  y0 
h
 f ( x0 , y ( x0 ))  f ( x1 , y1 ( x1 ))es una aproximación
2
Pero tenemos

y  y0 
h
 f ( x0 , y0 )  f ( x1 , y0  hf ( x0 , y0 ))
2
El proceso de Euler es usado como predicción, y la regla del trapezoide como de corrección.
Resumiendo el método de Heun es:
p k 1  y k  hf ( x k , y k )
x k 1  x k  h

y k 1  y k 
h
 f ( xk , y k )  f ( xk 1 , pk 1 )
2

103
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

function Heun(f,a,b,n,y0)
% Heun ODE
% Datos
% f = el nombre de la función como string
% a = limite inferior
% b = limite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = numero de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
p=zeros(n,1);
x(1)=a;
y(1)=y0;
p(1)=0;
fprintf(' x p y \n');
fprintf('==============================================\n');
fprintf('%10.6f %10.6f \n',x(1),y(1));
for i=1:n-1
p(i+1)=y(i)+h*feval(f,x(i),y(i));
x(i+1)=a+h*i;
y(i+1)=y(i)+0.5*h*(feval(f,x(i),y(i))+feval(f,x(i+1),p(i+1)));
fprintf('%10.6f%10.6f%10.6f\n',x(i+1),p(i+1),y(i+1));
end

Ejecución:

104
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

>> f=inline('y*(x*x-1)','x','y')

f=
Inline function:
f(x,y) = y*(x*x-1)

>>Heun(f,0,2,4,1)
x p y
==============================================
0.000000 1.000000
0.500000 0.500000 0.656250
1.000000 0.410156 0.533203
1.500000 0.533203 0.699829
2.000000 1.137222 1.771442

105
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
8.9. Método de Runge-Kutta.- Son los métodos más utilizados, son muy simples pues calculan yn+1 con yn

8.9.1. Runge-Kutta de orden 2.-Utilizan la técnica y n 1  y n  y n donde y n  x; donde  es


una pendiente promedio, basada en los coeficientes de Runge. Para RK a 2 etapas tenemos,
yn 1  yn  hk2
k1  f ( xn , yn )
h h
k2  f ( xn  , yn  k1 )
2 2

function [x, y]= RK2(f,a,b,n,y0)


% RUNGE KUTTA 2
% f = el nombre de la función como string
% a = limite inferior
% b = limite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = numero de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1); x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('==============================================\n');
fprintf('%10.6f%10.6f \n',x(1),y(1));
for i=1:n-1
k1=feval(f,x(i),y(i));
k2=feval(f,x(i)+h/2,y(i)+h*k1/2);
x(i+1)=a+h*i;
y(i+1)=y(i)+h*k2;
fprintf('%10.6f%10.6f\n',x(i+1),y(i+1));
end

106
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
>> f=inline('y*(x*x-1)')
f = Inline function:
f(x,y) = y*(x*x-1)
>> a=0;b=2;n=2;y0=1;
>>RK2(f,a,b,n,y0);
x y
==============================================
0.000000 1.000000
1.000000 0.625000
2.000000 1.406250

107
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
8.9.2. Runge-Kutta de orden 4.- Maneja una combinación mayor de pendientes, la forma
generalizada es la siguiente

y k 1  y k 
h
k1  2k 2  2k 3  k 4 ,
6
donde :
k1  f ( x k , y k )
h h
k 2  f ( x k  , y k  k1 )
2 2
h h
k 3  f ( xk  , y k  k 2 )
2 2
k 4  f ( x k  h, y k  hk 3 )
function [x, y]= RK4(f,a,b,n,y0)
% Datos
% f = el nombre de la función como string
% a = límite inferior
% b = límite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = número de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;n=n+1;y=zeros(n,1);x=zeros(n,1);
x(1)=a; y(1)=y0;
fprintf(' x y \n');
fprintf('==============================================\n');
fprintf('%10.6f%10.6f \n',x(1),y(1));
for i=1:n-1
k1=feval(f,x(i),y(i));
k2=feval(f,x(i)+h/2,y(i)+h*k1/2);
k3=feval(f,x(i)+h/2,y(i)+h*k2/2);
k4=feval(f,x(i)+h,y(i)+h*k3);
x(i+1)=a+h*i;
y(i+1)=y(i)+h*(k1+2*k2+2*k3+k4)/6;
fprintf('%10.6f%10.6f\n',x(i+1),y(i+1));
end

108
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

>> f=inline('4*exp(0.8*x)-0.5*y')

f=

Inline function:
f(x,y) = 4*exp(0.8*x)-0.5*y

>> a=0;b=2;n=4;y0=2;
>>RK4(f,a,b,n,y0);
x y
==============================================
0.000000 2.000000
0.500000 3.751699
1.000000 6.195042
1.500000 9.707772
2.000000 14.845106

109
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Ejemplo Aplicación 1
Considere el siguiente sistema eléctrico

La ecuación en este circuito es la siguiente:


𝑑𝑖 1
𝐿 + 𝑅𝑖 + ∫ 𝑖𝑑𝑡 = 𝑒(𝑡)
𝑑𝑡 𝐶
Como la carga está definida por:
Tenemos
𝑑2 𝑞 𝑑𝑞 1
𝐿 + 𝑅 + 𝑞 = 𝑒(𝑡)
𝑑𝑡 2 𝑑𝑡 𝐶
Determine el valor de la carga q en t ϵ [0 1] con h=0.1, para el caso R=1, L=0.5, C=1, e (t)=0.5
𝑞 ′′ + 2𝑞 ′ + 2𝑞 = 1, 𝑐𝑜𝑛⁡𝑞(0) = 0, 𝑞 ′ (0) = 0
Solución:
En una ecuación diferencial de segundo orden el primer paso es su transformación en un sistema de
dos ecuaciones de 1er. Orden. Por tal razón hacemos u1=q y
𝒖′𝟏 = 𝒖𝟐
𝒖′𝟐 = 𝟏 − 𝟐𝒖𝟏 − 𝟐𝒖𝟐
𝒖𝟏 (𝟎) = 𝟎
{ 𝒖𝟐 (𝟎) = 𝟎 }
En MATLAB

% fu.m
function [u_dot]=fu(t,u)
u1=u(1); u2=u(2);
f1=u2;
f2=1-2*u1 -2*u2;
u_dot=[f1 f2];

110
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

111
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

112
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
Ejemplo de aplicación 2
Considere el siguiente Problema de Valores de Contorno:

Considere una partición regular en el intervalo [0,1] con un espaciamiento h = 0.25.


Obtener una solución aproximada para el problema de valor frontera usando el método de las
diferencias centrales.
Solución:

N+1= (1-0)/h
N+1=4 N=3
i =1, 2,3
(-1 - h/2)=-1.125
(-1+h/2)=-0.875

Solución:

Funciones en MatLab

% p.m
function f=p(t)
f=1;
end

113
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
% q.m
function f=q(t)
f=0;
end

% r.m
function f=r(t)
f=t*(t-1);
end

% trisys.m
function X = trisys(A,D,C,B)
%---------------------------------------------------------
% Solucion del sistema tridiagonal
% Entradas
% A vector sub diagonal
% D vector diagonal
% C vector super diagonal
% B vector del lado derecho
% Salida
% X vector solucion
%---------------------------------------------------------
n = length(B);
for k = 2:n,
mult = A(k-1)/D(k-1);
D(k) = D(k) - mult*C(k-1);
B(k) = B(k) - mult*B(k-1);
end
X(n) = B(n)/D(n);
for k = (n-1):-1:1,
X(k) = (B(k) - C(k)*X(k+1))/D(k);
end

114
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
function [T,X] = findiff(p,q,r,a,b,alpha,beta,n)
% Solucion del problema de valor de frontera usando diferencias finitas
% x(t)‟‟ = p(t)x‟(t)+q(t)x(t)+r(t)
% x(a) = alpha, x(b) = beta
% Entradas
% p, q, r Nombres de las funciones
% a,b Limites del intervalo [a,b]
% alpha Valor frontera izquierdo …. beta Valor frontera derecho
% n numero de pasos
% Salida
% T Vector de abscisas X Vector de ordenadas
T = zeros(1,n+1); X = zeros(1,n-1);
Va = zeros(1,n-2); Vb = zeros(1,n-1);
Vc = zeros(1,n-2); Vd = zeros(1,n-1);
h = (b - a)/n;
for j=1:n-1,
Vt(j) = a + h*j;
end
for j=1:n-1,
Vb(j) = -h^2*feval(r,Vt(j));
end
Vb(1) = Vb(1) + (1 + h/2*feval(p,Vt(1)))*alpha;
Vb(n-1) = Vb(n-1) + (1 - h/2*feval(p,Vt(n-1)))*beta;
for j=1:n-1,
Vd(j) = 2 + h^2*feval(q,Vt(j));
end
for j=1:n-2,
Va(j) = -1 - h/2*feval(p,Vt(j+1));
end
for j=1:n-2,
Vc(j) = -1 + h/2*feval(p,Vt(j));
end
X = trisys(Va,Vd,Vc,Vb);
T = [a,Vt,b];
X = [alpha,X,beta];

115
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2

Ejecución

» [T, X] = findiff ('p', 'q', 'r', 0,1,0, 0,4)


T = 0 0.2500 0.5000 0.7500 1.0000
X = 0 0.0176 0.0269 0.0210 0

Método del disparo


El problema de valor frontera se reduce a uno de valor inicial, es un método de prueba y error donde
se tanteando la pendiente en el punto inicial.
% Disparo.m
% y"-y'-2y=0
% y(0)=0.1
% y(0.5)=0.283
% h=0.1
x0=0,y0=0.1,b=0.5,B=0.283
S0=(B-y0)/(b-x0)
y=rk4s('fu2',0,0.5,[0.1 S0],0.1)
ynS0=y(6,2)
plot(y(:,1),y(:,2)), grid, hold on
S1=S0+(B-ynS0)/(b-x0)
y=rk4s('fu2',0,0.5,[0.1 S1],0.1)
ynS1=y(6,2)
plot(y(:,1),y(:,2)), grid
S2=S0+(S1-S0)*(B-ynS0)/(ynS1-ynS0)
y=rk4s('fu2',0,0.5,[0.1 S2],0.1)
plot(y(:,1),y(:,2)), grid
err=abs(ynS1-B)
hold off
% x0 = 0
% y0 = 0.1000
% b = 0.5000
% B = 0.2830
% S0 = 0.3660
%y=
% 0 0.1000 0.3660
% 0.1000 0.1397 0.4295
116
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
% 0.2000 0.1864 0.5088
% 0.3000 0.2420 0.6071
% 0.4000 0.3086 0.7285
% 0.5000 0.3887 0.8780
%
% ynS0 = 0.3887
% S1 = 0.1547
%
%y=
% 0 0.1000 0.1547
% 0.1000 0.1174 0.1937
% 0.2000 0.1390 0.2409
% 0.3000 0.1659 0.2981
% 0.4000 0.1990 0.3677
% 0.5000 0.2399 0.4523
%
% ynS1 = 0.2399
% S2 = 0.2159
%
%y=
% 0 0.1000 0.2159
% 0.1000 0.1238 0.2620
% 0.2000 0.1527 0.3185
% 0.3000 0.1879 0.3876
% 0.4000 0.2308 0.4722
% 0.5000 0.2830 0.5756
% ynS1 = 0.2830
% err = 5.5511e-017

117
UNIVERSIDAD NACIONAL DE INGENIERIA 2015-2
8.10. PROBLEMAS PROPUESTOS
1.- Sea el problema de valor inicial.

Use el método de Taylor de orden 2 para determinar el valor aproximado de y(1), con tamaño de
paso h=0.5.
2.- Considere la ecuación diferencial

y   4ty   2 y 2  0
Con condiciones iniciales y (0) = 1 y y’ (0)=0 con h = 0.1, utilice el método de EULER
para aproximar y(0.2) e y’(0.2).
3.- Considere el problema de valor inicial

y   ( y  x  1) 2  2
Con y (0) =1
Obtener una aproximación de y (0.1) con Runge Kutta de orden 2 con h=0.1
4.- Un sistema dinámico obedece a la siguiente ecuación diferencial ordinaria
g
  0
l
 (0)  0rad .
(0)  0.25rad seg
Si g=9.81 m/ seg2 , y i = 0.5 mts, estime  (0.15) usando Euler h=0.05.
5.- Resolver el problema 4 por Heun.

118

You might also like