Metodos Numericos Notas Felix PDF
Metodos Numericos Notas Felix PDF
Metodos Numericos Notas Felix PDF
3 de junio de 2017
Índice general
Introducción 1
1.1. Introducción (Variables y Operadores) . . . . . . . . . . . . . . . . . . . . . 1
1.1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2. Ayuda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1.3. Tipos de Datos y Variables . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.4. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.5. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2. Instrucciones Secuenciales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3. Instrucciones Condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4. Instrucciones de Repetición . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.1. Ciclos for/end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.3. Ciclos while/end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.4. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.5. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.6. Ejemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.7. Ejemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5. Manejo de Matrices y Vectores . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5.1. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.5.2. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.5.3. Arreglos Bidimensionales . . . . . . . . . . . . . . . . . . . . . . . . 16
1.6. Estructuras de Programa y Funciones . . . . . . . . . . . . . . . . . . . . . 19
1.6.1. Funciones que devuelven una sola variable . . . . . . . . . . . . . . . 19
1.6.2. Funciones que devuelven mas de una variable . . . . . . . . . . . . . 19
1.6.3. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.6.4. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.6.5. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Modelos 25
2.1. Modelos y Computadoras . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
ÍNDICE GENERAL
SE No Lineales 33
3.1. Método Gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.2. Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2. Método de Bisección . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3. Método de la falsa posición (Regula Falsi) . . . . . . . . . . . . . . . . . . . 36
3.3.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.4. Método de iteración de punto fijo . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4.2. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.5. Método de Newton-Raphson . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.5.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.6. Aplicaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.6.1. Cálculo de la Raiz Cuadrada . . . . . . . . . . . . . . . . . . . . . . 41
3.6.2. Solución de un circuito con un diodo . . . . . . . . . . . . . . . . . . 43
3.6.3. Solución del problema de flujos de Pontencia . . . . . . . . . . . . . 46
3.7. Evaluación de Polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.7.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.7.2. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.7.3. Cálculo de derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.7.4. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.7.5. Calculo de la integral . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.7.6. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.7.7. Ejemplo cálculo de raı́ces de un polinomio . . . . . . . . . . . . . . . 53
3.8. Deflación de polinomios y División de Polinomios . . . . . . . . . . . . . . . 55
3.8.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.8.2. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.8.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.8.4. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.9. Solución de un polinomio de orden 2 en la forma general . . . . . . . . . . . 62
3.10. Método de Bairstow para la solución de polinomios . . . . . . . . . . . . . 63
3.10.1. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
ÍNDICE GENERAL
3.10.2. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.10.3. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Sistemas de Ecuaciones 73
4.1. Solución de Sistemas lineales . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.1.1. Método iterativo de Jacobi . . . . . . . . . . . . . . . . . . . . . . . 73
4.1.2. Algoritmo iterativo de Gauss-Seidel . . . . . . . . . . . . . . . . . . 75
4.1.3. Ejemplo matrices dispersas . . . . . . . . . . . . . . . . . . . . . . . 77
4.1.4. Eliminación Gaussiana . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.1.5. Gauss-Jordan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.2. Métodos para sistemas no lineales . . . . . . . . . . . . . . . . . . . . . . . . 100
4.2.1. Método de iteración de punto fijo para sistemas . . . . . . . . . . . . 100
4.2.2. Método de Newton-Raphson para sistemas . . . . . . . . . . . . . . 105
4.2.3. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Optimización 115
5.1. Optimización no-restringida. Método de búsqueda de la sección dorada . . . 115
5.1.1. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.1.2. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.2. Optimización no-restringida. Método de Newton . . . . . . . . . . . . . . . 118
5.2.1. Método de Newton en una dimensión . . . . . . . . . . . . . . . . . 118
5.2.2. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.2.3. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
5.2.4. Método de Newton en N dimensiones . . . . . . . . . . . . . . . . . 121
5.2.5. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
5.2.6. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
5.2.7. Propiedades del Método de Newton . . . . . . . . . . . . . . . . . . 127
5.2.8. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.2.9. Ejemplo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.2.10. Problemas de convergencia del Método de Newton . . . . . . . . . . 130
5.2.11. Ejemplo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
5.2.12. Método de Newton Modificado . . . . . . . . . . . . . . . . . . . . . 131
5.3. Metodo Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.3.1. Forma estándar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.3.2. Método Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
5.3.3. Ejemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
5.3.4. Ejemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
5.3.5. Ejemplo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Tareas 201
11.1. Tarea 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
11.2. Tarea 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
11.3. Tarea 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.4. Tarea 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.5. Tarea 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.6. Tarea 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.7. Tarea 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.8. Tarea 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.9. Tarea 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.10.Tarea 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
11.11.Tarea 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
11.12.Tarea 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Introducción a la Programación en Matlab
1.1.1. Introducción
Matlab puede considerarse como un lenguaje de programación tal como C, Fortran, Java,
etc. Algunas de las caracterı́sticas de Matlab son:
La programación es mucho mas sencilla.
Hay continuidad entre valores enteros, reales y complejos.
La amplitud del intervalo y la exactitud de los números es mayor.
Cuenta con una biblioteca matemática amplia.
Abundantes herramientas gráficas, incluidas funciones de interfaz gráfica con el usua-
rio.
Capacidad de vincularse con los lenguajes de programación tradicionales.
Transportabilidad de los programas.
Algunas de sus desventajas son:
Necesita de muchos recursos de sistema como son Memoria, tarjeta de videos, etc.
para funcionar correctamente.
El tiempo de ejecución es lento.
No genera código ejecutable.
Es caro.
En una estación de trabajo UNIX, MATLAB puede abrirse tecleando
¿matlab
1
2 INTRODUCCIÓN
En el caso de sistemas LINUX, existe una versión similar al MATLAB , llamado OCTAVE,
el cual tiene las mismas funciones y desempeño que el MATLAB. En este caso para iniciar
la sesión se da:
¿octave
En Macintosh o Windows, haga clic en el icono de MATLAB.
1.1.2. Ayuda
Si no entiende el significado de un comando, teclee help y el nombre del comando que desea
revisar. Este comando desplegara información concisa respecto que será de utilidad para
el usuario. Ası́ por ejemplo cuando se da el comando
)) help help
Se despliega en la pantalla.
HELP On-line help, display text at command line. HELP, by itself, lists all primary help
topics. Each primary topic corresponds to a directory name on the MATLABPATH.
”HELP TOPIC”gives help on the specified topic. The topic can be a command name, a
directory name, or a MATLABPATH relative partial pathname (see HELP PARTIAL-
PATH). If it is a command name, HELP displays information on that command. If it is
a directory name, HELP displays the Table-Of-Contents for the specified directory. For
example, ”help general.and ”help matlab/general”both list the Table-Of-Contents for the
directory toolbox/matlab/general.
HELP FUN displays the help for the function FUN.
T = HELP(’topic’) returns the help text in a \ n separated string.
LOOKFOR XYZ looks for the string XYZ in the first comment line of the HELP text in
all M-files found on the MATLABPATH. For all files in which a match occurs, LOOKFOR
displays the matching lines.
MORE ON causes HELP to pause between screenfuls if the help text runs to several
screens.
In the online help, keywords are capitalized to make them stand out. Always type com-
mands in lowercase since all command and function names are actually in lowercase.
For tips on creating help for your m-files ’type help.m’.
See also LOOKFOR, WHAT, WHICH, DIR, MORE.
1.1. INTRODUCCIÓN (VARIABLES Y OPERADORES) 3
El comando what (Qué) muestra una lista de archivos M, MAT y MEX presentes en
el directorio de trabajo. Otra manera de realizar esta operación es utilizar el comando
dir.
El comando who (Quien) lista las variables utilizadas en el espacio de trabajo actual.
No es necesario declarar los nombres de la variables ni sus tipos. Esto se debe a que
los nombres de la variables en Matlab no son diferentes para los números enteros, reales
y complejos. Sin embargo esto da lugar a conflictos cuando se utilizan los nombres de
variables de palabras reservadas para:
2. nombres de funciones.
Trigonométricas
4 INTRODUCCIÓN
Exponencial.
Complejos.
1.1. INTRODUCCIÓN (VARIABLES Y OPERADORES) 5
Redondeo y residuos.
3. nombres de comandos.
Comandos
1.1.4. Ejemplo
clear;
r = 2
vol = (4/3)*pi*r^3
6 INTRODUCCIÓN
1.1.5. Operadores
Los operadores aritméticos como +, -, *, / son los mismos que en los lenguajes tradicionales
como C, Java, Fortran, etc., ası́ como la precedencia de estos.
Operador Simbolo
suma +
resta -
multiplicación *
división /
reciproco \
Un operador no convencional es el reciproco
clear;
c = 3 \ 1
Los operadores condicionales que existen en Matlab son:
Operador Simbolo
Mayor que >
Menor que <
Mayor igual >=
Menor igual <=
Igual a ==
Diferente de =
Los cuales son utilizados para hacer condicionales con la sentencia if
clear;
r = -2
if r > 0, (4/3)*pi*r\^3
end
Note que todas las sentencias if deben ir acompañadas por un end.
Los operadores lógicos and y or se denotan con & y k
g = 5
if g>3 | g <0, a = 6
end
y se puede hacer agrupamiento con los operadores & y k
clear;
a = 2
b = 3
1.2. INSTRUCCIONES SECUENCIALES 7
c = 5
if((a==2 | b==3) & c < 5) g=1; end;
Para hacer condicionales se utiliza la sentencia if, la cual, siempre debe ir terminada con
la sentencia end
r = -2
if r > 0, (4/3)*pi*r^3
end
Los enunciados lógicos and y or se denotan con & y k, pueden ser utilizados para imple-
mentar condicionales de la manera siguiente.
clear;
g = 5
if g>3 | g <0, a = 6
end
pause;
además los operadores & y k se puede agrupar como
clear;
a = 2
b = 3
c = 5
pause;
Las condicionales if se pueden utilizar con else o elseif
clear;
r = 2;
if r > 3 b = 1;
elseif r == 3 b = 2;
8 INTRODUCCIÓN
else b = 0;
end;
Ver código ejem001.m
En Matlab existen dos maneras de implementar ciclos. La primera con los comandos for/end
y la segundo con los comandos while/end, de manera muy similar a los lenguajes de alto
nivel.
end;
El siguiente conjunto de instrucciones realiza una cuenta de 100 a 80 con decrementos de
0.5.
for x=100:-0.5: 80
end;
en el caso de decrementos o incrementos unitarios, se puede omitir el valor del incremen-
to.
1.4. INSTRUCCIONES DE REPETICIÓN 9
1.4.2. Ejemplo 1
x = 1;
while x <= 100
x
x = x + 1;
end
Ver ejemplo while.m
El ejemplo para desplegar el volumen de una esfera con radios de 1, 2, 3, 4 y 5 queda.
r = 0;
while r<5
r = r+1;
vol = (4/3)*pi*r^3;
disp([r, vol])
end;
otro ejemplo interesante es:
clear;
r = 0
while r<10
r = input(’Teclee el radio (o -1 para terminar): ’);
if r< 0, break, end
vol = (4/3)*pi*r*3;
fprintf(’volumen = \%7.3f\n’, vol)
end
Ver esferas while.m
1.4.4. Ejemplo 2
Hacer un programa que permita imprimir un triángulo rectángulo formado por asteris-
cos.
% Codigo para imprimir un triangulo
fprintf(’\ntriangulo\n\n’)
for k=1:7
for l=1:k
fprintf(’*’)
end;
1.4. INSTRUCCIONES DE REPETICIÓN 11
fprintf(’\n’)
end
Ver triangulo.m
1.4.5. Ejemplo 3
fprintf(’\nrectangulo\n\n’)
for k=1:7
for l=1:6
fprintf(’*’)
end;
fprintf(’\n’)
end
Ver rectangulo.m
1.4.6. Ejemplo 4
for i=1:a
clear cad2 cad1
num_ast=2*i-1;
num_esp=n-i;
cad1(1:num_esp)=’ ’;
cad2(1:num_ast)=’*’;
fprintf(’\%s\%s\n’,cad1,cad2)
end
12 INTRODUCCIÓN
for i=1:t
fprintf(’\%s\%s\n’,cad1,cad2)
end
Ver pino.m
1.4.7. Ejemplo 5
Ver pascal.m
1.5. MANEJO DE MATRICES Y VECTORES 13
x
x(3)
Otra forma de escribir un arreglo es
clear;
x = 2: -0.4: -2
pause;
Podemos definir arreglos en fila o columna
clear;
x = [1, 2, 3, 4]
y = [4, 3, 2, 1]
14 INTRODUCCIÓN
suma = x + y
resta = x - y
mult = x .* y
div = x ./ y
Las operaciones de suma y resta son iguales que para el álgebra lineal. En cambio .* y ./
son operadores nombrados para la división de arreglos. Si se omite el punto el significado
es diferente lo cual es equivalente a
clear;
x = [1, 2, 3, 4]
y = [4, 3, 2, 1]
x = [2, 3]
x = [x, 4]
en el caso de arreglos columna
clear;
y = [2, 3]’
y = [y; 4]
1.5. MANEJO DE MATRICES Y VECTORES 15
y = [1,2,3,4,5,6,7,8,9]
w = y(3:6)
para obtener la longitud de un arreglo se utiliza
clear;
y = [1,2,3,4,5,6,7,8,9]
length(y)
La variables de cadena también puede tener caracteres
clear;
v = ’Hola Mundo’
v = ’Hola Mundo’
v = v’
1.5.1. Ejemplo 1
1.5.2. Ejemplo 2
m(:,1)
m(:,2)
m(:,3)
o también renglones
m(1,:)
m(2,:)
m(3,:)
podemos realizar operaciones de +. -, * y / con matrices
a = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9]
b = [0.3, 0.4, 1.3; 0.6, -0.7, 1.0; -2.0, 1.8, 9]
suma = a + b
resta = a - b
mult = a .* b
div = a ./ b
lo cual es equivalente a
a = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9]
b = [0.3, 0.4, 1.3; 0.6, -0.7, 1.0; -2.0, 1.8, 9]
for i=1:3
for j=1:3
suma(i,j) = a(i,j) + b(i,j);
end
end
%suma
for i=1:3
for j=1:3
resta(i,j) = a(i,j) - b(i,j);
end
end
%resta
for i=1:3
for j=1:3
mult(i,j) = a(i,j) * b(i,j);
18 INTRODUCCIÓN
end
end
%multiplicación
for i=1:3
for j=1:3
div(i,j) = a(i,j) / b(i,j);
end
end
%división
pause;
también podemos utilizar el operador de potenciación en arreglos
clear;
g = a .^2
pause;
el cual es equivalente
a = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9]
for i=1:3
for j=1:3
g(i,j) = a(i,j)^2;
end
end
Ver arreglos 2d.m
Algebra de Matrices
Cuando queremos realizar las operaciones del álgebra lineal de suma, resta, multiplicación
y división hacemos
la suma y resta son iguales pero la multiplicación cambia
A = [0.1, 0.2, 0.3; 0.4, 0.5, 0.6; 0.7, 0.8, 0.9]
1.6. ESTRUCTURAS DE PROGRAMA Y FUNCIONES 19
x = [1, 2, 3]’
b = A*x
para la división tendremos
A = [1, 4; 3, 5]
x = [2, 3]’
b = A\x
Las funciones en MATLAB, que se guardan como archivos independientes, equivalen a las
subrutinas y funciones de otros lenguajes.
Una función puede devolver más de una variable y la sintaxis para escribir esta función
es
function [Y1, Y2, ..., Yn ] = fun_regresa_varias(X)
...
...
...
20 INTRODUCCIÓN
Y1 = ....
Y2 = ....
...
...
Supongamos que dado un conjunto de datos queremos realizar una función que devuelva la
media y la desviación estándar. Primero escribimos un archivo llamado fun02.m, que tenga
las siguientes instrucciones.
[m d] = fun02(x)
y la ejecución regresa.
m =
d =
0.5774
Note que la función recibe dos argumentos a los que llamamos m y d. De hacer el llamado
de la función sin poner estos dos, no se genera error alguno pero solo se imprime el primer
parámetro que devuelve la función.
fun02(x)
ans =
2
1.6. ESTRUCTURAS DE PROGRAMA Y FUNCIONES 21
1.6.3. Ejemplo 1
Se tiene un circuito eléctrico formado por una fuente de voltaje variable en el tiempo
v(t) = 10cos(20t), una resistencia R = 5 y un diodo conectados en serie tal como se
muestra en la figura 3.7.
Para este circuito hacer
Escribir la función que modela el circuito,
Escribir el código para resolver el problema y
Graficar la corriente como función del tiempo
if vt > 0.7
vd = 0.7;
else
vd = vt;
end
it = (vt - vd)/R;
end
Dado que tenemos un operador condicional, no es posible hacer la sectorización. Es este caso
utilizamos la función arrayfun de matlab tal como se muestra en el siguiente código.
22 INTRODUCCIÓN
t = [0:0.01:2]; % tiempo
vt = 10*cos(20*t); % Voltaje variante en el tiempo
it = arrayfun(@diodo, vt); % Calculo de la corriente
xlabel(’t (seg.)’);
ylabel(’v(t) y i(t)’);
title (’Solución de un circuito con Diodo’);
La Figura 1.2 muestra la solución encontrada en función del tiempo
2
v(t) y i(t)
−2
−4
−6
−8
−10
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
t (seg.)
1.6.4. Ejemplo 2
f (xk )
xk+1 = xk −
f 0 (xk )
for k = 1: 100
1.6. ESTRUCTURAS DE PROGRAMA Y FUNCIONES 23
xnva = x0 - f(x0)/df(x0);
x0 = xnva;
fprintf(’Iteracion \%d f(\%f) = \%f\n’, k, x0, f(x0));
if(abs(f(x0)) < 0.00001) break; end;
end;
z =x0;
function y = f(x)
y = x-cos(x);
function dy = df(x)
dy = 1+sin(x);
1.6.5. Ejemplo 3
function b = biseccion(x0,x1)
n=x0:0.1:x1;
plot(n,f(n))
xlabel(’eje x’);
ylabel(’eje y’);
hold on;
fmin = min(f(n));
fmax = max(f(n));
for S = 1:100
mau=((x1+x0)/2);
a=f(x0);
b=f(x1);
fmau=f(mau);
fprintf(’Iteracion %d f(mau)(%f) = %f\n’, S, mau, f(mau));
function y = f(x)
y = x-cos(x);
Modelos, computadoras y errores
En matemáticas, una serie de Taylor es una representación de una función como una infinita
suma de términos. Estos términos se calculan a partir de las derivadas de la función para un
determinado valor de la variable (respecto de la cual se deriva), lo que involucra un punto
especı́fico sobre la función. Si esta serie está centrada sobre el punto cero, se le denomina
serie de McLaurin.
0 1 00 1 000 1
f (x) = f (a)+f (a)(x−a)+ f (a)(x−a)2 + f (a)(x−a)3 +· · ·+ f n (a)(x−a)n (2.1)
2! 3! n!
N
X f n (a)
f (x) = (x − a)n
n!
n=0
dn f (x)
donde f 0 (a) = f (x)|x=a y f n (a) = dxn x=a
25
26 MODELOS
0 1 00 (i) 2 1 000 1
f (x(i+1) ) = f (x(i) ) + f (x(i) )h + f (x )h + f (x(i) )h3 + · · · + f n (x(i) )hn (2.2)
2! 3! n!
2.2.2. Ejemplo 1
Dada la función f (x) = ex hacer la implementación utilizando la serie de Taylor dada por
(2.1) considerando que a = 0.
f 0 (x) = f (x) = ex
df (x)
f 1 (x) = = ex
dx
d2 f (x)
f 2 (x) = = ex
dx2
d3 f (x)
f 3 (x) = = ex
dx3
d4 f (x)
f 4 (x) = = ex
dx4
0 1 00 1 000 1
ex = f (a) + f (a)(x − a) +
f (a)(x − a)2 + f (a)(x − a)3 + · · · + f n (a)
2! 3! n!
1 1 1
e = 1 + 1 × (x − 0) + × 1 × (x − 0) + × 1 × (x − 0) + × 1 × (x − 0)4 + · · ·
x 2 3
2! 3! 4!
2.2. SERIE DE TAYLOR Y ERRORES DE TRUNCAMIENTO 27
x2 x3 x4 x5 x6 x7
ex = 1 + x + + + + + + + ···
2! 3! 4! 5! 6! 7!
N
x
X xk
e =
k!
k=0
2.2.3. Ejemplo 2
Dada la función f (x) = cos(x) hacer la implementación utilizando la serie de Taylor dada
por (2.1) considerando que a = 0.
Sustituyendo para x = a = 0
28 MODELOS
x2 x4 x6 x8 x10
cos(x) = 1 − + − + −
2! 4! 6! 8! 10!
N
X (−1)k x2k
cos(x) =
(2k)!
k=0
function y = coseno(x)
y =0;
N=80
for k= 0:N
y = y + (-1)^k*x.^(2*k)/factorial(2*k);
end;
end
Ver coseno.m
En la Figura 2.3 podemos ver la gráfica generada por nuestra función coseno marcada
con +, sobre impuesta a la gráfica de la función cos(x) de Matlab. Note la cálida de la
aproximación.
2.2. SERIE DE TAYLOR Y ERRORES DE TRUNCAMIENTO 29
2.2.4. Ejemplo 3
Utilizar los términos de la serie de Taylor para n = 0 hasta 6, para aproximar la función
f (x) = cos(x) en x(i+1) = π/3 y como condición inicial sus derivadas en x(i) = π/4.
Para nuestra implementación tenemos que el incremento h = π/3 − π/4 = π/12. La apro-
ximación en serie de Taylor utilizando (2.2) es:
0 1 00 (i) 2 1 000 1
f (x(i+1) ) = f (x(i) ) + f (x(i) )h + f (x )h + f (x(i) )h3 + · · · + f n (x(i) )hn
2! 3! n!
π 0
π π 1 00 π π 2 1 000 π π 3 1 π π n
f (x(i+1) ) = f +f + f + f +· · ·+ f n
4 4 12 2! 4 12 3! 4 12 n! 4 12
N
(i+1)
X 1 n π π n
f (x )= f
n! 4 12
n=0
30 MODELOS
N =0
f (x(i+1) ) = 0.7071
N =1
π
f (x(i+1) ) = 0.7071 + (−0.7071) × = 0.5219
12
N =2
(i+1) π 1 π 2
f (x ) = 0.7071 + (−0.7071) × + × (−0.7071) = 0.4977
12 2 12
2.2.5. Ejemplo 4
x3 x5 x7 x9
sen(x) = x − + − + + ···
3! 5! 7! 9!
N
X (−1)k x2k+1
sen(x) =
(2k + 1)!
k=0
function y = seno(x)
y = 0;
N = 40;
for k= 0:N
y = y + (-1)^k*x.^(2*k+1)/factorial(2*k+1);
end
end
ver seno.m
La serie de Taylor es muy útil para hacer la estimación de errores de truncamiento. Esta
estimación ya la realizamos en los ejemplos anteriores. Recordemos que la serie de Taylor
la podemos representar como:
0 1 00 1
v(xi+1 ) = v(xi ) + v (xi )(xi+ − xi ) + v (xi )(xi+ − xi )2 + · · · + v n (xi )(xi+ − xi )n
2! n!
Ahora, truncando la serie después del término con la primera derivada, se obtiene:
0
v(xi+1 ) = v(xi ) + v (xi )(xi+ − xi ) + R1
0 v(xi+1 ) − v(xi ) R1
v (xi ) = −
(xi+ − xi ) (xi+ − xi )
3.1.1. Ejemplo
Utilice el método gráfico para observar algunas de las raı́ces de la función f (x) = sen10x +
cos3x, en el intervalo [0, 5]
1.5
0.5
f(x)
−0.5
−1
−1.5
−2
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x
33
34 SE NO LINEALES
En la Figura 3.4 se muestran los cruces por cero de la función en el intervalo dado.
3.1.2. Implementación
La implementación en Matlab es
function Metodo_Grafico(funcion, x)
f = funcion;
y = f(x);
plot(x, y);
xlabel(’x’);
ylabel(’f(x)’)
grid on
Ver Metodo Grafico.m. La implementación de la función
function y = f1(x)
y = sin (10*x) + cos(3*x);
La corrida del método es
Metodo_Grafico(@f1, 0:0.01:5)
Para este método debemos considerar una función continua dentro de un intervalo [a, b] tal
que f (a) tenga diferente signo f (a) ∗ f (b) < 0.
El proceso de decisión para encontrar la raı́z consiste en dividir el intervalo [inicio, f in] a
la mitad mitad = (inicio + f in)/2 y luego analizar las tres posibilidades que se pueden
dar.
1. Si f (inicio) y f (mitad) tienen signos opuestos, entonces hay un cero entre [inicio, mitad].
2. Si f (mitad) y f (f in) tienen signos opuestos, entonces, hay un cero en [mitad, f in].
3. Si f (mitad) es igual a cero, entonces mitad es un cero
La implementación en Matlab es:
function r = Biseccion(f, inicio, fin)
mitad = 0;
while abs((fin - inicio)/fin) > 0.0001
mitad = (fin+inicio)/2.0;
3.2. MÉTODO DE BISECCIÓN 35
if(f(mitad) == 0)
r = mitad;
return;
end;
if f(inicio)*f(mitad) < 0
fin = mitad;
else
inicio = mitad;
end;
end;
r= mitad;
3.2.1. Ejemplo
Biseccion(@f2, 0, 1)
36 SE NO LINEALES
p1 = [a, f (a)]
p2 = [b, f (b)]
function r = Regula_Falsi(f, a, b)
if(f(c) == 0)
r = c;
return;
end;
if f(a)*f(c) < 0
b = c;
else
a = c;
end;
end;
r= c;
Regula_Falsi(@f2, 0, 1)
3.3.1. Ejemplo
Calcular los ceros de la función f (x) = x − cos(x) utilizando el algoritmo de regula falsi en
el intervalo [0, 1].
38 SE NO LINEALES
Los métodos de punto fijo son métodos que predicen la raı́z de la ecuación a partir de una
formula dada. La formula puede ser desarrollada por una sustitución sucesiva al rearreglar
la ecuación f (x) = 0 de tal modo que x quede del lado izquierdo de la ecuación
f (x) ≡ x − g(x) = 0
Lo que es igual a
x = g(x)
x2 − 2x + 3 = 0
x2 + 3
x=
2
x = g(x)
x = sen(x) + x
Las iteraciones del método dado un punto inicial x0 , se pueden llevar a cabo calculando
xk+1
xk+1 = g(xk )
3.4. MÉTODO DE ITERACIÓN DE PUNTO FIJO 39
while 1
x2 = g(x1)
error = abs((x2-x1)/x2);
if(error < 0.0001) break
else x1 = x2;
end;
end;
r = x2;
3.4.1. Ejemplo
Utilizando la iteración de punto fijo calcular las raı́ces f (x) = e−x − x, para un valor inicial
x0 = 0.
De acuerdo con lo revisado la función g(x) = e−x y las iteraciones hasta convergencia
son:
k xk error(xk )
1 1.0000 1.0000
2 0.3679 1.7183
3 0.6922 0.4685
4 0.5005 0.3831
5 0.6062 0.1745
6 0.5454 0.1116
7 0.5796 0.0590
8 0.5601 0.0348
9 0.5711 0.0193
.. .. ..
. . .
19 0.5672 6.7008e-05
Para hacer la ejecución correr:
Punto_Fijo(@g1, 0)
con
function y = g4(x)
y = exp(-x);
40 SE NO LINEALES
3.4.2. Ejemplo
x = sen(10x) + cos(3x) + x
La implementación en Matlab es
function y = g1(x)
y = sin(10*x)+cos(3*x) +x;
Para ejecutar hacer:
Punto_Fijo(@g1, 0)
Dada una función f (x) : R → R continua, con un valor inicial x0 cerca de una raı́z x∗ y si la
derivada f 0 (x) existe, entonces puede utilizarse esta información para desarrollar algoritmos
que produzcan sucesiones xk que converjan a x∗ más rápidamente que los algoritmos como
los vistos en la secciones anteriores.
El método considera que dada una función f (x), podemos hacer una representación lineal
utilizando la serie de Taylor. Ası́ la representación lineal en Serie de Taylor es:
f (xk )
xk+1 = xk −
f 0 (xk )
while 1
x2 = x1 - f(x1)/df(x1)
if abs((x2-x1)/x2) < 0.0001 break;
else x1 = x2;
end;
end;
r = x2;
3.5.1. Ejemplo
3.6. Aplicaciones
2
√ caso nuestra función a resolver es f (x) = x − A. La solución cuando f (x) = 0
Para este
es x = A. Para nuestro calculo hacemos
f (x) = x2 − A
f 0 (x) = 2x
k xk
0 2.0000
1 2.2500
2 2.2361
3 2.2361
4 2.2361
5 2.2361
6 2.2361
7 2.2361
8 2.2361
9 2.2361
10 2.2361
Newton_Raphson(@f3, @df3, 2)
Si para este ejemplo ponemos sustituimos en la formulación original los valores de la deri-
vada y de la función tenemos:
3.6. APLICACIONES 43
f (xk ) x2k − A
xk+1 = xk − = x k −
f 0 (xk ) 2xk
x2k + A
xk+1 =
2xk
Consideremos un circuito de corriente alterna formado por una fuente, una resistencia y
un diodo tal como se muestra en la figura 3.7.
La ecuación que modela al diodo esta dada por (3.3) y la curva se muestra en la figura
3.8:
155
x 10
12
10
6
Id
0
5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 10
Vd
log(Id (t)/Is + 1) ∗ Vt Si Id (t) ≥ 0
Vd (t) =
V sino Id(t) < 0
%tiempo de evaluación
t = [0:0.001:0.1];
%Voltaje en función del tiempo
v = Vmax*sin(377*t);
3.6. APLICACIONES 45
for k = 1:length(t)
I(k) = ReglaFalsa(@Circuito_Diodo, -Vmax/R, Vmax/R, [v(k), R]);
end
plot(t, v, t, I);
title(’Solución de un circuito con Diodo’);
xlabel(’tiempo s’);
legend(’Voltaje’, ’Corriente’);
end
function di = Circuito_Diodo(I, p)
V = p(1);
R = p(2);
di = V - R*I - Vd(V, I);
end
function r = ReglaFalsa(f, a, b, p)
%ReglaFalsa(f, a, b, p)
% f : función a evaluar
% a : inicio del intervalo
% b : fin frl intervalo
% p : parametros
while 1
c = a - f(a,p)*(b-a)/(f(b,p) - f(a,p));
if(abs(f(c,p)) <= 1e-06)
break;
end;
if f(a,p)*f(c,p) < 0
b = c;
else
a = c;
end;
end;
r = c;
end
function V = Vd(Vf, I)
% V = Vd(Vf, I)
46 SE NO LINEALES
% Vf voltaje de la Fuente
% I Corriente en el circuito
Is = 1e-12;
Vt = 25.85e-3;
if I>=0
V = log(I/Is+1)*Vt;
else
V = Vf;
end
end
−2
−4
−6
−8
−10
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1
tiempo s
Se tiene un circuito formado por tres elementos: una fuente de voltaje V , una resistencia R
y una carga PL en una combinación en serie. Dados los valores V = 10 volts, R = 2 ohms
y PL = 12 Wats, calcular la corriente que circula por el circuito.
V − Ri − VL = 0
V i − Ri2 − PL = 0
V = 20; % Volts
R = 2; % ohms
P = 12; % Watts
function d = fp(I, p)
V = p(1);
R = p(2);
PL = p(3);
d = V*I - R*I*I - PL;
end
end;
r = x2;
end
La solución obtenida de la corrida es:
>> Simula_Flujos_Potencia
La solución es 3.000000
f3 (x) = a0 + a1 x + a2 x2 + a33
En este caso los coeficientes del polinomio los podemos poner en un vector de datos dado co-
mo a = [a0, a1, a2, a3], y realizar la evaluación polinomial utilizando ciclos. Adicionalmente
necesitamos de una función que nos permita calcular la potencias de x.
Manipulando el polinomio, podemos dar una forma eficiente de realizar la evaluación. Ası́
el mismo polinomio, lo podemos representar como:
n = length(a);
p = 0.0;
for i=n:-1: 1
p = p.*x + a(i);
end
3.7. EVALUACIÓN DE POLINOMIOS 49
y = p;
3.7.1. Ejemplo
3.7.2. Ejemplo
Hacer la evaluación del polinomio f5 (x) = x5 − 3.5x4 + 2.75x3 + 2.125x2 − 3.875x + 1.25
en x = 2.5
i p = p ∗ x + ai p=0
5 p = 0.000000 ∗ 2.500000 + 1.000000 1.000000
4 p = 1.000000 ∗ 2.500000 − 3.500000 -1.000000
3 p = −1.000000 ∗ 2.500000 + 2.750000 0.250000
2 p = 0.250000 ∗ 2.500000 + 2.125000 2.750000
1 p = 2.750000 ∗ 2.500000 − 3.875000 3.000000
0 p = 3.000000 ∗ 2.500000 + 1.250000 8.750000
Cuando se buscan los ceros de una función, como es el caso del método de Newton, es
necesario no solo hacer la evaluación del polinomio sino calcular también su derivada. En
este caso la derivada de cualquier polinomio la podemos calcular como:
a = [a0 , a1 , a2 , a3 , a4 , · · · , an−1 , an ]
Con esto tenemos que dado a los coeficientes de del polinomio de derivadas pueden ser cal-
culados y la evaluación de la derivada se reduce a una simple evaluación polinomial.
Ası́ por ejemplo considerando el polinomio f3 (x) = 1 + 2x + 3x2 + 4x3 , tenemos que
a = [1, 2, 3, 4] y los coeficiente de f30 (x) son a0 = [2, 6, 12]. La evaluación del polinomio
resultante lo podemos hacer para x = 20 utilizando:
i p = p ∗ x + a0i p
2 0*20 +12 12
1 12*20 + 6 246
0 246*20 + 2 4922
3.7.4. Ejemplo
x3 x5 x7 x9
f (x) = x − + − + + ···
3! 5! 7! 9!
Los coeficientes de este polinomio son a = [0, 1, 0, −1/3!, 0, 1/5!, 0, −1/7!, 0, 1/9!], por lo
tanto los coeficientes para la derivada son a∗ = [1, 0, −3/3!, 0, 5/5!, 0, −7/7!, 0, 9/9!]
i p = p ∗ x + a∗i p
8 p = 0.000000 ∗ 0.500000 + 0.000025 0.000025
7 p = 0.000025 ∗ 0.500000 + 0.000000 0.000012
6 p = 0.000012 ∗ 0.500000 − 0.001389 -0.001383
5 p = −0.001383 ∗ 0.500000 + 0.000000 -0.000691
4 p = −0.000691 ∗ 0.500000 + 0.041667 0.041321
3 p = 0.041321 ∗ 0.500000 + 0.000000 0.020660
2 p = 0.020660 ∗ 0.500000 − 0.500000 -0.489670
1 p = −0.489670 ∗ 0.500000 + 0.000000 -0.244835
0 p = −0.244835 ∗ 0.500000 + 1.000000 0.877583
La implementación en Matlab es
3.7. EVALUACIÓN DE POLINOMIOS 51
function y = Evalua_Derivada(x, a)
N = length(a);
b = a(2:N).*[1:N-1];
y = Evalua_Polinomio(x, b);
end
Note que los coeficiente del nuevo polinomio a∗ pueden calcularse a partir de los coeficientes
a de polinomio original :
a = [a0 , a1 , a2 , a3 , a4 , · · · , an−1 , an ]
Ası́ la evaluación de la integral del polinomio se reduce a calcular los nuevos coeficientes
del nuevo polinomio y hacer la evaluación del nuevo polinomio con coeficientes a∗ .
En el caso de tener una integral definida debemos notar:
x1
an n+1 x1
Z
a1 2 a2 3 a3 4 an−1 n
f (x)dx = CT E + a0 x + x + x + x · · · + x + x
x0 2 3 4 n n+1
x0
3.7.6. Ejemplo
Z π/2
sin(x)dx
0
x3 x5 x7 x9
f (x) = x − + − + + ···
3! 5! 7! 9!
Los coeficientes de este polinomio son a = [0, 1, 0, −1/3!, 0, 1/5!, 0, −1/7!, 0, 1/9!], por lo
tanto los coeficientes para la integral serán :
−1 −1
a∗ = [0, 0, 21 , 0, 4×3! 1
, 0, 6×5! , 0, 8×7! 1
, 0, 10×9! ]
i p = p ∗ x + a∗i p
10 p = 0.000000 * 0.000000 + 0.000000 0.000000
9 p = 0.000000 * 0.000000 + 0.000000 0.000000
8 p = 0.000000 * 0.000000 - 0.000025 -0.000025
7 p = -0.000025 * 0.000000 + 0.000000 0.000000
6 p = 0.000000 * 0.000000 + 0.001389 0.001389
5 p = 0.001389 * 0.000000 + 0.000000 0.000000
4 p = 0.000000 * 0.000000 - 0.041667 -0.041667
3 p = -0.041667 * 0.000000 + 0.000000 0.000000
2 p = 0.000000 * 0.000000 + 0.500000 0.500000
1 p = 0.500000 * 0.000000 + 0.000000 0.000000
0 p = 0.000000 * 0.000000 + 0.000000 0.000000
Con esto tenemos que el valor de la integral es igual a 1 − 0 = 1.
ans =
1.0000
fn (x) = a0 + a1 x + a2 x2 + ... + an xn .
f (−s(k) )
s(k+1) = s(k) +
f 0 (−s(k) )
Para hacer la solución más eficiente evaluaremos la función utilizando evaluación polinomial
tanto para la función como para la derivada.
function sn = factor_NR(s0, a)
% factor_NR(s0, a) Calcula el factor (x+s) de un polinomio con
% coeficiente a dado un valor inicial s0 mediante el
% metodo de Newton-Raphson
Como ejemplo numérico calculamos la raı́z del polinomio f6 (x) = x6 −1 con un valor inicial
s(0) = 10
3.8. DEFLACIÓN DE POLINOMIOS Y DIVISIÓN DE POLINOMIOS 55
999999.000000
s1 = 10.000000 + −600000.000000 = 8.333335
334897.378558
s2 = 8.333335 + −241126.784337 = 6.944450
112156.191251
s3 = 6.944450 + −96903.735989 = 5.787052
37560.618299
s4 = 5.787052 + −38943.785362 = 4.822569
12578.711852
s5 = 4.822569 + −15651.050576 = 4.018871
4212.321940
s6 = 4.018871 + −6290.306217 = 3.349218
1410.434918
s7 = 3.349218 + −2528.533032 = 2.791411
472.088718
s8 = 2.791411 + −1016.880869 = 2.327159
157.838757
s9 = 2.327159 + −409.526161 = 1.941741
52.597923
s10 = 1.941741 + −165.618133 = 1.624156
17.355481
s11 = 1.624156 + −67.809321 = 1.368210
5.560199
s12 = 1.368210 + −28.768380 = 1.174936
1.630779
s13 = 1.174936 + −13.434500 = 1.053548
0.367497
s14 = 1.053548 + −7.787952 = 1.006360
0.038774
s15 = 1.006360 + −6.193251 = 1.000100
0.000598
s16 = 1.000100 + −6.002990 = 1.000000
La deflación polomial se define como el cálculo de un polinomio de grado fn1 (x) tal que
fn (x) = (x − s) ∗ fn−1 (x). Para esto suponga que conoce, una de las raı́ces de un polinomio
56 SE NO LINEALES
y que podemos realizar la división de este polinomio para obtener un polinomio de grado
menor. Ası́ por ejemplo si tenemos
fn (x) = a0 + a1 x + a2 x2 + ... + an xn .
bn = an
bn−1 = an−1 − an s = an−1 − bn s
bn−2 = an−2 − (an−1 − an s)s = an−2 − bn−1 s
.. .
. = ..
b2 = a2 − b3 s
b1 = a1 − b2 s
b0 = a0 − b1 s
n = length(a);
b = zeros(1,n);
b(n) = a(n);
disp(’residuo ’);
disp(b(1));
y = b(2:n);
Y para realizar la ejecución hacemos
Division_Sintetica([-120, -46, 79, -3, -7, 1], -4)
3.8.1. Ejemplo
Dado el polinomio f5 (x) = x5 − 7x4 –3x3 + 79x2 –46x–120 encontrar la división sintética con
el monomio (x − 4).
x−4 1 -7 -3 79 -46 -120
4 -12 -60 76 120
1 -3 -15 19 30 0
Para este ejemplo dar en Matlab
Division_Sintetica([-120, -46, 79, -3, -7, 1], -4)
El resultado es
30 19 -15 -3 1
El polinomio resultante, en este caso, es f4 (x) = x4 − 3x3 –15x2 + 19x + 30. Note que el
residuo es cero y en este caso tenemos una deflación polinomial.
En algunos casos en deseable hacer la división sintética de la función fn (x) entre un po-
linomio de segundo orden de la forma f2 (x) = x2 + rx + s. Aplicando la técnica anterior
podemos realizar la división fn (x)/f2 (x) como
58 SE NO LINEALES
b5 = a5
b4 = a4 − a5 r = a4 − rb5
b3 = a3 − sa5 − (a4 − a5 r)r = a3 − sb5 − rb4
b2 = a2 − sb4 − rb3
b1 = a1 − sb3 − rb2
b0 = a0 − sb2 − rb1
En general para un polinomio de grado fn (x) tenemos que podemos hacer la división
sintética aplicando la siguiente recurrencia
bn = an
bn−1 = an − rbn
bk = ak − rbk+1 − sbk+2
∀i ∈ {n − 2, n − 3, · · · 1}
R = b1 (x + r) + b0
n = length(a);
b=zeros(n,1);
3.8. DEFLACIÓN DE POLINOMIOS Y DIVISIÓN DE POLINOMIOS 59
b(n) = a(n);
b(n-1) = a(n-1) - r*b(n);
c = b(3:n);
r = [b(2); b(1)+r*b(2)];
end
3.8.2. Ejemplo
b3 = a3 = 1.0
b2 = a2 − rb3 = 0 − (1)(3) = −3
b1 = a1 − rb2 − sb3 = 0 − (3)(−3) − (4)(1) = 5
b0 = a0 − rb1 − sb2 = −1 − (3)(5) − (4)(−3) = −4
R = b1 (x + r) + b0 = 5(x + 3) − 4 = 5x + 11
b =
-3
1
60 SE NO LINEALES
r =
11
5
3.8.3. Ejemplo
Hacer la división sintética del polinomio f5 (x) = x5 −3.5x4 +2.75x3 +2.125x2 −3.875x+1.25,
entre el polinomio f2 (x) = x2 + x − 2
De acuerdo con la sucesión
b5 = a5 = 1.0
b4 = a4 − rb5 = −3.5 − (1)(1) = −4.5
b3 = a3 − rb4 − sb5 = 2.75 − (1)(−4.5) − (−2)(1) = 2.75 + 6.5 = 9.25
b2 = a2 − rb3 − sb4 = 2.125 − (1)(9.25) − (−2)(−4.5) = −16.125
b1 = a1 − rb2 − sb3 = −3.875 − (1)(−16.125) − (−2)(9.25) = 30.75
b0 = a0 − rb1 − sb2 = 1.25 − (1)(30.75) − (−2)(−16.125) = 61.75
La siguiente tabla muestra el resumen de los coeficientes calculados. Note que el residuo
no es cero.
1 -3.5 2.75 2.125 -3.875 1.25
x2 + x − 2 -1 6.5 -18.25 34.625 -63.00
1 -4.5 9.25 -16.125 30.75 -61.75
La ejecución en Matlab serı́a
[b, r] = Division_Sintetica2([1.25, -3.875, 2.125, 2.75, -3.5, 1], 1, -2)
Residuo 30.7500 x - 31.0000
b =
-16.1250
9.2500
3.8. DEFLACIÓN DE POLINOMIOS Y DIVISIÓN DE POLINOMIOS 61
-4.5000
1.0000
r =
-31.0000
30.7500
Lo cual significa que
3.8.4. Ejemplo
b5 = a5 = 1.0
b4 = a4 − rb5 = −3.5 − (−1)(1) = −2.5
b3 = a3 − rb4 − sb5 = 2.75 − (−1)(−2.5) − (−2)(1) = 2.25
b2 = a2 − rb3 − sb4 = 2.125 − (−1)(2.25) − (−2)(−2.5) = −0.625
b1 = a1 − rb2 − sb3 = −3.875 − (−1)(−0.625) − (−2)(2.25) = 0
b0 = a0 − rb1 − sb2 = 1.25 − (−1)(0) − (−2)(−0.625) = 0
R = 0 × (x − 1) + 0 = 0
La corrida en Matlab es
[b, r] = Division_Sintetica2([1.25, -3.875, 2.125, 2.75, -3.5, 1], -1, -2)
Residuo 0.0000 x + 0.0000
b =
62 SE NO LINEALES
-0.6250
2.2500
-2.5000
1.0000
r =
0
0
f2 (n) = a0 + a1 x + a2 x2
p
−a1 ± a21 − 4a2 a0
x=
2a2
bn = an
bn−1 = an−1 − rbn
bi = ai − rbi+1 − sbi+2
64 SE NO LINEALES
Una manera de determinar los valores de r y s que hacen cero el residuo es utilizar el
Método de Newton-Raphson. Para ello necesitamos una aproximación lineal de b1 y b0
respecto a r y s la cual calculamos utilizando la serie de Taylor
donde los valores de rk y sk están dados y calculamos los nuevos valores rk+1 y sk+1 que
hacen a b1 (rk+1 , sk+1 ) y b0 (rk+1 , sk+1 ) igual a cero. El sistema de ecuaciones que tenemos
que resolver es:
" #
∂b1 (rk ,sk ) ∂b1 (rk ,sk )
∂r ∂s drk −b1 (rk , sk )
∂b0 (rk ,sk ) ∂b0 (rk ,sk ) =
dsk −b0 (rk , sk )
∂r ∂s
Bairtow muestra que los coeficientes c del polinomio de derivadas parciales fn0 (x) = c0 +
c1 x + c2 x2 + · · · pueden obtenerse haciendo un procedimiento similar a la división sintética,
ası́
cn = bn
cn−1 = bn−1 − rcn
ci = bi − rci+1 − sci+2
3.10. MÉTODO DE BAIRSTOW PARA LA SOLUCIÓN DE POLINOMIOS 65
donde
∂b0 (rk , sk )
= c1 (rk , sk )
∂r
∂b1 (rk , sk )
= c2 (rk , sk )
∂r
∂b0 (rk , sk )
= c2 (rk , sk )
∂s
∂b1 (rk , sk )
= c3 (rk , sk )
∂s
El código en Matlab para implementar la división sintética y calculo de los coeficientes del
polinomio de derivadas es
function [b, c] = Division_Sintetica_Derivadas(a, r, s)
n = length(a);
b=zeros(n,1);
c=zeros(n,1);
b(n) = a(n);
b(n-1) = a(n-1) - r*b(n);
c(n) = b(n);
c(n-1) = b(n-1) - r*c(n);
for k=n-2: -1:1
b(k) = a(k) - r*b(k+1) - s*b(k+2);
c(k) = b(k) - r*c(k+1) - s*c(k+2);
end;
Finalmente el sistema de ecuaciones que debe resolverse es:
c2 (rk , sk ) c3 (rk , sk ) drk −b1 (rk , sk )
=
c1 (rk , sk ) c2 (rk , sk ) dsk −b0 (rk , sk )
−1
rk+1 rk c2 (rk , sk ) c3 (rk , sk ) −b1 (rk , sk )
= −
sk+1 sk c1 (rk , sk ) c2 (rk , sk ) −b0 (rk , sk )
N = length(a);
res =[r0, s0]’;
for k=1:100
[b, c] = Division_Sintetica_Derivadas(a, res(1), res(2));
r = res(1);
s = res(2);
c = b(3:N);
3.10.1. Ejemplo 1
Dado el polinomio f5 (x) = x5 − 3.5x4 + 2.75x3 + 2.125x2 − 3.875x + 1.25, determinar los
valores de r y s que hacen el resido igual a cero. Considere r0 = 1 y s0 = −2.
Solución.
Iteración 1
La división sintética con el polinomio f2 (x) = x2 + x − 2.0 da como resultado
El polinomio de derivadas es
−1
r1 1 −43.875 16.750 −30.7500 −1.7637
= − =
s1 −2 108.125 −43.875 61.7500 −7.4034
Iteración 2
La división sintética con el polinomio f2 (x) = x2 −1.7637x−7.4034 da como resultado
−1
r2 −1.7637 27.62800 14.5427 −51.75640 −1.7164
= − =
s2 −7.4034 208.1484 27.6280 −105.68578 −3.9343
Iteración 3
La división sintética con el polinomio f2 (x) = x2 −1.7164x−3.9343 da como resultado
−1
r3 −1.7164 13.8350 7.4418 −12.6547 −1.5997
= − =
s3 −3.9343 65.6792 13.8350 −28.1881 −2.4507
En resumen
68 SE NO LINEALES
k r s b1 b0
0 1.0000 - 2.0000 30.7500 -61.7500
1 -1.7637 -7.4034 -61.7500 30.7500
2 -1.7164 -3.9343 105.6858 51.7564
3 -1.5997 -2.4507 28.1881 12.6547
4 -1.3335 -2.1867 8.1547 2.8996
5 -1.1183 -2.1130 2.5222 0.7601
6 -1.0271 -2.0232 0.6077 0.2719
7 -1.0017 -2.0015 0.1119 0.0431
8 -1.0000 -2.0000 0.0063 0.0028
9 -1.0000 -2.0000 0.0000 0.0000
10 -1.0000 -2.0000 0.0000 0.0000
La solución es:
c =
-0.6250
2.2500
-2.5000
1.0000
r =
-1.0000
s =
-2.0000
3.10. MÉTODO DE BAIRSTOW PARA LA SOLUCIÓN DE POLINOMIOS 69
raices = [];
N = length(b);
while(N > 3)
[b r s] = Itera_Bairstow(b, r0, s0);
[x1, x2] = Formula_General(1, r, s);
raices = [raices, x1, x2];
N = N-2;
end;
if length(b) == 3
[x1, x2] = Formula_General(b(3), b(2), b(1));
raices = [raices, x1, x2];
end;
if length(b) == 2
raices = [raices, -b(1)/b(2)];
end;
3.10.2. Ejemplo 2
Dado el polinomio f5 (x) = x5 − 3.5x4 + 2.75x3 + 2.125x2 − 3.875x + 1.25, calcular la raı́ces
utilizando el Método de Bairstow con valores iniciales r0 = 1 y s0 = −2
Iteración 1
x1 = 2.0000
x2 = −1.0000
Iteración 2
f3 (x) = (−0.625 + 2.25x − 2.5x2 + x3 ) = (x − 0.5)(x2 − 2x + 1.25)
Iteración 3
Finalmente
f1 (x) = x − 0.5
ans =
3.10.3. Ejemplo 3
Dado el polinomio f5 (x) = x5 − 3.5x4 + 2.75x3 + 2.125x2 − 3.875x + 1.25, determinar las
raı́ces de este polinomio. Considere r0 = −1 y s0 = −1.
Iteración 1
x1 = 0.5
x2 = −1.0
Iteración 2
x3 = 1.0 + j0.5
x4 = −1.0 − j0.5
Iteración 3
f1 (x) = (x − 2)
x5 = 2;
Todas la raı́ces de f5 (x) son x = [0.5, −1.0, (1.0 + j0.5), (1 − j0.5), 2]. Para correr en Matlab
dar
>> Bairstow([1.25, -3.875, 2.125, 2.75, -3.5, 1], -1, -1)
ans =
En forma compacta
Ax = b
En las siguientes subsecciones se analizarán algunos de los métodos para resolver el sistema
de ecuaciones.
a1,1 a1,2 a1,3 x1 b1
a2,1 a2,2 a2,3 x2 = b2
a3,1 a3,2 a3,3 x3 b3
73
74 SISTEMAS DE ECUACIONES
b1 − a1,2 x2 − a1,3 x3
x1 =
a1,1
b2 − a2,1 x1 − a2,3 x3
x2 =
a2,2
b3 − a3,1 x1 − a3,2 x2
x3 =
a3,3
(t) (t)
(t+1) b1 − a1,2 x2 − a1,3 x3
x1 =
a1,1
(t) (t)
(t+1) b2 − a2,1 x1 − a2,3 x3
x2 =
a2,2
(t) (t)
(t+1) b3 − a3,1 x1 − a3,2 x2
x3 =
a3,3
PN (t)
(t+1) bk – l=1,l6=k ak,l xl
xk =
ak,k
La implementación en Matlab es
function y = Jacobi(A, x, b)
N = length(x);
y = zeros(N,1);
for iter=1:100000
for k = 1:N
suma =0;
for l= 1:N
if k ~= l
4.1. SOLUCIÓN DE SISTEMAS LINEALES 75
El cambio que debemos hacer respecto al de Jacobi, es que las variables nuevas son uti-
lizadas una vez que se realiza el cálculo de ellas ası́, para un sistema de tres ecuaciones
tendremos:
(t) (t)
(t+1) b1 − a1,2 x2 − a1,3 x3
x1 =
a1,1
(t+1) (t)
(t+1) b2 − a2,1 x1 − a2,3 x3
x2 =
a2,2
(t+1) (t+1)
(t+1) b3 − a3,1 x1 − a3,2 x2
x3 =
a3,3
La implementación en Matlab es
function y = Gauss_Seidel(A, x, b)
N = length(x);
y = zeros(N,1);
for iter=1:100000
for k = 1:N
suma =0;
for l= 1:N
if k ~= l
76 SISTEMAS DE ECUACIONES
Ejemplo
4 −1 1 x1 7
4 −8 1 x2 = −21
−2 1 5 x3 15
ans =
2.0000
4.0000
3.0000
La solución utilizando Gauss-Seidel es :
k x1 x2 x3
1 1.0000 2.0000 2.0000
2 1.7500 3.7500 2.9500
3 1.9500 3.9688 2.9863
4 1.9956 3.9961 2.9990
5 1.9993 3.9995 2.9998
6 1.9999 3.9999 3.0000
7 2.0000 4.0000 3.0000
8 2.0000 4.0000 3.0000
Note que Gauss-Seidel requiere de 7 iteraciones mientras Jacobi de 11, para convergir. Para
correr hacer
>> Gauss_Seidel([4 -1 1; 4 -8 1; -2 1 5], [1,2,2]’, [7,-21, 15]’)
ans =
2.0000
4.0000
3.0000
10 −1 −1 −1 1 x1 1
1 4 0 0 0 x2
2
A=
1 0 4 0 0 x3
=
3
1 0 0 4 0 x4 4
1 0 0 0 3 x5 5
A = sparse(5,5);
A(1,1) = 10;
78 SISTEMAS DE ECUACIONES
A(1,2) = -1;
A(1,3) = -1;
A(1,4) = -1;
A(1,5) = 1;
A(2,1) = 1;
A(3,1) = 1;
A(4,1) = 1;
A(5,1) = 1;
A(2,2) = 4;
A(3,3) = 4;
A(4,4) = 4;
A(5,5) = 3;
disp(A);
size(A)
b = [1,2,3,4,5]’;
disp(b);
Jacobi(A,[0,0,0,0,0]’, b)
Gauss_Seidel(A,[0,0,0,0,0]’, b)
ans =
0.1520
0.4620
0.7120
0.9620
1.6160
ans =
0.1520
0.4620
0.7120
0.9620
1.6160
4.1. SOLUCIÓN DE SISTEMAS LINEALES 79
Consideremos que tenemos un sistema lineal Ax=b, donde la matriz A no tiene las condi-
ciones de ser triangular superior.
a1,1 a1,2 a1,3 x1 b1
a2,1 a2,2 a2,3 x2 = b2
a3,1 a3,2 a3,3 x3 b3
b1 − a1,2 x2 − a1,3 x3
x1 =
a1,1
b1 − a1,2 x2 − a1,3 x3
a2,1 + a2,2 x2 + a2,3 x3 = b2
a1,1
a2,1 ∗ a1,2 a1,3 b1
a2,2 − x2 + a2,3 − a2,1 x3 = b2 − a2,1
a1,1 a1,1 a1,1
b1 − a1,2 x2 − a1,3 x3
a3,1 + a3,2 x2 + a3,3 x3 = b3
a1,1
a3,1 a1,2 a3,1 a1,3 b1
a3,2 − x2 + a3,3 − x3 = b3 − a3,1
a1,1 a1,1 a1,1
a1,1 a1,2 a1,3 x1 b1
0 a02,2 a02,3 x2 = b02
0 a03,2 a03,3 x3 b03
80 SISTEMAS DE ECUACIONES
a1,1 a1,2 a1,3 x1 b1
0 a02,2 a02,3 x2 = b02
0 0 a003,3 x3 b003
a1,1 a1,2 a1,3 a1,4 x1 b1
0 a2,2 a2,3 a2,4 x2 b2
=
0 0 a3,3 a3,4 x3 b3
0 0 0 a4,4 x4 b4
Podemos resolverlo empezando con la ecuación 4 cuya solución es la más simple, para luego
solucionar 3 y ası́ sucesivamente. Este esquema de solución queda
b4
x4 =
a4,4
b3 − a3,4 x4
x3 =
a3,3
b2 − a2,3 x3 − a2,4 x4
x2 =
a2,2
b1 − a1,2 x2 − a1,3 x3 − a1,4 x4
x1 =
a1,1
PN
bk − i=k+1 ak,i xi
xk =
ak,k
function x = Eliminacion_Gaussiana(A, b)
N = length(b);
x = zeros(N,1);
for k =1:1:N-1
for n = k+1:1:N
b(n) = b(n) - A(n,k)*b(k)/A(k,k);
for m=N:-1:k
A(n,m) = A(n,m) - A(n,k)*A(k,m)/A(k,k);
end;
end;
end;
for k=N:-1:1
suma = 0;
for m=k+1:1:N
suma = suma +A(k,m)*x(m);
end;
x(k) = (b(k)-suma)/A(k,k);
end;
que corresponde a un sistema triangular superior que podemos solucionar utilizando susti-
tución hacia atrás.
Ejemplo 1
10 −1 2 1 x1 1
−1 15 −3 1 x2 2
=
2 −3 6 −3 x3 2
1 1 −3 7 x4 1
Primer paso k = 1
82 SISTEMAS DE ECUACIONES
−1
10 2 1 x1 1
149
− 14 11 21
0 x2
10 5 10 10
=
0
− 14
5
28
5 − 16
5
x3
9
5
11
0 10 − 16
5
69
10 x4 9
10
10.0000 −1.0000 2.0000 1.0000 x1 1.0000
0 14.9000 −2.8000 1.1000 x2
2.1000
=
0 −2.8000 5.6000 −3.2000 x3 1.8000
0 1.1000 −3.2000 6.9000 x4 0.9000
Segundo paso k = 2
10 −1
2 1 x1 1
149
− 14 11 21
0 x2
10 5 10 10
=
756
0
0 149 − 446
149
x3
327
149
446 1016 111
0 0 − 149 149 x4 149
10.0000 −1.0000 2.0000 1.0000 x1 1.0000
0 14.9000 −2.8000 1.1000 x2
2.1000
=
0 0 5.0738 −2.9933 x3 2.1946
0 0 −2.9933 6.8188 x4 0.7450
Tercer paso k = 3
10 −1
2 1 x1 1
149
− 14 11 21
0 x2
10 5 10 10
=
756
0
0 149 − 446
149
x3
327
149
955 257
0 0 0 189 x4 126
4.1. SOLUCIÓN DE SISTEMAS LINEALES 83
10.0000 −1.0000 2.0000 1.0000 x1 1.0000
0 14.9000 −2.8000 1.1000 x2
2.1000
=
0 0 5.0738 −2.9933 x3 2.1946
0 0 0 5.0529 x4 2.0397
b4
x4 =
a4,4
2.0397
x4 = = 0.4037
5.0529
Paso 2 k = 3
b3 − a3,4 x4
x3 =
a3,3
2.1946 − (−2.9933)(0.4037)
x3 = = 0.6707
5.0738
Paso 3 k = 2
b2 − a2,3 x3 − a2,4 x4
x2 =
a2,2
2.1000 − (−2.8000)(0.6707) − (1.1000)(0.4037)
x2 = = 0.2372
14.9000
Paso 4 k = 1
b1 − a1,2 x2 − a1,3 x3 − a1,4 x4
x1 =
a1,1
1.0000 − (−1.0000)(0.2372) − (2.0000)(0.6707) − (1.0000)(0.4037)
x1 = = −0.0508
10.0000
La solución en Matlab es
>> Eliminacion_Gaussiana([10 -1 2 1; -1 15 -3 1; 2 -3 6 -3; 1 1 -3 7], [1,2,2,1]’)
ans =
-0.0508
0.2372
0.6707
0.4037
Ejemplo 2
5x + 2y + 1z = 3
2x + 3y − 3z = −10
1x − 3y + 2z = 4
Primer paso
5x + 2y + 1z = 3
Segundo paso
5x + 2y + 1z = 3
0x − 0y − (38/11)z = −(153/11)
La solución en Matlab es
4.1. SOLUCIÓN DE SISTEMAS LINEALES 85
3.0000
-11.2000
-13.9091
ans =
-0.6579
1.1316
4.0263
Ejemplo 3
3 −1 −1 x 0
−1 1 0 y = 1
−1 0 1 z 1
3 −1 −1 x 0
0 2/3 −1/3 y = 1
0 0 1/2 z 3/2
La solución en Matlab es
0
1.0000
86 SISTEMAS DE ECUACIONES
1.5000
ans =
2.0000
3.0000
3.0000
Un ejemplo de sistema donde es necesario hacer un cambio de renglón por renglón para
que tenga solución es el siguiente sistema.
1 2 6
4 8 −1
−2 3 5
1 2 6
0 0 −25
0 7 17
note, que aparece un cero en el elemento 22, lo cual nos da un sistema sin solución. Per-
mutando los renglones 2 y 3 el sistema tiene solución.
1 2 6
−2 3 5
4 8 −1
1
-3
4.1. SOLUCIÓN DE SISTEMAS LINEALES 87
Inf
ans =
NaN
NaN
NaN
Haciendo el cambio de renglones tenemos
>> Eliminacion_Gaussiana([1 2 6; -2 3 5; 4 8 -1], [1 1 1])
1 2 6
0 7 17
0 0 -25
1
3
-3
ans =
0.0057
0.1371
0.1200
4.1.5. Gauss-Jordan
a1,1 a1,2 a1,3 x1 b1
a2,1 a2,2 a2,3 x2 = b2
a3,1 a3,2 a3,3 x3 b3
88 SISTEMAS DE ECUACIONES
Ax = Ib
a1,1 a1,2 a1,3 x1 1 0 0 b1
a2,1 a2,2 a2,3 x2 = 0 1 0 b2
a3,1 a3,2 a3,3 x3 0 0 1 b3
a1,1 a1,2 a1,3 1 0 0 b1
a2,1 a2,2 a2,3 0 1 0 b2 (4.4)
a3,1 a3,2 a3,3 0 0 1 b3
Primer paso
Vamos a despejar la variable x1 del sistema y la sustituimos en las otras dos ecuacio-
nes
b1 − a1,2 x2 − a1,3 x3
= x1 (4.5)
a1,1
Sustituyendo en la ecuación 2
b1 − a1,2 x2 − a1,3 x3
a2,1 + a2,2 x2 + a2,3 x3 = b2
a1,1
a2,1 a2,1 a1,2 a2,1 a1,3
0x1 + b1 + a2,2 − x2 + a2,3 x3 = b2 (4.6)
a1,1 a1,1 a1,1
Sustituyendo en la ecuación 3
b1 − a1,2 x2 − a1,3 x3
a3,1 + a3,2 x2 + a3,3 x3 = b3
a1,1
a3,1 a3,1 a1,2 a3,1 a1,3
0x1 + b1 + a3,2 − x2 + a3,3 − x3 = b3 (4.7)
a1,1 a1,1 a1,1
4.1. SOLUCIÓN DE SISTEMAS LINEALES 89
a1,2 a1,3
1 a1,1 a1,1
1
0 0 b1
x 1 a1,1
a a1,2 a a1,3 a2,1
a2,2 − 2,1 a2,3 − 2,1
0 a1,1 a1,1
x2 = − 1 0
b2
a1,1
a
0
a3,1 a1,2
a3,2 − a1,1
a3,1 a1,3
a3,3 − a1,1 x3 − a3,1 0 1 b3
1,1
a1,2 a1,3 1 1
1 a1,1 a1,1 a1,1 0 0 a1,1 b1
a a1,2 a a1,3 a2,1 a2,1
a2,2 − 2,1 a2,3 − 2,1 − a1,1 b2 − a1,1
0 a1,1 a1,1 1 0 b1
a3,1 a1,2 a3,1 a1,3 a3,1 a3,1
0 a3,2 − a1,1 a3,3 − a1,1 − a1,1 0 1 b3 − a1,1 b1
Segundo Paso
Para un sistema equivalente
1 a01,2 a01,3
0 0
x1 c1,1 0 0 b1
0 a02,2 a02,3 x2 = c02,1 1 0 b02 (4.8)
0 a03,2 a03,3 x3 c03,1 0 1 b03
Despejamos x2 de la ecuación 2
Sustituyendo en la ecuación 1
!
c02,1 b01 + b02 − a02,3 x3
x1 + a01,2 + a01,3 = c01,1 b01
a02,2
! !
a01,2 a02,3 a01,2 c02,1 a02,1 0
x1 + 0x2 + a01,3 − x3 = c01,1 b01 − − b
a02,2 a02,2 a02,2 2
Sustituyendo en la ecuación 3
! !
a03,2 a02,3 a03,2 c02,1 a03,2 0
0x1 + 0x2 + a03,3 − x3 = c03,1 − b01 − b 2 + b0 3
a02,2 a02,2 a02,2
90 SISTEMAS DE ECUACIONES
En forma matricial
Tercer Paso
Dado el sistema equivalente
1 0 a001,3
00
c1,1 c001,2 0
00
x1 b1
0 1 a002,3 x2 = c002,1 c002,2 0 b002
0 0 a003,3 x3 c003,1 c003,2 1 b003
a00 00
1,3 c3,2 a00
c001,1 c001,2 − 00 − a1,3
00
a3,3
b001
1 0 0 x1 3,3
a00 a00
00
c002,1
0 1 0 x2 = 00
c2,2 − a2,300 − 2,3
a00 b2
3,3 3,3
0 0 1 x3 b003
00
c00
c3,1 3,2 1
a00
3,3
00
a3,3 a00
3,3
Como resultado tenemos que la matrix c00 es la inversa de nuestro sistema y b00 la solución
del sistema de ecuaciones
Resumen
Dado el sistema
a1,1 a1,2 a1,3 · · · a1,M
a2,1 a2,2 a2,3 · · · a2,M
a3,1 a3,2 a3,3 · · · a3,M
Paso 1
Dividimos la primer ecuación entre a1,1
1
a1,1 a1,1 a1,2 a1,3 ··· a1,M
a2,1 a2,2 a2,3 ··· a2,M
a3,1 a3,2 a3,3 ··· a3,M
4.1. SOLUCIÓN DE SISTEMAS LINEALES 91
Paso 2
Dividimos la segunda ecuación entre a2,2
a1,1 a1,2 a1,3 ··· a1,M
1
a2,2
a2,1 a2,2 a2,3 ··· a2,M
a3,1 a3,2 a3,3 ··· a3,M
a2,1 a2,3 a2,M
a1,1 − a1,2 a2,2 0 a1,3 − a1,2 a2,2 ··· a1,M − a1,2 a2,2
a2,1 a2,3 a2,M
a2,2 1 a2,2 ··· a2,2
a3,1 a3,2 a3,3 ··· a3,M
a2,1 a2,3 a2,M
a1,1 − a1,2 a2,2 0 a1,3 − a1,2 a2,2 ··· a1,M − a1,2 a2,2
a3,2
a2,1 a2,3 a2,M
a2,2 1 a2,2 ··· a2,2
a3,1 a3,2 a3,3 ··· a3,M
a2,1 a2,3 a2,M
a1,1 − a1,2 a2,2 0 a1,3 − a1,2 a2,2 ··· a1,M − a1,2 a2,2
a2,1 a2,3 a2,M
a2,2 1 a2,2 ··· a2,2
a2,1 a2,3 a2,M
a3,1 − a3,2 a2,2 0 a3,3 − a3,2 a2,2 ··· a3,1 − a3,2 a2,2
Paso 3
Dividimos la tercera ecuación entre a3,3
a1,1 a1,2 a1,3 ··· a1,M
a2,1 a2,2 a2,3 ··· a2,M
1
a3,3 a3,1 a3,2 a3,3 ··· a3,M
a3,1 a3,2 a3,M
a1,1 − a1,3 a3,3 a1,2 − a1,3 a3,3 0 ··· a1,M − a1,3 a3,3
a2,1 a2,2 a2,3 ··· a2,M
a3,1 a3,2 a3,M
a3,3 a3,3 1 ··· a3,3
4.1. SOLUCIÓN DE SISTEMAS LINEALES 93
Note la similitud del método con el método de sumas y restas. No olvidar que este método
es equivalente al calculo parcial de la matriz inversa. El método se ilustra mejor con un
ejemplo.
Ejemplo 1
30x1 − x2 − 2x3 = 78
x1 + 70x2 − 3x3 = −193
3x1 − 2x2 + 100x3 = 714
Primero exprese los coeficientes y el lado derecho como una matriz aumentada
30 −1 −2 1 0 0 78
1 70 −3 0 1 0 −193
3 −2 100 0 0 1 714
Primer iteración
Luego se normaliza el primer renglón, al dividirlo entre el elemento pivote, 30, se obtie-
ne
1 1 1 13
1 − 30 − 15 30 0 0 5
1
70 −3 0 1 0 −193
3 −2 100 0 0 1 714
94 SISTEMAS DE ECUACIONES
El término x1 se puede eliminar del segundo renglón restando el primer renglón multiplicado
por 1 del segundo renglón. En forma similar restando el primer renglón multiplicando por
3 eliminará el término x1 del tercer renglón
1 1 1 13
1 − 30 − 15 30 0 0 5
0 2101 44 1
− 978
30 − 15 − 30 1 0 5
0 − 19
10
501
5
1
− 10 0 1 3531
5
1. −0.0333 −0.0667 0.0333 0. 0. 2.6
0. 70.0333 −2.9333 −0.0333 1. 0. −195.6
0. −1.9 100.2 −0.1 0. 1. 706.2
Segunda Iteración
2101
En seguida, se normaliza el segundo renglón dividiéndolo entre 30
1 1 1 13
1 − 30 − 15 30 0 0 5
8 1 30
− 5868
0
1 − 191 − 2101 2101 0 2101
19 501 1 3531
0 − 10 5 − 10 0 1 5
1. −0.0333 −0.0667 0.0333 0. 0. 2.6
0. 1. −0.0419 −0.0005 0.0143 0. −2.793
0. −1.9 100.2 −0.1 0. 1. 706.2
1. 0. −0.0681 0.0333 0.0005 0. 2.5069
0. 1. −0.0419 −0.0005 0.0143 0. −2.793
0. 0. 100.12 −0.1009 0.0271 1. 700.893
Tercer iteración
4.1. SOLUCIÓN DE SISTEMAS LINEALES 95
19123
El tercer renglón se normaliza entonces al dividirlo entre 191
13 70 1 5267
1 0 − 191 2101 2101 0 2101
0 1 − 8 1 30
− 5868
191 − 2101 2101 0
2101
212 57 191 1472577
0 0 1 − 210353 210353 19123 210353
1. 0. −0.0681 0.0333 0.0005 0. 2.5069
0. 1. −0.0419 −0.0005 0.0143 0. −2.793
0. 0. 1. −0.001 0.0003 0.01 7.0005
Por último, los términos x3 se pueden reducir de la primera y segunda ecuación para
obtener
538 8 1 48274
1 0 0 16181 16181 1471 16181
0 1 0 − 109 3006 8
− 525828
210353 210353 19123 210353
212 57 191 1472577
0 0 1 − 210353 210353 19123 210353
1. 0. 0. 0.0332 0.0005 0.0007 2.9834
0. 1. 0. −0.0005 0.0143 0.0004 −2.4997
0. 0. 1. −0.001 0.0003 0.01 7.0005
El código en Matlab es
function [x, Ainv] = Gauss_Jordan(A, b)
N = length(b);
for n = 1:N;
B(n,:) = B(n, :)./B(n,n);
for m = 1: N
if n ~= m
B(m,:) = B(m,:) - B(n,:)*B(m,n);
end;
end;
end;
x = B(:,2*N+1);
96 SISTEMAS DE ECUACIONES
x =
3.0000
-2.5000
7.0000
Ainv =
Ejemplo 2
1 1 2 x1 −1
1 3 −6 x2 = 7
2 −1 2 x3 0
1 1 2 −1
1 3 −6 7
2 −1 2 0
Primer iteración
4.1. SOLUCIÓN DE SISTEMAS LINEALES 97
1 1 2 −1
0 2 −8 8
0 −3 −2 2
Segunda iteración
1 0 6 −5
0 1 −4 4
0 0 −14 14
Tercer iteración
1 0 0 1
0 1 0 0
0 0 1 −1
Ejemplo 3
10 −1 2 1 x1 1
−1 15 −3 1 x2 2
=
2 −3 6 −3 x3 2
1 1 −3 7 x4 1
Primer iteración
98 SISTEMAS DE ECUACIONES
1 1 1 1 1
1 − 10
5 10 10 0 0 0 10
0 149 − 14 11 1 21
10 5 10 10 1 0 0 10
0 − 14 28
− 16 − 51 0 1 0 9
5 5 5 5
11
0 10 − 16
5
69
10
1
− 10 0 0 1 9
10
1.0000 −0.1000 0.2000 0.1000 0.1000 0 0 0 0.1000
0 14.9000 −2.8000 1.1000 0.1000 1.0000 0 0 2.1000
0 −2.8000 5.6000 −3.2000 −0.2000 0 1.0000 0 1.8000
0 1.1000 −3.2000 6.9000 −0.1000 0 0 1.0000 0.9000
Segunda iteración
27 16 15 1 17
1 0 149 149 149 149 0 0 149
0 1 − 28 11 1 10 21
149 149 149 149 0 0 149
756
0 0
149 − 446
149
27
− 149 28
149 1 0 327
149
446 1016 16 11 111
0 0 − 149 149 − 149 − 149 0 1 149
1.0000 0 0.1812 0.1074 0.1007 0.0067 0 0 0.1141
0 1.0000 −0.1879 0.0738 0.0067 0.0671 0 0 0.1409
0 0 5.0738 −2.9933 −0.1812 0.1879 1.0000 0 2.1946
0 0 −2.9933 6.8188 −0.1074 −0.0738 0 1.0000 0.7450
Tercer iteración
3 3 1 1
0 − 28
1 0 0 14 28 0 28
0 1 0 −1 2 1 2
27 0 27 27 0 9
0 0 1 − 223 1
− 28 1 149
0 109
378 27 756 252
955 3 1 223 257
0 0 0 189 − 14 27 378 1 126
4.1. SOLUCIÓN DE SISTEMAS LINEALES 99
1.0000 0 0 0.2143 0.1071 0.0000 −0.0357 0 0.0357
0 1.0000 0 −0.0370 0 0.0741 0.0370 0 0.2222
0 0 1.0000 −0.5899 −0.0357 0.0370 0.1971 0 0.4325
0 0 0 5.0529 −0.2143 0.0370 0.5899 1.0000 2.0397
Cuarta iteración
111 3 58 81 97
− 1910 − 955 − 1910 − 1910
1 0 0 0 955
0 1 0 0 − 3 71 79 7 453
1910 955 1910 955 1910
0 0 1 0 − 58 79 254 223 1281
955 1910 955 1910 1910
81 7 223 189 771
0 0 0 1 − 1910 955 1910 955 1910
1.0000 0 0 0 0.1162 −0.0016 −0.0607 −0.0424 −0.0508
0 1.0000 0 0 −0.0016 0.0743 0.0414 0.0073 0.2372
0 0 1.0000 0 −0.0607 0.0414 0.2660 0.1168 0.6707
0 0 0 1.0000 −0.0424 0.0073 0.1168 0.1979 0.4037
b =
-0.0508
0.2372
0.6707
0.4037
Ainv =
Una ecuación no lineal es aquella que tiene una forma diferente a f (x) = a0 + a1 x en cuyo
caso calcular la solución consiste en resolver despejando de x = −a0 /a1 . Pero el caso es
que queremos resolver un sistema de ecuaciones no lineales de la forma
f1 (x1 , x2 , · · · , xn ) = 0
f2 (x1 , x2 , · · · , xn ) = 0
.. .
. = ..
fn (x1 , x2 , · · · , xn ) = 0
f1 (x1 , x2 , · · · , xn ) = 0
f2 (x1 , x2 , · · · , xn ) = 0
.. .
. = ..
fn (x1 , x2 , · · · , xn ) = 0
El método de iteración de punto fijo intentara despejar de cada una de la las ecuaciones
fi (x1 , x2 , · · · , xn ) la i-esima variable tal que
x1 − g1 (x1 , x2 , · · · , xn ) = f1 (x1 , x2 , · · · , xn )
x2 − g2 (x1 , x2 , · · · , xn ) = f2 (x1 , x2 , · · · , xn )
.. .
. = ..
xn − gn (x1 , x2 , · · · , xn ) = fn (x1 , x2 , · · · , xn )
4.2. MÉTODOS PARA SISTEMAS NO LINEALES 101
La implementación en Matlab es
function r = Punto_Fijo(g, x1)
while 1
x2 = g(x1)
error = abs(norm((x2-x1)/x2));
if(error < 0.0001) break
else x1 = x2;
end;
end;
r = x2;
Ejemplo 1
Utilice el método de iteración de punto fijo para determinar las raı́ces del sistema de
(0) (0)
ecuaciones dado. Considere como valores iniciales x1 = 1.5 y x2 = 3.5.
x21 + x1 x2 − 10 = 0
x2 + 3x1 x22 − 57 = 0
√
f1 (x1 , x2 ) = x1 − 10 − x1 x2
r
57 − x2
f2 (x1 , x2 ) = x2 −
3x1
q
(t+1) (t) (t)
x1 = 10 − x1 x2
v
u 57 − x(t)
u
(t+1) 2
x2 = t (t+1)
3x1
La implementación en Matlab es
function x = g1(x)
Iteración 1
q
(1) (0) (0)
p
x1 = 10 − x1 x2 = 10 − (1.5)(3.5) = 2.1794
v s
u 57 − x(0)
u
(1) 2 57 − (3.5)
x2 = t (1)
= = 2.8605
3x 3(2.1794)
1
Iteración 2
q
(2) (1) (1)
p
x1 = 10 − x1 x2 = 10 − (2.1794)(2.8605) = 1.9405
v s
u 57 − x(0)
u
(2) 2 57 − (2.8605)
x2 = t (1)
= = 3.0496
3x1 3(1.9405)
El resumen el proceso iterativo se muestra en la siguiente tabla, donde podemos ver que la
solución es x∗ = [2, 3]T en 9 iteraciones.
4.2. MÉTODOS PARA SISTEMAS NO LINEALES 103
(k) (k)
k x1 x2
0 1.5000 3.5000
1 2.1794 2.8605
2 1.9405 3.0496
3 2.0205 2.9834
4 1.9930 3.0057
5 2.0024 2.9981
6 1.9992 3.0007
7 2.0003 2.9998
8 1.9999 3.0001
9 2.0000 3.0000
Para realizar la ejecución dar en Matlab
Punto_Fijo(@g1, [1.5; 3.5])
Ejemplo 2
Utilice el método de iteración de punto fijo para determinar las raı́ces del sistema de
(0) (0)
ecuaciones dado. Considere como valores iniciales x1 = 0.0 y x2 = 1.0.
√
f1 (x1 , x2 ) = x1 − 2x1 + x2 − 0.5
r
4 − x21
f2 (x1 , x2 ) = x2 −
4
q
(t+1) (t) (t)
x1 = 2x1 + x2 − 0.5
v
u 4 − x(t+1) 2
u
(t+1)
t 1
x2 =
4
104 SISTEMAS DE ECUACIONES
La implementación en Matlab es
function x = g2(x)
q
(1) (0) (0)
p
x1 = 2x1 + x2 − 0.5 = 2(0) + (1) − 0.5 = 0.7071
v
u 4 − x(1) 2 r
u
(1)
t 1 4 − (0.7071)2
x2 = = = 0.9354
4 4
Iteración 2
Con x(1) = [0.7071, 0.9354]T tenemos
q
(2) (1) (1)
p
x1 = 2x1 + x2 − 0.5 = 2(0.7071) + (0.9354) − 0.5 = 1.3600
v
u 4 − x(2) 2 r
u
(2)
t 1 4 − (1.3600)2
x2 = = = 0.7332
4 4
El resumen el proceso iterativo se muestra en la siguiente tabla, donde podemos ver que la
solución es x∗ = [1.9007, 0.3112]T en 8 iteraciones.
(k) (k)
k x1 x2
0 0.0000 1.0000
1 0.7071 0.9354
2 1.3600 0.7332
3 1.7185 0.5116
4 1.8570 0.3713
5 1.8935 0.3220
6 1.8997 0.3127
7 1.9006 0.3114
8 1.9007 0.3112
4.2. MÉTODOS PARA SISTEMAS NO LINEALES 105
f1 (x1 , x2 , · · · , xn ) = 0
f2 (x1 , x2 , · · · , xn ) = 0
.. .
. = ..
fn (x1 , x2 , · · · , xn ) = 0
Utilizando la serie de Taylor podemos hacer una aproximación lineal para una función
(t) (t) (t) (t) (t) (t) (t) (t+1) (t)
fi (x1 +δx1 , x2 +δx2 , · · · , xn +δxn ) en un incremento δxi = xi −xi como:
En forma compacta
h i−1
x(t+1) = x(t) − J(x(t) ) f (x(t) )
while 1
x2 = x1 - inv(J(x1))* f(x1);
if norm((x1-x2)./x2) < 0.0001 break;
else x1 = x2;
end;
4.2. MÉTODOS PARA SISTEMAS NO LINEALES 107
end;
r = x2;
Ejemplo 1
Resolver el siguiente sistema de ecuaciones dado por y cuya gráfica se muestra en la Figura
4.10
10
5
x2
-5
-10
-10 -5 0 5 10
x1
f1 (x1 , x2 ) = x21 + x1 x2 − 10
f2 (x1 , x2 ) = x2 + 3x1 x22 − 57
El Jacobiano es
2x1 + x2 x1
J(x) = 2
3x2 1 + 6x1 x2
y el arreglo de funciones
x21 + x1 x2 − 10
f (x) =
x2 + 3x1 x22 − 57
108 SISTEMAS DE ECUACIONES
" # −1
(1)
x1 1.5000 6.5000 1.5000 −2.5000 2.0360
(1) = − =
x2 3.5000 36.7500 32.5000 1.6250 2.8439
Segunda iteración
" # −1
(2)
x1 2.0360 6.9159 2.0360 −0.0644 1.9987
(2) = − =
x2 2.8439 24.2629 35.7413 −4.7562 3.0023
Tercer iteración
" # −1
(3)
x1 1.9987 6.9997 1.9987 −0.0045 2.0000
(3) = − =
x2 3.0023 27.0412 37.0041 0.0496 3.0000
Cuarta iteración
" # −1
(4)
x1 2.0000 7.0000 2.0000 −0.00000129 2.0000
(4) = − =
x2 3.0000 27.0000 37.0000 −0.00002214 3.0000
Note que solamente 4 iteraciones son necesarias para llegar a la solución x = [2, 3]T
La implementación en Matlab para este ejemplo son:
Para la función tenemos
function f = f1(x)
n = length(x);
f = zeros(n,1);
J = zeros(n, n);
ans =
2.0000
3.0000
Ejemplo 2
Resolver el siguiente sistema de ecuaciones dado por las ecuaciones y cuya solución gráfica
se muestra en la figura 4.11
El Jacobiano es
2x1 − 2 −1
J(x) =
2x1 8x2
y el arreglo de funciones
x2
0
-1
-2
-2 -1 0 1 2
x1
Segunda iteración
" # −1
(2)
x1 −0.2500 2.5000 −1.0000 0.0625 −0.2226
(2) = − =
x2 1.0000 −0.5000 8.0000 0.0625 0.9939
Tercer iteración
" # −1
(3)
x1 −0.2226 −2.4451 −1.0000 −0.0008 −0.2222
(3) = − =
x2 0.9939 −0.4451 7.9512 0.0009 0.9938
Cuarta iteración
" # −1
(4)
x1 −0.2222 −2.4444 −1.0000 −0.00002300 −0.2222
(4) = − =
x2 0.9938 −0.4444 7.9505 0.00000038 0.9938
function f = f2(x)
n = length(x);
f = zeros(n,1);
El Jacobiano
function y = J2(x)
n = length(x);
y = zeros(n, n);
y(1,1) = 2*x(1) -2;
y(1,2) = -2;
y(2,1) = 2*x(1);
y(2,2) = 8*x(2);
end
y la ejecución
ans =
-0.2222
0.9938
4.2.3. Ejemplo
Para el circuito que se muestra en la figura 4.12, esta constituido por dos mallas y dos
cargas. Se sea calcular la corriente que circula por cada uno de los elementos y la potencia
que debe suministrar la fuente de voltaje.
V1 − R1 (i1 + i2 ) − L1 /i1 = 0
V1 − R1 (i1 + i2 ) − R2 i2 − L2 /i2 = 0
112 SISTEMAS DE ECUACIONES
V i1 − R1 (i1 + i2 )i1 − L1
F = =0
V i2 − R1 (i1 + i2 )i2 − R2 i22 − L2
function f = Fun(i)
N = length(i);
f = zeros(N,1);
V = 100;
R1 = 2;
R2 = 3;
L1 = 100;
L2 = 200;
V − R1 (2i1 + i2 ) −i1 R1
J=
−i2 R1 V1 − R1 (i1 + 2i2 ) − 2R2 i2
function J = JacSistema(i)
V = 100;
R1 = 2;
R2 = 3;
%L1 = 100;
%L2 = 200;
4.2. MÉTODOS PARA SISTEMAS NO LINEALES 113
I =
1.0728
2.3185
Potencia de la fuente PV = V (i1 + i2 ) = 100(1.0728 + 2.3185) = +339.1282
Potencia consumida por R1 es PR1 = −R1 (i1 + i2 )2 = −2(1.0728 + 2.3185)2 = −23.0016
Potencia consumida por R2 es PR1 = −R2 i22 = −3(2.3185)2 = −16.1266
La potencia consumida por las cargas es L1 + L2 = −300.
La suma de la potencia es cero.
Ejemplo
f (x(k) )
x(k+1) = x(k) −
f 0 (x(k+1) )
10
(k+1) (k) x(k) −1
x =x − 9
10 x(k)
La búsqueda de la sección dorada es una técnica simple de búsqueda de una sola variable
de propósito general. La clave para hacer eficiente este procedimiento es la mejor elección
de los puntos intermedios. Esta meta se puede alcanzar al especificar que las siguientes dos
condiciones se cumplan (ver [?]).
l0 = l1 + l2 (5.9)
l1 l2
= (5.10)
l0 l1
l2 2
Definimos R = l1√y sustituimos en la ecuación 5.11 para obtener R + R − 1, cuya solución
positiva es R = 5−1
2 . R es definido como la razón dorada y fue un número ampliamente
utilizado por los Griegos en su arquitectura.
El algoritmo de la razón dorada es:
La implementación en Matlab es:
function y = Razon_Dorada(f, xl, xu)
R = (sqrt(5) -1)/2
t = 0;
115
116 OPTIMIZACIÓN
5.1.1. Ejemplo 1
ans =
1.4276
5.1.2. Ejemplo 2
2
Use la búsqueda de la sección dorada para encontrar el mı́nimo de la función f (x) = −xe−x
en el intervalo [0,4].
Los resultados de este ejemplo se muestran en la siguiente tabla
k xl fl x2 f2 x1 f1 xu fu
0 0.0000 0.0000 1.5279 -0.1480 2.4721 -0.0055 4.0000 -0.0000
1 0.0000 0.0000 0.9443 -0.3871 1.5279 -0.1480 2.4721 -0.0055
2 0.0000 0.0000 0.5836 -0.4151 0.9443 -0.3871 1.5279 -0.1480
3 0.0000 0.0000 0.3607 -0.3167 0.5836 -0.4151 0.9443 -0.3871
4 0.3607 -0.3167 0.5836 -0.4151 0.7214 -0.4287 0.9443 -0.3871
... ... ... ... ... ... ... ... ...
22 0.7071 -0.4289 0.7071 -0.4289 0.7071 -0.4289 0.7072 -0.4289
ans =
0.7071
llamaremos a x(k+1) el mı́nimo de q(x). Para calcularlo, es necesario que la matriz f 00 (x(k) )
sea positivo. La función q(x) es entonces estrictamente convexa y tiene un mı́nimo único
en xk+1 dado por
q 0 (x(k+1) ) = 0
Esto da lugar sistema lineal de ecuaciones:
f 0 (x(k) )
x(k+1) = x(k) − (5.12)
f 00 (x(k) )
La implementación en Matlab es
function y = Newton_1d(derf, der2f, x)
x1 = x;
x2 = x;
while 1
delta = derf(x1)/der2f(x1);
x2 = x1 - delta;
disp([x1, derf(x1), der2f(x1), x2]);
5.2. OPTIMIZACIÓN NO-RESTRINGIDA. MÉTODO DE NEWTON 119
5.2.2. Ejemplo 1
x2
Calcular el máximo de la función f (x) = −2seno(x) + 10 utilizando el método de Newton
con un valor inicial x0 = 0.5.
x
f 0 (x) = − 2cos(x)
5
1
f 00 (x) = + 2sin(x)
5
k = 0
−1.6551
x(1) = 0.5000 − = 1.9282
1.1588
k = 1
(2) 1.0854
x = 1.9282 − = 1.4047
2.0735
k = 2
(3) −0.0495
x = 1.4047 − = 1.4275
2.1725
k = 3
8.20126 × 10−5
x(4) = 1.4275 − = 1.4275
2.1795
k = 4
2.02094 × 10−10
x(5) = 1.4275 − = 1.4275
2.1795
ans =
1.4276
function y = der_fun_1(x)
y = x/5 - 2*cos(x);
function y = d2f1(x)
y = 1/5 + 2*sin(x);
5.2.3. Ejemplo 2
2
Dada la función f (x) = −xe−x , calcular el mı́nimo utilizando el método de Newton para
un valor inicial x0 = −1.0.
Para resolver tenemos que calcular f 0 (x) y f 00 (x)
2
f 0 (x) = (2x2 − 1)e−x
5.2. OPTIMIZACIÓN NO-RESTRINGIDA. MÉTODO DE NEWTON 121
2
f 00 (x) = (6x − 4x3 )e−x
Para soluciona hacemos
k = 0
(1) 0.3679
x = −1.0000 − = −0.5000
−0.7358
k = 1
−0.3894
x(2) = −0.5000 − = −0.7000
−1.9470
k = 2
(3) −0.0123
x = −0.7000 − = −0.7071
−1.7325
k = 3
−0.0001
x(4) = −0.7071 − = −0.7071
−1.7156
k = 4
(5) −0.0000
x = −0.7071 − = −0.7071
−1.7155
ans =
-0.7071
function y = der_fun_2(x)
y = (2*x^2 -1)*exp(-x^2);
function y = der2_fun_2(x)
y = (6*x-4*x^3)*exp(-x^2);
Consideremos que la función f es de clase dos, es decir que la segunda derivada puede ser
calculada. La idea consiste en reemplazar en la vecindad del punto xk de la función f por
una aproximación cuadrática q(x) dada por
1
q(x) = f (x(k) ) + ∇f T (x(k) )(x − x(k) ) + (x − x(k) )T ∇2 f (x(k) )(x − x(k) )
2
122 OPTIMIZACIÓN
∇q (x(k+1) ) = 0
h i−1
x(k+1) = x(k) − ∇2 f (x(k) ) ∇f (x(k) ) (5.13)
while 1
d= inv(H(x1))* g(x1);
x2 = x1 - d;
if norm(d) < 0.0001 break;
else x1 = x2;
end;
end;
r = x2;
5.2.5. Ejemplo 1
2 2 (0) (0)
Minimizar es f (x) = x1 e−x1 −x2 , con un punto inicial x1 = −0.5, x2 = −0.1 aplicando el
Método de Newton.
El vector gradiente para esta función es:
" 2 2
#
(1 − 2x21 )e(−x1 −x2 )
∇f (x1 , x2 ) = 2 2
−2x1 x2 e(−x1 −x2 )
function g = Gradiente_f1(x)
n = length(x);
g = zeros(n, 1);
val_e = exp(-x(1)^2-x(2)^2);
g(1) = val_e*(1-2*x(1)^2);
g(2) = val_e*(-2*x(1)*x(2));
El Hessiano es:
" 2 2 2 2
#
2 (−6x1 + 4x31 )e(−x1 −x2 ) (−2x2 + 4x21 x2 )e(−x1 −x2 )
∇ f (x1 , x2 ) = 2 2 2 2
(−2x2 + 4x21 x2 )e(−x1 −x2 ) (−2x1 + 4x1 x22 )e(−x1 −x2 )
function H = Hessiano_f1(x)
n = length(x);
H = zeros(n, n);
val_e = exp(-x(1)^2-x(2)^2);
H(1,1) = val_e*(-6*x(1)+4*x(1)^3);
H(1,2) = val_e*(-2*x(2)+4*x(1)^2*x(2));
H(2,1) = H(1,2);
H(2,2) = val_e*(-2*x(1)+4*x(1)*x(2)^2);
Primer iteración
" # −1
(1)
x1 −0.5000 1.9276 0.0771 0.3855 −0.7049
(1) = − =
x2 −0.1000 0.0771 0.7556 −0.0771 0.0230
Segunda iteración
124 OPTIMIZACIÓN
" # −1
(2)
x1 −0.7049 1.7199 −0.0002 0.0038 −0.7071
(2) = − =
x2 0.0230 −0.0002 0.8564 0.0197 −0.0000
Tercer iteración
" # −1
(3)
x1 −0.7071 1.7155 0.0000 0.0180 −4 −0.7071
(3) = − × 10 =
x2 −0.0000 0.0000 0.8578 −0.2114 −0.0000
k f (x(k) )
0 -0.3855
1 -0.4287
2 -0.4289
3 -0.4289
ans =
-0.7071
0.0000
0.5 2
0.4
0.3 1
0.2
0.1 0
0
−1
−0.1
−0.2
−2
−0.3 4
−0.4 2
−3
−0.5 0
−4 −3 −2
−2 −1 0 1 −4
2 3 −4 −4 −3 −2 −1 0 1 2 3 4
4
2 2
Figura 5.13: Mı́nimo para la función f (x1 , x2 ) = x1 e(−x1 −x2 )
5.2.6. Ejemplo 2
(0)
Minimizar es f (x) = −3.5x1 − 2x2 − x22 + x41 + 2x1 x2 + x42 , con un punto inicial x1 = 1.0,
(0)
x2 = 1.0 aplicando el Método de Newton.
El vector gradiente para esta función es:
12x21
2 2
∇ f (x1 , x2 ) =
2 −2 + 12x22
function H = Hessiano_f2(x)
n = length(x);
H = zeros(n, n);
126 OPTIMIZACIÓN
H(1,1) = 12*x(1)^2;
H(1,2) = 2;
H(2,1) = 2;
H(2,2) = -2+12*x(2)^2;
Primer iteración
" # −1
(1)
x1 1 12 2 2.5000 0.8190
(1) = − =
x2 1 2 10 2.0000 0.8362
Segunda iteración
" # −1
(2)
x1 0.8190 8.0485 2.0000 0.3695 0.7820
(2) = − =
x2 0.8362 2.0000 6.3909 0.3044 0.8001
Tercer iteración
" # −1
(3)
x1 0.7820 7.3385 2.0000 0.0132 0.7807
(3) = − =
x2 0.8001 2.0000 5.6828 0.0129 0.7983
cuarta iteración
" # −1
(4)
x1 0.7807 7.3139 2.0000 0.1610 −4 0.7807
(4) = − × 10 =
x2 0.7983 2.0000 5.6483 0.3115 0.7983
ans =
5.2. OPTIMIZACIÓN NO-RESTRINGIDA. MÉTODO DE NEWTON 127
-0.7807
0.7983
En la figura 5.14 se muestras las curvas de nivel correspondientes a este ejemplo las cuales
fueron determinadas utilizando el siguiente código.
1.5
0.5
x2
−0.5
−1
−1.5
−2
−2 −1.5 −1 −0.5 0 0.5 1 1.5 2
x1
Una propiedad importante de este método es que converge en un solo paso cuando se tiene
una función estrictamente cuadrática.
Demostración:
Dada una función cuadrática
1
f (x) = xT Ax + xT b + c
2
128 OPTIMIZACIÓN
x(k+1) = −A−1 b
5.2.8. Ejemplo 3
Dada la función f (x) = 10x21 + x22 y un punto inicial x(0) = [1, 2]T , calcular el mı́nimo
utilizando el algoritmo de Newton.
Para esta función el gradiente y el Hessiano es:
20x1
∇f (x) =
2x2
y el Hessiano es:
20 0
A(x) =
0 2
Aplicando la ecuación 5.13 tenemos
−1
(1) 1 20 0 20 0
x = − =
2 0 2 4 0
5.2.9. Ejemplo 4
2 2 (0) (0)
Minimizar es f (x) = x1 e−x1 −x2 , con un punto inicial x1 = −0.5, x2 = −0.5 aplicando el
Método de Newton.
Primer iteración
" # −1
(1)
x1 −0.5000 1.5163 0.3033 0.3033 −1.0000
(1) = − =
x2 −0.5000 0.3033 0.3033 −0.3033 1.0000
Segunda iteración
5.2. OPTIMIZACIÓN NO-RESTRINGIDA. MÉTODO DE NEWTON 129
" # −1
(2)
x1 −1.0000 0.2707 0.2707 −0.1353 −1.2500
(2) = − =
x2 1.0000 0.2707 −0.2707 0.2707 1.7500
Tercer iteración
" # −1
(3)
x1 −1.2500 −0.0031 0.0729 −0.0208 −1.3535
(3) = − =
x2 1.7500 0.0729 −0.1256 0.0429 2.0314
Cuarta iteración
" # −1
(4)
x1 −1.3535 −0.0046 0.0280 −0.0069 −1.4416
(4) = − =
x2 2.0314 0.0280 −0.0507 0.0142 2.2629
0.5
0.4
0.3
0.2
0.1
−0.1
4
−0.2
−0.3 2
−0.4 0
−0.5 −2
−4 −3 −2 −1 0 1 −4
2 3 4
2 2
Figura 5.15: Función f (x) = x1 e−x1 −x2 .
Consideremos el caso de una función donde se tienen múltiples raı́ces como es el caso de
la función f (x) = (x − 3)5 /5 cuyo primer derivada es f 0 (x) = (x − 3)4 . Note que en este
caso la solución es un polinomio de grado 4 en cuyo caso tendrá cuatro soluciones con
x∗ = 3. Si aplicamos el método de Newton tendremos una convergencia como se muestra
a continuación
k f (x(k) )
1 2.2500
2 2.4375
3 2.5781
4 2.6836
5 2.7627
6 2.8220
7 2.8665
8 2.8999
9 2.9249
10 2.9437
.. ..
. .
44 3.0000
45 3.0000
Si uno desea aplicar el método a una función arbitraria encontraremos algunas dificultades,
esencialmente debido al hecho de que no encontraremos convergencia global. Si el punto
5.2. OPTIMIZACIÓN NO-RESTRINGIDA. MÉTODO DE NEWTON 131
Para comenzar, la aproximación de f (x) dada por q(x) es solamente valida a la vecindad de
xk , el tamaño de paso puede ser controlado a través de una formula iterativa de tipo:
−1
x(k+1) = x(k) − λ(k) ∇2 f (x(k) ) ∇f (x(k) )
donde λ(k) es un escalar, seleccionado por ejemplo, de tal manera que ||x(k+1) −x(k) || no sea
muy largo. También podemos seleccionarlo tal que λ(k) minimice φ(λ(k) ) = f (x(k) +λ(k) d(k) )
en la dirección de:
−1
d(k) = − ∇2 f (x(k) ) ∇f (x(k) )
5.2.11. Ejemplo 5
5
Minimizar f (x) = (x−3)5 utilizando el método de Newton y la modificación planteada
utilizando un valor λ(k) = 2.9. Considere un punto inicial x(0) = 2.
Una alternativa propuesta por Ralston y Rabinowitz (1978) es la de definir una nueva
función u(x), que es el cociente del gradiente de g(x) y su derivada (en una dimensión)
f 0 (x)
u0 (x) =
f 00 (x)
132 OPTIMIZACIÓN
Se puede mostrar que esta función tiene las mismas raı́ces que f 0 (x) y que la multiplicidad
de raı́ces no afectará. La formulación del método de Newton es:
u0 (x)
xk+1 = xk −
u00 (x)
f 00 (x(k) )f 0 (x(k) )
x(k+1) = x(k) −
f 00 (x(k) )f 00 (x(k) ) − f 0 (x(k) )f 000 (x(k) )
Ejemplo
(x−3)5
Para la función f (x) = 5 para un valor inicial x0 = 2 la solución es:
La primer derivada es:
f 0 (x) = (x − 3)4
La segunda derivada
f 00 (x) = 4(x − 3)3
y la tercer derivada
f 000 (x) = 12(x − 3)2
5.3. METODO SIMPLEX 133
(1) × (−4)
x(1) = 2 − =3
(4)2 − (1) ∗ (12)
Note que la solución se da en una sola iteración. Para ejecutar hacer
Newton_1d_modificado(@der_fun_3, @der2_fun_3, @der3_fun_3,2)
Z = c1 x1 + c2 x2 + · · · + cn xn
donde cj es el pago por cada unidad de la j-esima actividad que se lleva a cabo y xj es la
magnitud o cantidad de la j-esima actividad.
Las restricciones se pueden representar en forma general como:
donde ai,j cantidad de i-ésima fuente que se consume por cada unidad de j-ésima actividad
y bi cantidad de la i-ésima fuente que ésta disponible.
134 OPTIMIZACIÓN
Suponga que una planta procesadora de gasolina recibe cada semana una cantidad fija
de materia prima. Esta última se procesa en dos tipos de gasolina de calidad regular y
premium. Estas clases de gasolina son de alta demanda; es decir, se tiene garantizada
su venta y se obtiene diferentes utilidades para la compañı́a. Si embargo su producción
involucra ambas restricciones, tiempo y almacenaje en sitio. Por ejemplo, sólo una de las
clases se puede producir a la vez, y las instalaciones están abiertas solo 80 horas. Además,
existe un limite de almacenamiento para cada uno de los productos. Todos estos factores
se en listan en la siguiente tabla:
Recurso Regular Premium Disponibilidad
Materia Prima 7 m3 /tonelada 11 m3 /tonelada 77 m3 /semana
Tiempo de Producción 10 hr/tonelada 8 hr/tonelada 80 hr/semana
Almacenamiento 9 toneladas 6 toneladas
Aprovechamiento 150 pesos/tonelada 175 pesos/tonelada
Solución
El ingeniero que opera esta planta debe decidir la cantidad a producir de cada gasolina para
maximizar las utilidades. Si las cantidades producidas cada semana de gasolina regular
y premium son designadas x1 y x2 respectivamente, la ganancia total se puede calcular
como
Las restricciones se pueden desarrollar en una forma similar. Por ejemplo el total de gasolina
cruda utilizada se puede calcular como
7x1 + 11x2 ≤ 77
Las restricciones restantes se pueden desarrollar en una forma similar, la formulación total
resultante para la PL está dada por
Sujeta a
5.3. METODO SIMPLEX 135
7x1 + 11x2 ≤ 77
10x1 + 8x2 ≤ 80
x1 ≤ 9
x2 ≤ 6
x1 ≥ 0
x2 ≥ 0
7x1 + 11x2 ≤ 77
Se puede definir una variable h1 como la cantidad de gasolina cruda que no se usa para
una nivel de producción en particular (x1 , x2 ). Si esta cantidad se agrega al lado izquierdo
de la restricción, forma la relación exacta.
7x1 + 11x2 + h1 = 77
Ahora se reconoce lo que la variable de holgura nos indicaba. Si esta es positiva, significa
que tiene algo de holgura para esta restricción. Esto es, se cuenta con algo más de recursos
que no han sido utilizado por completo. Si es negativa nos indica que nos hemos excedido en
la restricción. Finalmente, si es cero denota que se cumplió exactamente con la restricción.
Es decir, se dispuso de todo el recurso puesto que esta es la condición donde las lı́neas de
restricción se interceptan, la variable de holgura proporciona un medio para determinar
puntos extremos.
Una variable de holgura diferente se desarrolla para cada ecuación restringida resultando
en lo que se llama versión completamente aumentada.
136 OPTIMIZACIÓN
Z = 150x1 + 175x2
Sujeta a
7x1 +11x2 +h1 = 77
10x1 +8x2 +h2 = 80
x1 +h3 =9
x2 +h4 = 6
Advierta como se han formulado de igual modo las cuatro ecuaciones, de tal manera que
las incógnitas están alineadas en las columnas. Se hizo ası́ para resaltar que ahora se trata
de un sistema de ecuaciones algebraicas lineales.
Los pasos del Método Simplex son los siguientes:
1. Utilizando la forma estándar, determinar una solución básica factible inicial igualando
a las n − m variables igual a cero (el origen).
2. Seleccionar la variable de entrada de las variables no básicas que al incrementar su
valor pueda mejorar el valor en la función objetivo. Cuando no exista esta situación, la
solución actual es la óptima; si no, ir al siguiente paso. Esta selección se hada tomando
el j-ésimo coeficiente de la función objetivo con el coeficiente cj mas grande.
3. Seleccionar la variable de salida de las variables básicas actuales. Tomamos la i-ésima
variable tal que bi /ai,j tenga el coeficiente mas pequeño no negativo.
4. Determinar la nueva solución al hacer la variable de entrada básica y la variable
de salida no básica, ir al paso 2 (actualizar). La solución se obtiene haciendo una
iteración de Gauss-Jordan.
La implementación en Matlab es:
function x = Simplex(C, A, b)
N = length(b);
B = [A, diag(ones(N,1)), b];
B = [B; C, zeros(1, N+1)]
M = length(B(1,:));
while 1
[mm, m] = max(B(N+1,:)) ;
[mn, n] = imin(B(1:N, M)./B(1:N, m));
if mm == 0
break;
5.3. METODO SIMPLEX 137
end;
for k = 1: N+1
if n ~= k
B(k,:) = B(k,:) - B(n,:)*B(k,m);
end;
end;
end;
x=B;
5.3.3. Ejemplo 1
Z = 150x1 + 175x2
Sujeta a
7x1 +11x2 +h1 = 77
10x1 +8x2 +h2 = 80
x1 +h3 =9
x2 +h4 = 6
Comenzamos por escribir la forma estándar del problema seleccionando como solución
básica factible x1 = 0, x2 = 0, h1 = 77, h2 = 80, h3 = 9 y h4 = 6. Note que las variables
de holgura tiene los valores que hacen las desigualdades ver como igualdades
7.00 11.00 1 0 0 0 77.00
10.00 8.00 0 1 0 0 80.00
1.00 0 0 0 1 0 9.00
0 1.00 0 0 0 1 6.00
150.00 175.00 0 0 0 0 0
Note que en nuestra formulación estándar la función objetivo aparece con los coeficientes
negativos, por esta razón repetiremos el procedimiento hasta que no tengamos ningún
término negativo en el renglón correspondiente a la función de costo.
Primer iteración
138 OPTIMIZACIÓN
10
x2
2
−2
−4
0 1 2 3 4 5 6 7 8 9 10
x1
Dado que el costo mayor es 175 comenzamos por introducir la variable x2 por lo tanto
la columna es la 2 y sacar la variable de holgura h4 dado que esta restricción es la mas
cercana del punto básico. Por lo tanto el pivote es 4, 2
7.00 11.00 1 0 0 0 77.00 7
10.00 8.00 0 1 0 0 80.00 10
1.00 0 0 0 1 0 9.00 ∞
0 1.00 0 0 0 1 6.00 6
150.00 175.00 0 0 0 0 0
0 −11.00
7.00 0 1.00 0 11.00
10.00 0 0 1.00 0 −8.00 32.00
1.00 0 0 0 1.00 0 9.00
0 1.00 0 0 0 1.00 6.00
150.00 0 0 0 0 −175.00 −1050.00
Segunda Iteración
La siguiente variable a introducir es x1 dado que el mayor de los costos es 150 y sacar la
variable de holgura h1 dado que es la mas cercana de nuestro punto extremo. Por lo tanto
5.3. METODO SIMPLEX 139
0 −11.00
7.00 0 1.00 0 11.00 1.57
10.00 0 0 1.00 0 −8.00 32.00
3.2
1.00 0 0 0 1.00 0 9.00
9
0 1.00 0 0 0 1.00 6.00 ∞
150.00 0 0 0 0 −175.00 −1050.00
0 −1.57
1.00 0 0.14 0 1.57
0 0 −1.43 1.00 0 7.71 16.29
0 0 −0.14 0 1.00 1.57 7.43
0 1.00 0 0 0 1.00 6.00
0 0 −21.43 0 0 60.71 −1285.71
Tercer iteración
En la función de Costo tenemos un término positivo de 60.71 corresponden a la variable de
holgura h4 , por lo tanto introducimos la variable h4 y sacamos la variable h2 . Por lo tanto
el pivote para esta iteración es 2, 6
0 −1.57
1.00 0 0.14 0 1.57 −1.00
0 0 −1.43 1.00 0 7.71 16.29
2.11
0 0 −0.14 0 1.00 1.57 7.43
4.73
0 1.00 0 0 0 1.00 6.00 6
0 0 −21.43 0 0 60.71 −1285.71
0 −0.15
1.00 0.20 0 0 4.89
0 0 −0.19 0.13 0 1.00 2.11
0 0 0.15 −0.20 1.00 0 4.11
0 1.00 0.19 −0.13 0 0 3.89
0 0 −10.19 −7.87 0 0 −1413.89
Dado que no tenemos ningún termino de costo negativo, la solución la podemos obtener
de la formulación de la siguiente manera. Para x1 la solución esta en el renglón 1 dado
que hay un 1 en la posición 1,1 y es x1 = 4.89. Para x2 el 1 esta en la posición 4 por lo
tanto la solución es x2 = 3.89. Para h1 no tenemos un 1 en la columna correspondiente y
de igual manera para h2 , por lo tanto tenemos h1 = 0 y h2 = 0. Para h3 tenemos un 1
140 OPTIMIZACIÓN
B =
B =
5.3.4. Ejemplo 2
Maximizar la función
Z = 6x1 + 4x2
Sujeta a
2x1 + 2x2 ≤ 160
x1 + 2x2 ≤ 120
4x1 + 2x2 ≤ 280
2.00 2.00 1.00 0 0 160.00
1.00 2.00 0 1.00 0 120.00
4.00 2.00 0 0 1.00 280.00
6.00 4.00 0 0 0 0
5.3. METODO SIMPLEX 141
140
120
100
80
60
x2
40
20
−20
−40
−60
0 10 20 30 40 50 60 70 80 90 100
x1
Primer iteración
Tomamos como pivote el renglón 3 y columna 1
2.00 2.00 1.00 0 0 160.00 80.0
1.00 2.00 0 1.00 0 120.00 120.0
4.00 2.00 0 0 1.00 280.00 70
6.00 4.00 0 0 0 0
0 1.00 1.00 0 −0.50 20.00
0 1.50 0 1.00 −0.25 50.00
1.00 0.50 0 0 0.25 70.00
0 1.00 0 0 −1.50 −420.00
Segunda Iteración
Seleccionamos como pivote al renglón 1 columna 2.
0 1.00 1.00 0 −0.50 20.00 20.00
0 1.50 0 1.00 −0.25 50.00 33.33
1.00 0.50 0 0 0.25 70.00 70.00
0 1.00 0 0 −1.50 −420.00
142 OPTIMIZACIÓN
0 1.00 1.00 0 −0.50 20.00
0 0 −1.50 1.00 0.50 20.00
1.00 0 −0.50 0 0.50 60.00
0 0 −1.00 0 −1.00 −440.00
Dado que no tenemos términos negativos en el renglón de costos terminamos con solución
x1 = 60, x2 = 20, h1 = 0, h2 = 20, h3 = 0 y costo Z = 440
B =
2 2 1 0 0 160
1 2 0 1 0 120
4 2 0 0 1 280
6 4 0 0 0 0
ans =
>>
5.3.5. Ejemplo 3
Maximizar la función
5.3. METODO SIMPLEX 143
Z = 3x1 + 4x2
Sujeta a
2x1 + 3x2 ≤ 1200
2x1 + x2 ≤ 1000
4x2 ≤ 800
2.00 3.00 1.00 0 0 1200.00
2.00 1.00 0 1.00 0 1000.00
0 4.00 0 0 1.00 800.00
3.00 4.00 0 0 0 0
Primer Iteración
Tomamos como pivote el renglón 3 y columna 2
2.00 3.00 1.00 0 0 1200.00 400.00
2.00 1.00 0 1.00 0 1000.00 1000.00
0 4.00 0 0 1.00 800.00 200.00
3.00 4.00 0 0 0 0
2.00 0 1.00 0 −0.75 600.00
2.00
0 0 1.00 −0.25 800.00
0 1.00 0 0 0.25 200.00
3.00 0 0 0 −1.00 −800.00
Segunda Iteración
Tomamos como pivote el renglón 1 y columna 1
2.00 0 1.00 0 −0.75 600.00 300.00
2.00
0 0 1.00 −0.25 800.00 400.00
0 1.00 0 0 0.25 200.00 ∞
3.00 0 0 0 −1.00 −800.00
1.00 0 0.50 0 −0.38 300.00
0 0 −1.00 1.00 0.50 200.00
0 1.00 0 0 0.25 200.00
0 0 −1.50 0 0.12 −1700.00
Tercer iteración
Tomamos como pivote el renglón 2 la columna 5
1.00 0 0.50 0 −0.38 300.00 −789.47
0 0 −1.00 1.00 0.50 200.00
400.00
0 1.00 0 0 0.25 200.00 800.00
0 0 −1.50 0 0.12 −1700.00
1.00 0 −0.25 0.75 0 450.00
0 0 −2.00 2.00 1.00 400.00
0 1.00 0.50 −0.50 0 100.00
0 0 −1.25 −0.25 0 −1750.00
B =
B =
1000
800
600
x2
400
200
−200
0 100 200 300 400 500 600
x1
El ejemplo más simple de una aproximación por mı́nimos cuadrados es mediante el ajuste
de un conjunto de pares de observaciones: [x1 , y1 ], [x2 , y2 ], [x3 , y3 ],..., [xn , yn ] a una lı́nea
recta. La expresión matemática de la lı́nea recta es:
y = a0 + a1 x + e
donde a0 y a1 , son los coeficientes que representan el cruce con el eje y y la pendiente de
la lı́nea y e representa el error de nuestra aproximación. En la figura ??, se muestra un
ejemplo de puntos a los que se les desea ajustar a una linea recta.
y
6
x
2 3 4 5 6
147
148 AJUSTE DE CURVAS
Una estrategia, para ajustar a la mejor lı́nea, es minimizar la suma al cuadrado de los
errores para todos los datos disponibles
n
X n
X
E(a) = e2i = (yi − a0 − a1 xi )2
i=1 i=1
e1
e2
E(a) = [e1 , e2 , · · · , en ]
..
.
en
a0
ei = yi − [1, xi ]
a1
y en general
e1 y1 1 x1
e2 y2 1 x2
a0
e3 =
y3 −
1 x3
.. .. a1
.. ..
. . . .
en yn 1 xn
∂E(a) ∂
= [y − M a]T [y − M a] = 0
∂a ∂a
∂E(a)
= −2M T [y − M a] = 0
∂a
6.1. REGRESIÓN LINEAL POR EL MÉTODO DE MÍNIMOS CUADRADOS 149
[M T M ]a = M T y
Pn Pn Pn
1 x a0 yi
Pni=1 Pni=1 2i = Pn
i=1
i=1 xi i=1 xi a1 i=1 xi yi
N = length(x);
M = ones(N, 1);
for k=1:grado
M = [M,x.^k];
end
a=inv(M’*M)*M’*y;
end
6.1.2. Ejemplo 1
x y
1.00 0.50
2.00 2.50
3.00 2.00
4.00 4.00
5.00 3.50
6.00 6.00
7.00 5.50
1 1.00
1 2.00
1 3.00
M =
1 4.00
1 5.00
1 6.00
1 7.00
1 1.00
1 2.00
1 3.00
1 1 1 1 1 1 1 7.00 28.00
MT M =
1 4.00 =
1.00 2.00 3.00 4.00 5.00 6.00 7.00 28.00 140.00
1 5.00
1 6.00
1 7.00
0.50
2.50
2.00
1 1 1 1 1 1 1 24.00
MT y =
4.00 =
1.00 2.00 3.00 4.00 5.00 6.00 7.00 119.50
3.50
6.00
5.50
7.00 28.00 a0 24.00
=
28.00 140.00 a1 119.50
y
6
x
1 2 3 4 5 6 7
Ma = y
[M T M ]a = M T y (6.14)
a = [M T M ]−1 [M T y]
152 AJUSTE DE CURVAS
6.1.4. Ejemplo 2
6.00 15.00 55.00 a0 152.60
15.00 55.00 225.00 a1 = 585.60
55.00 225.00 979.00 a2 2488.80
El modo más simple de interpolación es conectar dos puntos con una lı́nea recta. Esta técni-
ca, llamada interpolación lineal, la podemos representar por la siguiente formulación, la cual
se calcula considerando que se tienen dos puntos P1 = [x1 , f (x1 )]T y P0 = [x0 , f (x0 )]T
6.2. INTERPOLACIÓN LINEAL 153
60
50
40
30
20
x
1 2 3 4 5
f (x1 ) − f (x0 )
f (x) = f (x0 ) + (x − x0 )
x1 − x0
function y = Interpolacion_Lineal(x0, x, y)
N =length(x);
for k=1:N-1
if x0 >= x(k) && x0 <= x(k+1) break;
end
end
end
154 AJUSTE DE CURVAS
6.2.1. Ejemplo 1
x y
0.00 2.10
1.00 7.70
2.00 13.60
3.00 27.20
4.00 40.90
5.00 61.10
Implementar el código correspondiente para graficar los puntos intermedios a los valores
dados utilizando interpolación lineal
x = [0,1,2,3,4,5];
y = [2.1, 7.70, 13.60, 27.20, 40.90, 61.10];
x_nva = 0:0.01:5;
N = length(x_nva);
y_nva = zeros(N, 1);
for k=1:N
y_nva(k) = Interpolacion_Lineal(x_nva(k), x, y);
end;
El error que se observa en la figura 6.22, se debe a que suponemos que los puntos se unen por
lineas. Una manera resolver este problema es suponer una función polinomial cuadrática
tomando al menos tres puntos para tal propósito. Una forma de introducir tres puntos en
una función cuadrática es mediante la siguiente ecuación
6.3. INTERPOLACIÓN CUADRÁTICA 155
70
60
50
40
f(x)
30
20
10
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x
q(x) = b0 + b1 (x − x0 ) + b2 (x − x0 )(x − x1 )
por lo tanto
b0 = f (x0 )
despejando tenemos
f (x1 ) − f (x0 )
b1 =
x1 − x0
156 AJUSTE DE CURVAS
f (x1 ) − f (x0 )
f (x2 ) = f (x0 ) + (x2 − x0 ) + b2 (x2 − x0 )(x2 − x1 )
x1 − x0
despejando a b2
x2 −x0
f (x2 ) − f (x1 ) + (f (x1 ) − f (x0 )) 1 − x1 −x0
b2 =
(x2 − x0 )(x2 − x1 )
x2 −x1
f (x2 ) − f (x1 ) − (f (x1 ) − f (x0 )) x1 −x0
b2 =
(x2 − x0 )(x2 − x1 )
finalmente obtenemos
4 x4 f (x4 ) f (x4 )
6.3.1. Ejemplo 1
b0 = 0
158 AJUSTE DE CURVAS
El coeficiente b2 tenemos
1.791759−1.386294
6−4 − 0.4620981
b2 = = −0.0518731
6−1
En Forma Tabular
q(x) = b0 + b1 (x − x0 ) + b2 (x − x0 )(x − x1 )
En Matlab dar
ans =
0.5658
6.3. INTERPOLACIÓN CUADRÁTICA 159
6.3.2. Ejemplo 2
Hacer una interpolación cuadrática de los datos y comparar con la interpolación lineal
x = [0,1,2,3,4,5];
y = [2.1, 7.70, 13.60, 27.20, 40.90, 61.10];
x_nva = 0:0.01:5;
grado = 2;
N = length(x_nva);
160 AJUSTE DE CURVAS
M = length(x);
y_nva = zeros(N, 1);
for n=1:N
for m=1:M-1
if x_nva(n) >= x(m) && x_nva(n) <= x(m+1) break;
end;
end;
l = m+grado;
if l > M
l = M;
end;
Las formulaciones anteriores pueden ser generalizadas para ajustar un polinomio de n-ésimo
orden a n + 1 datos. El polinomio de n-ésimo orden es
Como se hizo antes con las interpolaciones lineales y cuadráticas, los puntos de los datos
evaluaban los coeficientes b0 , b1 , · · · , bn . Para un polinomio de n-ésimo orden se requiere
n + 1 puntos: [x0 , f (x0 )], [x1 , f (x1 )], ..., [xn , f (xn )]. Usamos estos datos y las siguientes
ecuaciones para evaluar los coeficientes
6.4. FORMULAS DE INTERPOLACIÓN DE NEWTON 161
70
60
50
40
f(x)
30
20
10
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x
b0 = f (x0 )
b1 = f [x1, x0 ]
b2 = f [x2 , x1 , x0 ]
..
.
bn = f [xn , xn−1 , · · · , x1 , x0 ]
donde las evaluaciones de la función puestas entre paréntesis son diferencias divididas
finitas. Por ejemplo, la primera diferencia dividida finita se representa por lo general co-
mo
f (xi ) − f (xj )
f [xi , xj ] =
xi − xj
La segunda diferencia dividida finita, la cual representa la diferencia de las dos primeras
diferencias divididas, se expresa por lo general como
f [xi , xj ] − f [xj , xk ]
f [xi , xj , xk ] =
xi − xk
162 AJUSTE DE CURVAS
Estas diferencias pueden usarse para evaluar los coeficientes en la ecuación 6.15, las cuales
entonces se sustituirán en la siguiente ecuación, para ası́ obtener el polinomio de interpo-
lación
f = zeros(N, N);
for n=1:N
f(n, 1) = y(n);
end;
for m = 2:N
for n = 1:N+1-m
f(n,m)=(f(n+1,m-1)-f(n, m-1))/(x(n+m-1) - x(n));
end;
end;
yint = f(1,1);
6.4. FORMULAS DE INTERPOLACIÓN DE NEWTON 163
dx = 1;
for n=2:N
dx = dx*(xi-x(n-1));
yint = yint + f(1,n)*dx;
end;
end
6.4.1. Ejemplo 1
Calcular el logaritmo de 2 utilizando la interpolación de Newton y los valores [1, 0], [4, 1.386294],
[6, 1.791759] y [5, 1.609438]
La solución la llevaremos a cabo de forma tabular
i xi f (xi ) Primero Segundo Tercero
b0 b1 b2 b3
0 1 0.0000 0.4621 -0.0519 0.0079
1 4 1.3863 0.2027 -0.0204
2 6 1.7918 0.1823
3 5 1.6094
Para 4 puntos el polinomio de Newton de tercer orden es
6.4.2. Ejemplo 2
Hacer una interpolación utilizando polinomios de Newton de quinto grado de los datos y
comparar con la interpolación lineal y cuadrática
x = [0,1,2,3,4,5];
y = [2.1, 7.70, 13.60, 27.20, 40.90, 61.10];
x_nva = 0:0.01:5;
grado = 5;
N = length(x_nva);
M = length(x);
y_nva = zeros(N, 1);
for n=1:N
for m=1:M-1
if x_nva(n) >= x(m) && x_nva(n) <= x(m+1) break;
end;
end;
l = m+grado;
if l > M
l = M;
end;
70
60
50
40
f(x)
30
20
10
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
x
n
X
fn (x) = Li (x)f (xi )
i=0
donde
n
Y x − xj
Li (x) =
xi − xj
j=0
j 6= i
x − x1 x − x0
f1 (x) = f (x0 ) + f (x1 )
x0 − x1 x1 − x0
suma = 0;
N = length(x);
for n=1:N
producto = y(n);
for m = 1:N
if n~=m
producto = producto*(xint -x(m))/(x(n) - x(m));
end;
end;
suma = suma + producto;
end;
yint = suma;
end
6.5.1. Ejemplo 1
Use una interpolación del polinomio de Lagrange de primer y segundo orden para evaluar
ln(2) con base en los siguientes datos [1, 0], [4, 1.386294] y [6, 1.791759]
La solución lineal n = 1 es
x−4 x−1
f1 (x) = 0+ 1.386294 = −0.462098 + 0.462098x
1−4 4−1
2−4 2−1
f1 (2) = 0+ 1.386294 = 0.4620981
1−4 4−1
Como era de esperar, ambos resultados concuerdan con los que se obtuvieron utilizando
interpolación utilizando polinomios de Newton.
6.5.2. Ejemplo 2
f3 (1.4) = 0.322619
Diferenciación e Integración
df (x) f (x) − f (x − h)
= lı́m
dx h→0 h
df (x) f (x) − f (x − h)
≈
dx h
df (x) f (x + h) − f (x)
≈
dx h
Considerando que los incrementos se dan hacia adelante y hacia atrás, podemos dar una
representación de la derivada centrada como
df (x) f (x + h) − f (x − h)
≈
dx 2h
169
170 DIFERENCIACIÓN E INTEGRACIÓN
A = (b − a)f (a)
Z b Z b
I= f (x)dx ≈ f (a)dx = f (a)x|ba = f (a) ∗ (b − a)
a a
7.3.1. Ejemplo
Para la función f (x) = 0.2 + 25x − 200x2 + 675x3 − 900x4 + 400x5 , calcular la integral
utilizando el método de barras en el intervalo a = 0 b = 0.8 .
En Matlab
>> Barras(@f1, 0, 0.8, 1)
ans =
0.1600
Para una mejor aproximación podemos hacer N divisiones de la región de tamaño h y
aproximar la integral como:
Z b N
X −1
f (x)dx ≈ f (a + kh) ∗ h
a k=0
7.4. INTEGRACIÓN POR EL MÉTODO DE TRAPEZOIDES 171
h = abs(b-a)/N;
suma = 0;
for k=0:N-1
suma = suma + f(a+h*k);
end;
I = suma*h;
end
Suponer que todos los rectángulos son de altura constante es una suposición fuerte. En
lugar de ello supondremos, para este método, que los rectángulos varı́an linealmente de
acuerdo con la siguiente ecuación
(x − a)
f (x) = f (a) + (f (b) − f (a))
b−a
f (b) + f (a)
I≈ (b − a)
2
7.4.1. Ejemplo
Para la función f (x) = 0.2 + 25x − 200x2 + 675x3 − 900x4 + 400x5 , calcular la integral
utilizando el método de la Regla Trapezoidal en el intervalo a = 0 b = 0.8 .
En Matlab la solución es
ans =
0.1728
PN −1
f (a) + 2 k=1 f (a + kh) + f (b)
I ≈ (b − a)
2N
function I = Regla_Trapezoidal(f, a, b, N)
h = abs(b-a)/N;
suma = f(a);
for k=1:N-1
suma = suma + 2*f(a+h*k);
end;
suma = suma + f(b);
I = (b-a)*suma/(2*N);
end
7.5. INTEGRACIÓN POR EL MÉTODO DE REGLA SIMPSON 1/3 173
En general cuando se utiliza una función de interpolación de mayor grado la diferencia entre
los valores estimados y los reales se vuelve pequeña. Para este método en lugar se suponer
que la función se aproxima por lineas haremos la aproximación utilizando un polinomio
de segundo orden. Pare este método utilizaremos los polinomios de Lagrange de segundo
orden dado por
Z b
f (x0 ) + 4f (x1 ) + f (x2 )
I≈ f (x)dx = (b − a)
a 6
7.5.1. Ejemplo
Para la función f (x) = 0.2 + 25x − 200x2 + 675x3 − 900x4 + 400x5 , calcular la integral
utilizando el método Simpson 1/3 en el intervalo a = 0 b = 0.8 .
ans =
1.3675
La implementación para N divisiones de tamaño h es:
PN −1 PN −1
f (xa ) + 4 k=1,3,5,··· f (a + k ∗ h) + 2 k=2,4,6,··· f (a + k ∗ h) + f (b)
I ≈ (b − a)
3N
y la implementación en Matlab es:
174 DIFERENCIACIÓN E INTEGRACIÓN
function I = Simpson13(f, a, b, N)
h = abs(b-a)/N;
s_par = 0;
s_impar = 0;
for k=1:N-1
if mod(k,2) == 1
s_impar = s_impar + f(a+h*k);
else
s_par = s_par + f(a+h*k);
end;
end;
end
(x − x1 )(x − x2 )(x − x3 )
f (x) = f (x0 )
(x0 − x1 )(x0 − x2 )(x0 − x3 )
(x − x0 )(x − x2 )(x − x3 )
+ f (x1 )
(x1 − x0 )(x1 − x2 )(x1 − x3 )
(x − x0 )(x − x1 )(x − x3 )
+ f (x2 )
(x2 − x0 )(x2 − x1 )(x2 − x3 )
(x − x0 )(x − x1 )(x − x2 )
+ f (x3 )
(x3 − x0 )(x3 − x1 )(x3 − x2 )
Z b
f (x0 ) + 3f (x1 ) + 3f (x2 ) + f (x3 )
I≈ f (x)dx = (b − a)
a 8
7.6. INTEGRACIÓN POR EL MÉTODO DE REGLA SIMPSON 3/8 175
7.6.1. Ejemplo
Para la función f (x) = 0.2 + 25x − 200x2 + 675x3 − 900x4 + 400x5 , calcular la integral
utilizando la regla Simpson 3/8 en el intervalo a = 0 b = 0.8 .
En Matlab la solución es
ans =
1.5192
function I = Simpson38(f, a, b, N)
h = abs(b-a)/N;
suma =0;
for k=0:N-1
x0 = a + h*k;
x1 = x0 + h/3;
x2 = x0 + 2*h/3;
x3 = x0 + h;
suma = suma + f(x0) + 3*f(x1) + 3*f(x2) + f(x3);
end;
I = h*suma/8;
end
176 DIFERENCIACIÓN E INTEGRACIÓN
7.7. Ejemplos
7.7.1. Ejemplo 1
Dada la función
Z b
25 2 200 3 675 4 900 5 400 6
I(x) = f (x)dx = 0.2x + x − x + x − x + x
a 2 3 4 5 6
7.7.2. Ejemplo 2
dy
= f (x, y)
dx
En general los métodos que veremos hacen una formulación lineal de la forma
y (k+1) = y (k) + φh
donde φ es una estimación de la pendiente de la lı́nea recta y utilizaremos esta linea para
hacer una predicción de los valores de la integral.
φ = f (x(k) , y (k) )
donde f (x(k) , y (k) ) es la ecuación diferencial evaluada en x(k) y y (k) . Utilizando esta esti-
mación tenemos
177
178 ECUACIONES DIFERENCIALES ORDINARIAS
x = zeros(N+1, 1);
y = zeros(N+1, D);
x(1) = x0;
y(1,:) = y0;
for k = 1:N
y(k+1,:) = y(k,:) + f(x(k), y(k,:))*h;
x(k+1) = x(k) + h;
end;
end
donde x ini el el vector de valores iniciales, h es el incremento, N es el conjunto de valores
donde se integra y f son el conjunto de ecuaciones diferenciales.
y 0(k+1) + y 0(k)
ȳ 0 =
2
De lo anterior podemos decir que el método tiene dos pasos, uno de predicción que es una
iteración de Euler y un Corrector donde se utiliza la estimación de la pendiente al final del
bloque. Estos pasos son:
Predicción
yp(k+1) = y (k) + f (x(k) , y (k) )h
Corrección
(k+1)
f (x(k) , y (k) ) + f (x(k+1) , yp )
y (k+1) = y (k) + h
2
x = zeros(N+1, 1);
y = zeros(N+1, D);
x(1) = x0;
y(1,:) = y0;
for k = 1:N
%Predictor
k1 = f(x(k), y(k,:) );
k2 = f(x(k)+h, y(k,:) + k1*h);
%corrector
%disp([k1, k2, y + k1]);
x(k+1) = x(k) + h;
y(k+1,:) = y(k,:) + (k1 + k2 )*h/2.0;
end;
end
Esta técnica usa el método de Euler para predecir un valor de y en el punto medio del
intervalo
180 ECUACIONES DIFERENCIALES ORDINARIAS
Después este valor es utilizado para calcular la pendiente en el punto medio y hacer la
solución en todo el intervalo como
La implementación en Matlab es
x = zeros(N+1, 1);
y = zeros(N+1, D);
x(1) = x0;
y(1,:) = y0;
for k = 1:N
xm = x(k) + h/2;
ym = y(k,:) + f(x(k), y(k,:))*h/2;
x(k+1) = x(k) + h;
y(k+1,:) = y(k,:) + f(xm, ym)*h;
end;
end
Los algoritmos de Runge-Kutta son los métodos de integración con mejor desempeño y
exactitud. En el caso del método de Runge-Kutta tenemos calcular dos valores k1 y k2
utilizando
k1 = f (x(k) , y (k) )
8.5. RUNGE-KUTTA 3ER ORDEN 181
3 3
k2 = f (x(k) + h, y (k) + k1 h)
4 4
(k+1) (k) 1 2
y =y + k1 + k2 h
3 3
function [x,y] = RK(x0, y0, h, N, f)
D = length(y0);
x = zeros(N+1, 1);
y = zeros(N+1, D);
x(1) = x0;
y(1,:) = y0;
for k = 1:N
k1 = f(x(k), y(k,:));
k2 = f(x(k) + 3*h/4, y(k,:)+3*h*k1/4);
x(k+1) = x(k) + h;
y(k+1,:) = y(k,:) + (k1/3 + 2*k2/3)*h;
end;
end
En el caso del método de Runge-Kutta de tercer orden tenemos que calcular tres valores
k1 , k2 y k3 utilizando las siguientes formulas
k1 = f (x(k) , y (k) )
1 1
k2 = f (x(k) + h, y (k) + k1 h)
2 2
182 ECUACIONES DIFERENCIALES ORDINARIAS
1
y (k+1) = y (k) +
(k1 + 4k2 + k3 ) h
6
function [x, y] = RK3(x0, y0, h, N, f)
D = length(y0);
x = zeros(N+1, 1);
y = zeros(N+1, D);
x(1) = x0;
y(1,:) = y0;
for k = 1:N
k1 = f(x(k), y(k,:));
k2 = f(x(k) + h/2, y(k,:) + k1*h/2);
k3 = f(x(k) + h, y(k,:) - k1*h + 2*k2*h);
x(k+1) = x(k) + h;
y(k+1,:) = y(k,:) + (k1 + 4*k2 + k3)*h/6;
end;
end
El más popular de los métodos RK es el de cuarto orden. En el caso del método de Runge-
Kutta de cuarto orden tenemos que calcular cuatro valores k1 , k2 , k3 y k4 utilizando las
siguientes formulas
k1 = f (x(k) , y (k) )
1 1
k2 = f (x(k) + h, y (k) + k1 h)
2 2
8.7. EJEMPLO 183
1 1
k3 = f (x(k) + h, y (k) + k2 h)
2 2
k4 = f (x(k) + h, y (k) + k3 h)
1
y (k+1) = y (k) + (k1 + 2k2 + 2k3 + k4 ) h
6
x = zeros(N+1, 1);
y = zeros(N+1, D);
x(1) = x0;
y(1,:) = y0;
for k = 1:N
k1 = f(x(k), y(k,:));
k2 = f(x(k) + h/2, y(k,:) + k1*h/2);
k3 = f(x(k) + h/2, y(k,:) + k2*h/2);
k4 = f(x(k) + h, y(k,:) + k3*h);
x(k+1) = x(k) + h;
y(k+1,:) = y(k,:) + (k1 + 2*k2 + 2*k3 + k4)*h/6;
end;
end
8.7. Ejemplo
Z Z
dy
dx = f (x, y)dx = −0.5x4 + 4x3 − 10x2 + 8.5x
dx
Encontrar la solución numérica para esta ecuación diferencial, suponiendo un valor inicial
x(0) = 0, y (0) = 1 y h = 0.5, utilizando los métodos analizados en este capı́tulo.
Solución
function dy = ecuacion(x, y)
dy = -2*x^3 + 12*x^2- 20*x + 8.5;
end
Para evaluar la exactitud de los métodos calculamos el valor absoluto de la diferencia entre
el valor real y el calculado.
8.7. EJEMPLO 185
% Valores Iniciales
xini = 0;
xfin = 4;
y_ini = 1;
h = (xfin-xini)/N;
x = [xini:h:xfin]’;
[x, abs(solucion_real(x)-y1),...
abs(solucion_real(x)-y2),...
abs(solucion_real(x)-y3),...
abs(solucion_real(x)-y4),...
abs(solucion_real(x)-y5),...
186 ECUACIONES DIFERENCIALES ORDINARIAS
abs(solucion_real(x)-y6)]
function dy = ecuacion(x, y)
dy = -2*x^3 + 12*x^2- 20*x + 8.5;
end
function y = solucion_real(x)
y = -0.5*x.^4 + 4*x.^3 - 10*x.^2 + 8.5*x +1;
end
end
8.7.2. Circuito RL
Para el circuito RL que se muestra en la figura 8.25 calcular el valor de la corriente i(t) en
función del tiempo t, asumiendo que el interruptor se cierra en el tiempo t = 0
Solución
La ecuación diferencial para este problema es
di V − Ri
=
dt L
R = 2.0; % Ohms
8.7. EJEMPLO 187
L = 0.3; % Henries
V = 10.0; % Volts
di = (V - R *i)/L;
end
La solución real de la ecuación diferencial, en función del tiempo, es:
V
i(t) = 1 − e(−Rt/L)
R
La solución utilizando el Método de Runge-Kutta 4 para un valor inicial t = 0, i(0) = 0 y
un incremento h = 0.2 es:
t i(t)
0.0 0
0.2 3.5391
0.4 4.5732
0.6 4.8753
0.8 4.9636
1.0 4.9894
En la figura 8.26 se muestra la solución gráfica de los métodos estudiados en este capı́tulo.
En negro se da la solución real de la ecuación diferencial y en amarillo la solución del
Runge-Kutta de cuarto orden que es el que mejor se desempeña para el incremento dado.
La peor solución es la calculada con el método de Euler la cual se muestra en azul en esta
figura.
El código implementado para este ejemplo es:
function Circuito_RL()
% Numero de puntos
N = 100;
% Valores Iniciales
tini = 0;
tfin = 1;
i_ini = 0;
h = (tfin-tini)/N;
Solucion Circuito RL
7
Corriente (Amp.)
4
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
tiempo (seg.)
xlabel(’tiempo (seg.)’);
ylabel(’Corriente (Amp.)’);
title(’Solucion Circuito RL’);
R = 2.0; % Ohms
8.7. EJEMPLO 189
L = 0.3; % Henries
V = 10.0; % Volts
t = [t0:h:N*h]’;
Tau = L/R;
ic = 5 *(1 - exp(-t/Tau));
end
function di = Circuito_RL(t, i)
%Parametros
R = 2.0; % Ohms
L = 0.3; % Henries
V = 10.0; % Volts
di = (V - R *i)/L;
end
end
Las ecuaciones diferenciales que rigen este movimiento están dadas como
d2 x
dt2
=0
d2 y
dt2
=a
Las ecuaciones diferenciales en el caso del tiro parabólico pueden representarse por un
sistema de ecuaciones con cuatro variable el desplazamiento horizontal x, el desplazamiento
vertical y, la velocidad horizontal vx y la velocidad vertical vy tal como se muestra a
continuación:
190 ECUACIONES DIFERENCIALES ORDINARIAS
dx
dt = vx
d2 x
dt2
=0≡
dvx
=0
dt
dy
dt = vy
d2 x
dt2
= −g ≡
dvy
= −g
dt
dv(1) = v(2);
dv(2) = 0;
dv(3) = v(4);
dv(4) = -g;
end
Para el caso de el tiro parabólico encontrar la solución del sistema de ecuaciones diferen-
ciales, para un tiempo tf = 2.0 seg, asumiendo los siguientes inicialmente x(0) = 0 mts,
y0 = 5 mts, vx (0) = 10 m/s, vy (0) = 10 m/s y un incremento h = 0.001.
La solución en matlab es:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Datos
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N = floor((tf - t0)/h);
8.7. EJEMPLO 191
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Graficas de la solución
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
plot(d(:,1), d(:,3));
grid on
title(’Tiro Parabólico’);
xlabel(’x (mts.)’);
ylabel(’y (mts.)’);
La solución es
>> tiro_parabolico
En el caso particular de un tiro parabólico, donde un objeto es lanzado con una velo-
cidad inicial vx (0) horizontalmente y vy (0) verticalmente y esta sujeta a la acción de la
gravedad la solución de analı́tica de las ecuaciones diferenciales es el sistema mostrada a
continuación
x(2) = 0 + 10 ∗ 2 = 20
En la figura 8.27 se muestra la gráfica del desplazamiento x(t) vs y(t) para la solución del
tiro parabólico.
Tiro Parabólico
11
10
9
y (mts.)
5
0 5 10 15 20 25
x (mts.)
El sistema masa resorte como el que se muestra en la figura 8.28, esta constituido por una
masa M , sujeta a un resorte de constante K, el cual esta sujeto a fuerzas de amortigua-
miento C y se aplica una fuerza F . El modelo dinámico para este sistema es:
8.7. EJEMPLO 193
dx2 dx
M 2
+C + Kx = F
dt dt
Note que tenemos una ecuación diferencial de segundo orden la cual plantearemos como
un par de ecuaciones de primer orden como:
dx
=v
dt
dv F − Cv − Kx
=
dt M
2 1.5
Desplazamiento (m.) 1
1
Velocidad (m/s.)
0.5
0 0
−0.5
−1
−1
−2 −1.5
0 10 20 30 40 0 10 20 30 40
tiempo (seg.) tiempo (seg.)
1.5
1
Velocidad (m/s.)
0.5
−0.5
−1
−1.5
−2 −1 0 1 2
Desplazamient (m.)
% Numero de puntos
N = 1000;
% Valores Iniciales
tini = 0;
tfin = 40;
d_ini = 2;
v_ini = 0;
h = (tfin-tini)/N;
subplot(2,2,1)
plot(t, x(:,1));
xlabel(’tiempo (seg.)’);
ylabel(’Desplazamiento (m.)’);
subplot(2,2,2)
plot(t, x(:,2));
xlabel(’tiempo (seg.)’);
ylabel(’Velocidad (m/s.)’);
subplot(2,2,3)
plot(x(:,1), x(:,2));
xlabel(’Desplazamient (m.)’);
ylabel(’Velocidad (m/s.)’);
function D = Sistema_MR(t, r)
M = 10.0; % Masa en Kg
C = 1; % Coeficiente de Amortiguamiento Dinnamica
K = 5; % Constante del Resorte
F = 0; % Fuerza Aplicada
d = r(1);
v = r(2);
dy
C1 + C2 y = C3
dx
yk − yk−1
C1 + C2 yk = C3
h
197
198 ECUACIONES DIFERENCIALES PARCIALES
(C1 + C2 h)y1 − C1 y0 = C3 h
(C1 + C2 h)y2 − C1 y1 = C3 h
(C1 + C2 h)y3 − C1 y2 = C3 h
(C1 + C2 h)y4 − C1 y3 = C3 h
..
.
(C1 + C2 h)yN − C1 yN −1 = C3 h
(C1 + C2 h) 0 0 ··· 0 y1 C3 h + C1 y0
−C1 (C1 + C2 h) 0 ··· 0
y2
C3 h
0 −C1 (C1 + C2 h) · · · 0
y3 =
C3 h
.. .. .. .. .. .. ..
. . . . . . .
0 0 0 −C1 (C1 + C2 h) yN C3 h
A = zeros(N-1, N-1);
b = zeros(N-1, 1);
for k=1:N-1
A(k,k) = C(1) + C(2)*h;
b(k) = C(3)*h;
if k>1
A(k, k-1) = -C(1);
else
b(k) = b(k)+ C(1)*y0;
end;
end;
y = [y0; A\b];
end
9.1. FÓRMULA DE INTEGRACIÓN POR EL MÉTODO EXPLÍCITO DE DIFERENCIAS DIVIDIDAS FINITA
9.1.1. Ejemplo
Consideremos el caso del circuito RL planteado en el capı́tulo anterior, el cual tenı́a una
resistencia R = 2 ohms, una inductancia L = 0.3 H y estaba alimentado por una fuente de
voltaje de V = 10 volts dado por la ecuación diferencial
di
L + Ri = V
dt
0.3020 0 0 0 i1 0.0100
−0.3000 0.3020 0 0 i2 0.0100
=
0 −0.3000 0.3020 0 i3 0.0100
0 0 −0.3000 0.3020 i4 0.0100
0
i1
i2 0.0331
=
i3 0.0660
0.0987
i4
0.1311
4.5
3.5
3
i(t)
2.5
1.5
0.5
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
t
11.1. Tarea 1
Escribir código en Matlab que permita imprimir, utilizando un solo asterisco, condicionales
y ciclos: a) Un Triángulo
*
**
***
****
*****
******
*******
b Un cuadro
*******
* *
* *
* *
* *
* *
*******
11.2. Tarea 2
201
202 TAREAS
2.- Utilizando el método gráfico determinar los mı́nimos en el intervalo [10, 15].
11.3. Tarea 3
Dada la función f (x) = sen(10x) + cos(3x) la cual tiene un cruce por cero en el intervalo
x∗ ∈ [−3.6, −3.2], calcular el cruce por cero en esta región utilizando los métodos de Bisec-
ción, Regla Falsa, Punto Fijo y Newton Raphson. Reportar una tabla para N iteraciones
como la siguiente para cada uno de los métodos.
donde N es el número máximo de iteraciones en el cual todos los métodos converge. Hacer
una gráfica con los valores de la Tabla de k vs f (xB k), f (xR k), f (xP k) y f (xN k) con la
solución de todos los métodos.
11.4. Tarea 4
11.5. Tarea 5
11.6. Tarea 6
11.7. Tarea 7
11.8. Tarea 8
11.9. Tarea 9
11.10. Tarea 10
Z1 = 6x1 + 4x2
Sujeta a
2x1 + 2x2 ≤ 160
x1 + 2x2 ≤ 120
4x1 + 2x2 ≤ 280
Z2 = 3x1 + 4x2
Sujeta a
2x1 + 3x2 ≤ 1200
2x1 + x2 ≤ 1000
4x2 ≤ 880
calcular los puntos del polı́gono de la región de factibilidad (para cada problema) y evaluar
la función de costo correspondiente en cada uno de ellos.
11.11. Tarea 11
a) Para la implementación en Matlab del algoritmo Simplex hacer una modificación que
permita hacer que esta función regrese:
[z, x, h] = Simplex[c, A, b]
b) Optimizar utilizando el método simplex, el siguiente problema. Todos los cálculos de-
berán ser realizados a mano y comprobar que la solución es la correcta utilizando el algo-
ritmo implementado en Matlab.
11.12. TAREA 12 205
11.12. Tarea 12