You are on page 1of 82

UNIVERSIDAD

NACIONAL AUTNOMA DE
MXICO
FACULTAD DE INGENIERA
Divisin de Ciencias Bsicas

Anlisis Numrico

Actividad No.6: Tema II

Semestre: 2017 - 2
TEMA I: Races de un polinomio
Mtodo de Biseccin:
Descripcin del Mtodo:
Es utilizado para calcular de manera aproximada las races de una funcin () = 0.
Primero se acomoda (), para plantearla como () = 0, Se supone que la raz est en intervalo [, ] y es
continua, por sonsiguiente se divide el intervalo de la siguiente manera:
+
=
2
Donde i es el nmero de iteracin.
Grficamente se puede observar el intervalo [, ] y como al obtener se corta el intervalo.
Despus se sustituye en la funcin (), como
( ) y:
Si ( ) = 0, es la raz.
Si existe un cambio de signo en ( ) y (),
entonces el nuevo valor de b ser , Existe la raz en
el intervalo [, ]
Si existe un cambio de signo en ( ) y (),
entonces el nuevo valor de a ser , Existe la raz en
el intervalo [ , ]
El error para este mtodo es calculado de la
siguiente manera:
| 1 |
= 100%

Ejemplo:
Obtener la raz de la funcin () = ( + ) , en el intervalo [, ] con una Tolerancia se 0.0001.

RESOLUCIN:
Primera Iteracin
+ 3 + 0
= = = 1.5
2 2
() = (3) = 8
( ) = (1.5) = 0.125
() = (0) = 1
Nuevo intervalo: [1.5,0]
Segunda Iteracin
+ 1.5 + 0
= = = 0.75
2 2
() = (1.5) = 0.125
( ) = (0.75) = 0.156
() = (0) = 1
Nuevo intervalo: [1.5, 0.75]
Tercera Iteracin
+ 1.5 0.75
= = = 1.125
2 2
() = (1.5) = 0.125
( ) = (1.125) = 1.95103
() = (0.75) = 0.156
Nuevo intervalo: [1.125, 0.75]
Cuarta Iteracin
+ 1.125 0.75
= = = 0.9375
2 2
3
() = (1.125) = 1.95x10
( ) = (0.9375) = 2.441x104
() = (0.75) = 0.156
Nuevo intervalo: [1.125, 0.9375]
Quinta Iteracin
+ 1.125 0.9375
= = = 1.03125
2 2
() = (1.125) = 1.95103
( ) = (1.03125) = 3.051757105
() = (0.9375) = 2.441x104
Nuevo Intervalo:[1.03125, 0.9375]

Como 3.051757105 < 0.0001 , se ha cumplido con la tolerancia requerida, entonces


nuestra raz es 1.03125.
En el siguiente grafico se puede observar en intervalo.

Ejercicios Propuestos:
1.- Utilice el mtodo de biseccin para obtener una raz real del polinomio:
() = 3 + 2 2 + 10 20
2.- Considerando la siguiente funcin
() = 3 + 6 + 5 2 + 3 3 + 4 4
Localice la raz de la derivada de dicha funcin con los valores del intervalo: (-2,1).
3.-Considere la funcin siguiente:
() = 4 2 3 8 2 5
Use el mtodo para demostrar que la funcin tiene un funcin tiene una mximo para algn valor de x en el rango -
2<x<1.
Diagrama de flujo:
Si
f(1 )=0 f(1 )

Inicio

No

Hacer f(a) y f(b)


Pedir la funcin
en trminos de X
y el error

No
Hacer nuevo
f(1 ) f(a)<0 intervalo [ , ]
F(x), e

Si
Pedir los
valores Hacer nuevo
de a y b intervalo [, ]

+
=
2
a, b
O

+
=
2
+
=
2

Hacer f( )
e>| |

Si

Fin
Algoritmo:
1.- Se pide la funcin en trminos de x y se declara la variable x.
2.- Se piden los valores extremos del intervalo [a,b].
3.- Se pide la tolerancia.
+
4.- Se hace un promedio con el valor de los extremos = .
2
5.- Se evala la funcin en el valor de x obtenido
6.- Se evala la funcin en a y en b.
7.- Se multiplica el valor de f valuado en a y en b
8.- Si f(a)*f(b)>0 el valor obtenido de x pasa a ser el nuevo extremo derecho.
9.- Si no es mayor a 0 entonces pasa a ser el nuevo extremo izquierdo.
10.- Repetir las iteraciones necesarias hasta que la aproximacin cumpla con la tolerancia.

Cdigo Comentado:
%Datos
syms x %--> Declaracion de un simbolo
f=input('Dame la funcion en terminos de "x": ');
a=input('Dame a: ');
b=input('Dame b: '); %--> Intervalo [a,b]
tol=input('Dame la tolerancia: '); %--> Tolerancia
if tol==0
tol=0.001;
end
e=1; %--> Error, se le da un valor para despues utilizarlo en el while
%Inicio metodo
y=zeros(3); %--> Se crea un vector "y" de tamao 3
x=a;
y(1)=subs(f); %--> Se guarda en la primera posicion el valor de la funcion evaluada en "a"
x=b;
y(3)=subs(f); %--> Se guarda en la tercera posicion el valor de la funcion evaluada en "b"
x=(b+a)/2; %--> Se hace el promedio entre los intervalos y se guarda en "x"
%Inicio del while: Aqui se evalua que la tolerancia debe de ser menor que el error para que se
repita
while(tol<e)
c=x; %--> "c" va a ser una variable auxiliar que guardara a la x
anterior
y(2)=subs(f); %--> Se guarda en la segunda posicion de "y" el valor de la funcion
evaluada en "x"
if y(2)==0 %--> Si la funcion evaluada en x resulta ser cero presentarlo en
pantalla
disp('La raiz es: ');
x
else
if y(2)*y(1)<0 %--> Si el producto de las funciones (f(x)*f(a)) es menor a cero
b=x; %--> x = x derecha = b
x=(b+a)/2; %--> Se hace el promedio entre los intervalos y se guarda en "x"
else
a=x; %--> x = x izquierda = a
x=(b+a)/2; %--> Se hace el promedio entre los intervalos y se guarda en "x"
end
end
e=abs((x-c)/x); %--> se calcula el error
end
disp('La raiz es: '); %--> disp: presenta un mensaje en pantalla
%La "x" sin ";" en ".m" significa que va a presentar el valor de "x" en pantalla
x
Mtodo de Interpolacin:
Descripcin del Mtodo:
Es un mtodo iterativo para encontrar races de un polinomio real, por lo cual solo obtienes races reales.
Este mtodo converge de forma general ms
rpido que el mtodo de biseccin.
1.- Se determina el segmento donde se
encuentra l raz, nos poder apoyar en el
principio de Bolzano que dice:
Como existe un cambio de signo en las
funciones evaluadas se capeta que existe un
raz
2.- Se empieza a iterar:
( ) ( )
=
( ) ( )

Despus se evala la funcin con , y se


obtiene el nuevo intervalo:
( ) < 0; = , nuevo intervalo [ , ]

( ) > 0; = , nuevo intervalo [ , ]
Ejemplo:
2
Use el mtodo de interpolacin para obtener la raz de la siguiente funcin () = 2() , en el intervalo
10
(1,4):

RESOLUCIN:
1.-Se evala la funcin en el intervalo:
12
(1) = 2(1) = 1.5829
10
42
(4) = 2(4) = 3.1136
10
2.-Se ubica el intervalo en el que se encuentra nuestra .
( ) ( ) (1)(3.1136) (4)(1.5829)
= = = 2.0111
( ) ( ) (3.1136) (1.5829)
3.-Se evala en () en:
2.01112
(1.3481) = 2(2.0111) = 1.4047
10
4.- Se compa para ubicar el cambio de signo:
(1) = 1.5829
(2.0111) = 1.4047
(4) = 3.1136
Como el cambio de signo existe entre el intervalo (2.0111, 4) entonces: = 2.0111.
2.-Se evala un nuevo intervalo en el que se encuentra nuestra .
( ) ( ) (2.0111)(3.1136) (4)(1.4047)
= = = 2.6294
( ) ( ) (3.1136) (1.4047)
3.-Se evala en () en:
2.62942
(1.3481) = 2(2.6294) = 0.5996
10
4.- Se compa para ubicar el cambio de signo:
(2.0111) = 1.4047
(2.6294) = 0.5996
(4) = 3.1136
Como el cambio de signo existe entre el intervalo (2.0211, 2.6294) aqu existe mi raz. El valor
ms cercano al eje x esta dado por la funcin:
(2.6294) = 0.5996

En el grafico se puede observar el cambio de signo entre 2.0211 2.6294.

Ejercicios Propuestos:
1.-Considerando la siguiente funcin:
() = 1.5 6 2 4 + 12
a) Grafique la funcin
b) Obtenga la raz iterando 10 veces y localice el intervalo en el que se encuentra la raz.
2.-Calcule la raz real de la ecuacin
() = 3 + 2 2 + 10 20
Empleando el intervalo (0,2).
3.-Haga 20 iteraciones para calcular el valor de la raz de la funcin en el intervalo (0,1.5).
() = 2( 5)
Diagrama de flujo:
No
x=(a*y(3)-
y(2)<0 b=x
Inicio b*y(1))/(y(3)-
y(1))

Si

Pedir f(x), a=x


a, b,
tolerancia

x=(a*y(3)-
b*y(1))/(y( e=abs((x-c)/x)
f(x), a, b, 3)-y(1))
tolerancia

Se crea un
vector Y de No tol<e
tamao 3

Y(1)=f(a)
Si
Y(3)=f(b)
La raz es el
valor de x
x=(a*y(3)-
b*y(1))/(y(3)-
y(1))

Fin

Y(2)=F(x)
Algoritmo:
1.- Se declara la variable x.
2.- Se pide la funcin en trminos de x.
3.- Se pide el valor de a, b y la tolerancia.
4.- Se crea un vector Y de tamao 3
5.- En la primera posicin del vector Y se guarda f(a)
6.- En la tercer posicin del vector Y se guarda f(b)
7.- Se hace la interpolacin lineal y se guarda en "x", x=(a*y(3)-b*y(1))/(y(3)-y(1))
8.- Se crea un ciclo while evaluando que la tolerancia sea menor que el error para que se repita
9.- Se declara una variable auxiliar C para guardar a la x anterior
10.- Se guarda en la segunda posicin del vector Y el valor de f(x)
11.- Se compara el valor de y(2)<0, si es verdad a=x
12.- Se hace la interpolacin lineal y se guarda en "x", x=(a*y(3)-b*y(1))/(y(3)-y(1))
13.- Si y(2)<0 no es verdad, entonces b=x
14.- Se hace la interpolacin lineal y se guarda en "x", x=(a*y(3)-b*y(1))/(y(3)-y(1))
15.- Se calcula el error, e=abs((x-c)/x)
16.- Se compara el valor de la tolerancia con el del error, tol<e
17.- Si es verdad tol<e se muestra la raz =x
Cdigo Comentado:
%Datos
syms x %--> Declaracion de un simbolo
f=input('Dame la funcion en terminos de "x": ');
a=input('Dame a: ');
b=input('Dame b: '); %--> Intervalo [a,b]
tol=input('Dame la tolerancia: '); %--> Tolerancia
if tol==0
tol=0.001;
end
e=1; %--> Error, se le da un valor para despues utilizarlo en el while
%Inicio metodo
y=zeros(3); %--> Se crea un vector "y" de tamao 3
x=a;
y(1)=subs(f); %--> Se guarda en la primera posicion el valor de la funcion evaluada en
"a"
x=b;
y(3)=subs(f); %--> Se guarda en la tercera posicion el valor de la funcion evaluada en
"b"
x=(a*y(3)-b*y(1))/(y(3)-y(1)); %--> Se hace la interpolacion lineal y se guarda en "x"
%Inicio del while: Aqui se evalua que la tolerancia debe de ser menor que el error para que se
repita
while(tol<e)
c=x; %--> "c" va a ser una variable auxiliar que guardara a la x
anterior
y(2)=subs(f); %--> Se guarda en la segunda posicion de "y" el valor de la
funcion evaluada en "x"
if y(2)<0 %--> Si y(x) < 0
a=x; %--> x = x izquierda = a
x=(a*y(3)-b*y(1))/(y(3)-y(1)); %--> Se hace la interpolacion lineal y se guarda en "x"
else
b=x; %--> x = x derecha = b
x=(a*y(3)-b*y(1))/(y(3)-y(1)); %--> Se hace la interpolacion lineal y se guarda en "x"
end
e=abs((x-c)/x); %--> se calcula el error
end
disp('La raiz es: '); %--> disp: presenta un mensaje en pantalla
%La "x" sin ";" en ".m" significa que va a presentar el valor de "x" en pantalla
x
Mtodo de Newton Raphson:
Descripcin del Mtodo:
Este mtodo encuentra una race siempre y cuando se conozca una estimacin inicial para la raz deseada. Utiliza las
rectas tangentes que se evalan analticamente. El mtodo se puede aplicar al dominio complejo para hallar races
complejas. Tambin se puede extender a las ecuaciones no lineales simultneas. Supngase que el problema es
encontrar una raz de () = 0. Al utilizar el desarrollo de Taylor de ()en torno a una estimacin 0 , la ecuacin
se puede escribir como:
() = 0 = (0 ) + (0 )( 0 ) + 0(2 )
Donde = 0 . Al despejar x en la ecuacin no se obtiene el valor exacto debido al error de truncamiento, pero la
solucin se acerca en mayor medida al x exacto, que lo que se aproxima el estimado 0 . Por lo tanto, al repetir la
solucin utilizando el valor actualizado como una nueva estimacin, se mejora la aproximacin en forma sucesiva.

El valor 0 . Es una estimacin inicial para la raz. A continuacin se obtiene la funcin lineal que pasa por (0 , 0 ) en
forma tangencial. La interseccin de la recta tangente con el eje x se denota como 1 y se considera como una
aproximacin de la raz. Se repite el mismo procedimiento, utilizando el valor ms actualizado como una estimacin
para el siguiente ciclo de iteracin.

La recta tangente que pasa por (0 , (0 )) es


() = (0 )( 0 ) + (0 )
La raz de () = 0 denotada por 1 satisface
(0 )(1 0 ) + (0 ) = 0
Al resolver la ecuacin anterior se obtiene
(0 )
1 = 0
(0 )
Las aproximaciones sucesivas a la raz se escriben como
(1 )
1 = 1
(1 )

Ejemplo:
Calcule la raz positiva ms pequea de = () . mediante el mtodo de Newton-Raphson.
RESOLUCIN
Iniciamos obteniendo la primera derivada de manera analtica de la funcin:
() = 2 () 0.5

El mtodo lo comenzamos con una estimacin inicial de 4.0 por lo que utilizando la frmula:
(1 )
= 1
(1 )
Y realizando 6 iteraciones para obtener un error de tolerancia de 0.001

Para la primera iteracin:

(0 ) (4) 1.930073
1 = 0
= (4) = (4) = 4.458280
0 ( ) (4) 0.502441
Para la segunda iteracin utilizaremos el valor obtenido:
(1 ) (4.458280) 2.151170
2 = 1 = (4.458280) = (4) = 4.352068
(1 ) (4.458280) . 503034

Si los valores obtenidos los colocamos dentro de una tabla se obtiene:


Iteracin
1 4 4.458280
2 4.458280 4.352068
3 4.352068 4.288511
4 4.288511 4.275191
5 4.275191 4.274782
6 4.274782 4.274782
SOLUCIN IFNAL=4.274782

Este problema es muy sensible a la eleccin de una estimacin inicial. Si dicha estimacin inicial se hace igual a 3.6, por
ejemplo, la iteracin converge a un valor irrelevante despus de que los valores de x varan de forma errtica, como lo
muestra la siguiente tabla.
Utilizando como estimacin inicial 3.6 y usando la misma metodologa se obtienen los resultados:

Iteracin raz
1 3.6 5.358891
2 5.358891 7.131396
3 7.131396 8.494651
4 8.494651 10.92057
5 10.92057 10.87581
6 10.87581 10.83419
7 10.83419 10.81511
8 10.81511 10.81269
9 10.81269 10.81267
SOLUCIN FINAL= 10.81267
La grfica de la funcin se muestra a continuacin y nos permite comprender la causa del variacin
de la raz de acuerdo a la estimacin inicial.
Ejercicios Propuestos:
1. Aplique el mtodo de Newton-Raphson para determinar una raz de la ecuacin:
1
2 () + 3 = 0, utilice 0 = 3.
2
() 2
2. Elabore un programa de computadora que determine una raz positiva de la siguiente ecuacin: (
) =
1
2
, x en radianes utilizando el mtodo de Newton-Raphson para una tolerancia < 0.0001

3. Determine una raz negativa de la ecuacin: ( + 2) + ( + 2) 2 = 0 usando el mtodo de
2
Newton-Raphson, con un = 0.1%.
4. Elabore un programa de computadora que determine la primera raz positiva de la ecuacin: ( )
( ) + 1 = 0 , x en radianes utilizando el mtodo de Newton-Raphson para una tolerancia < 0.0001
Diagrama de Flujo:

Inicio 1 2

Pedir los Hacer 1 =


Ingresar los coeficientes del x (A/B),
valores polinomio
pedidos

Se guardan en No
el arreglo a[i]
g, e ,x o
1 < Calcular
nueva 1

Obtener la
this.n = n+1 derivada del Si
polinomio
n=grado del P
Mostrar el
valor de la raz

Evaluar el
Arreglo a polinomio dado
para guardar un valor de x y
coef. de P guardarlo en A
Inicio

Evaluar la d. del
Arreglo CoefDeDer polinomio en el valor
para los coef. de la de x y guardarlo en
derivada B

2
1
Algoritmo:
1.- Ingresar los valores de grado del polinomio, error y X inicial y guardarlos en g, e y x
respectivamente.
2.- Se llama a la funcin NewtonRaphson(g, x, e).
3.- Se crea un arreglo this.n de tamao = n+1, donde n es el grado del polinomio.
4.- Se crea un arreglo a de tamao this.n para guardar los valores de los coeficientes del polinomio.
5.- Se crea un arreglo coefDeDer de tamao this.n para guardar los valores de la derivada de la funcin.
6.- Se llama a la funcin public void LLenar() para pedir y asignar uno por uno los coeficientes al arreglo
a.
7.- Ingresar los valores de los coeficientes del polinomio y guardarlos en el arreglo a[i].
8.- Se llama a la funcin public void SacarDerivada() para obtener la derivada del polinomio y se guarda en
una variable auxiliar int aux.
9.- Se obtiene la derivada del polinomio elemento a elemento.
10.- Se crean un nuevo arreglo a de tamao this.n para guardar los nuevos valores de los coeficientes del
polinomio.
11.- Se desarrolla el MetodoNR, declarando nuevas variables C y xAux.
12.- Se recorre el arreglo evitando valores negativos en el grado del polinomio, y se obtiene el valor del
polinomio dado un valor de x y se guarda en A
13.- Se recorre el polinomio de la derivada evitando valores negativos en el grado del polinomio y se obtiene
el valor del polinomio, se guarda en B
14.- Se realiza la operacin 1 = x (A/B), con el valor de x= 0
15.- Si el valor de 1 cumple con el error, se muestra como el valor de la raz.

Cdigo Comentado:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package newtonrapson;

import java.util.Scanner;//Libreria (sin esta no ponemos instanciar Scanner)


/**
*
* @author Hogar
*/
public class NewtonRapson {

/**
* @param args the command line arguments
*/
static Scanner sc = new Scanner(System.in);
//Instancia de tipo Scanner (nos va apermitir leer los datos del usuario)
// "sc" lo hacemos static por comodidad(si se desea hacer uso de el no es necesario hacer otra
instancia)
double[] a;//declaracion de un arreglo "a" (guardara los coeficientes del polinomio)
double[] coefDeDer;//declaracion de "coefDeDer" (guardara los coeficientes de la derivada del
polinomio)
int n/*declaracion de "n" (guardara el tamao del arreglo)*/, grado;//declaracion de
"grado"(guardara el grado del polinomio)
double x/*declaracion de "x" (guardara el valor inicial de x)*/, error;//declaracion de
"error"(guardara el valor del error)
public static void main(String[] args) {
// TODO code application logic here
System.out.printf("Dame el grado de tu polinomio: ");//Pedimos el grado del polinomio
int g = sc.nextInt();//guardamos el grado en "g"
System.out.printf("Dame el valor de x0: ");//Pedimos x inicial
double x = sc.nextDouble();//guardamos x inicial en "x"
System.out.printf("Dame el error: ");//Pedimos error
double e = sc.nextDouble();//guardamos error en "e"
NewtonRapson nr = new NewtonRapson(g, x, e);
//instancia del objeto "nr" que recibe como parametros a "g", "x", "e"
//es decir son los valores iniciales que necesitamos para realizar el metodo
nr.LLenar();//Se llama al metodo "Llenar"
nr.SacarDerivada();//Se llama al metodo "SacarDerivada"
System.out.printf("La raiz es x = %f\n", nr.MetodoNR());//Se imprime valor de la raiz
}
NewtonRapson(int n, double x, double e)//Metodo constructor y recibe el grado del polinomio, x
inicial y el error
{
this.n = n + 1;//"this.n" va a ser el tamao del arreglo le sumamos 1 porque queremos que
tome el coeficiente para x^0
this.grado = n;//"this.grado" sera el grado del polinomio
this.x = x;//"this.x" sera la x inicial
this.error = e;//"this.error" sera el error
//"this" es solo un comando que hace referencia a la misma clase asi como sus atributos o
variables(las de hasta arriba)
a = new double[this.n];//se crea el arreglo "a" de tamao "this.n"
coefDeDer = new double[this.n];//se crea el arreglo "coefDeDer" de tamao "this.n"
}
public void LLenar()//este metodo pide y asigna los coeficientes al arreglo "a" uno por uno
{
System.out.printf("Dame los coeficientes de tu polinomio:\n");
for(int i=0; i<this.n; i++)//recorre el arreglo
{
System.out.printf("[%d]: ", i);
a[i] = sc.nextDouble();//guarda el valor en "a[i]"
//"sc.nextdouble()", "sc.nextInt()" solo son metodos de la clase
//"Scanner" y leen lo que el usuario ponga segun el tipo de variable que se necesite
guardar
}
}
public void SacarDerivada()//metodo que saca derivada de un polinomio
{
int aux = grado;//se utiliza una variable auxiliar para no alterar el grado del polinomio
for(int i=0; i<this.n; i++)//recorre el arreglo
{
if(aux>0)//evita que agarre valores negativos
{
coefDeDer[i] = aux*a[i];//si el polinomio es x^2+2x^1+x^0
//su derivada es (2x1)x^(2-1)+(1x2)x^(1-1)+(0x1)x^(0-1)
//El roducto se guarda en el arreglo "coefDeDer"
aux--;//aux=aux-1; se le resta uno simbolizando la resta del exponente
}
}
}
public double MetodoNR()//ahora s empieza lo bueno
{
double C;//decalaracion de variable C
double xAux;//declaracion de una variable auxiliar para x
do//hacer
{
int aux1 = grado, aux2 = grado-1;//varibles auxiliares para no alterar el grado del
polinomio asi como el de su derivada
double A=0, B=0;//declaracion de variable A y B inicializadas en 0
for(int i=0; i<this.n; i++)//recorre uno a uno el arreglo "a"
{
if(aux1>=0)//evita exponentes negativos
{
A+=(a[i]*Math.pow(x, aux1));//se ve feo por los comandos, pero aqui solo se
obtiene el resultado del polinomio dado una x
aux1--;//representa al exponente
}
}
for(int i=0; i<this.n; i++)//recorre uno a uno el arreglo "coefDeDer"
{
//Se hace lo mismo de arriba pero ahora con la derivada
if(aux2>=0)
{
B+=(coefDeDer[i]*Math.pow(x, aux2));
aux2--;
}
}
xAux = x;//se guarda x inicial(x0) en "xAux" para no perderla
x = x -(A/B);//es la operacion de x1 = x0 - f(x0)/f`(x0)
C = Math.abs(xAux-x);//C es la resta, osea: error = |x0-x1|
}while(C>error);//mientras que la resta sea mayor a al valor permitido de error repetir...
return x;//regresa el valor de la raiz
}
//NOTA:Se debera de dar un polinomio con minimo una raiz real y que la x que se proporcione
este cercana a este sino el programa truena
}
Mtodo de Factores Cuadrticos o Lin Barstow:
Descripcin del Mtodo:
El mtodo de factores cuadrticos (tambin conocido como el mtodo de Lin Bairstow) es un mtodo iterativo con
el que es posible hallar las races de un polinomio, ya sean races reales o imaginaras. Este mtodo es una solucin
ms eficiente que la divisin sinttica para reducir el grado de un polinomio y as poder encontrar sus races con
mayor facilidad. Consiste en extraer de polinomios de grado mayor a dos pares de races en la forma de factores del
tipo de 2 + + , y posteriormente con la formula general para polinomios de segundo grado obtener las races.
En dado caso de que el polinomio sea grado elevado, se debern seguir extrayendo las races en pares hasta que se
agote el mtodo

Ejemplo:
Sea el polinomio P(x)= + + , hallar sus races por el mtodo de Factores Cuadrticos

RESOLUCIN
Para poder aplicar este mtodo es necesario utilizar las siguientes frmulas:
Polinomio original: P(x)= + + + + + +
Extraccin de factores cuadrticos: () = ( + + )( + + + +
) + +S

Ecuaciones de recurrencia: =
= donde k= 0, 1, 2, n-2 y
= n= grado del polinomio original

Incrementos en los coeficientes P y Q: = : =


Siguientes valores en los coeficientes P y Q: = + = +

Valores particulares de los coeficientes : = =


nicamente para la primera iteracin: = = = =

Se procede a construir una tabla gua para poder hacer las iteraciones de manera ms sencilla:

Iteracin 1 2 3 4 5 6
P -.5 -.524 -.529 -.529 -.53 -.53
q .666 .786 .805 .808 .809 .809
0 1 0 1 1 1 1 1 1
1 -1 1 -.5 -.475 -.47 -.47 -.469 -.469
2 6 2 5.083 4.963 9.944 4.942 4.941 4.941
3 -3 R -.125 -.021 -.004 -.0008 -.0001 -.00003
4 4 S .6111 .094 .015 .002 .0003 .00006
-.0245 -.004 -.0009 -.0001 -.00003 -.00001
.1202 .018 .003 .0004 .00008 .00001

En cada iteracin se sustituye el valor de P y q con las formulas = + = +


, excepto para la primer iteracin donde se usa = + = + con = = , por lo que la

formula queda as = =


= =

Detenemos las iteraciones cuando los valores de R, S , P y q sean menores a la tolerancia en el caso de que
el problema plantee una tolerancia, en caso contrario nos detenemos cuando a nuestro criterio la P y q
sean lo mnimo deseado.

Posteriormente se sustituyen valores en la ecuacin de extraccin:


() = ( + + )( +
Para el primer polinomio: + + +
) + +S
(.)(.) ()(.)
X= , = .
(.)

Para el segundo polinomio:

(.)(.) ()(.)
X= , = .
(.)

() = ( . +. )( . + . ). +.

Por ltimo utilizamos la frmula general de polinomios de grado dos para encontrar las races del par de
polinomios resultantes:


X=

Ejercicios Propuestos:
1.- Resuelva para una tolerancia menor o igual a .0003 () = 3 20 2 + 15 + 50 = 0, considere p=-.075 y
q=-2.5
2.- Obtenga todas las races para una tolerancia menor o igual a .0001 del polinomio: () = 4 + 6 3 + 13 2
12 + 4 = 0 , considere p= -.7 y q= .3
3.- Resolver para una tolerancia menor o igual a .0003, () = 4 3 + 6 2 3 + 4 = 0
Diagrama de Flujo:

1 3
Inicio

Se obtienen las Se obtiene el


Se declaran races del valor de dQ y
los arreglos polinomio dP
a y b

Se asignan las
Se declaran las variables Se obtiene
n, k, gradoN, gradoK, variables
el valor de R
tolerancia, R, S, dP, dQ, provenientes del
men a variables
yS
P, Q.
de la clase

Pedir el grado Pedir los No


del polinomio y coeficientes R, S , dP,
la tolerancia del polinomio
Continuar con
dQ <
las iteraciones
tolerancia

n, iter
Si
Se guardan en
a[i]
Mostrar los
valores de
Pedir los las races
coeficientes Calcular los
del polinomio valores del
arreglo b[i]

Fin
Guardar los
Se borran los
coeficientes en
valores de a[i] y
a[i]
se sustituyen por
b[i]

1
2
Algoritmo:
1.- Se declaran dos arreglos a y b en los que se van a guardar los coeficientes del polinomio y el polinomio
reducido.
2.- Se declaran las variables n, k, gradoN, gradoK, tolerancia, R, S, dP, dQ, P, Q.
3.- Se pide el grado del polinomio y la tolerancia se guarda en n y en iter
4.- Se utiliza el mtodo fc.Llenar() para guardar los ceificientes del polinomio en el arreglo a
5.- Se inicia el mtodo de factores cuadrticos como fc.MetodoFC() y fc.SacarRaces() para obtener las
races del polinomio.
6.- Se pide el grado del polinomio y se guarda en op.
7.- Ahora los valores del arreglo b pasan a ser los valores del arreglo a.
8.- Se obtienen las races del polinomio.
9.-Se asignan los valores provenientes del men a variables propias de la clase.
10.- Se crean los arreglos a y b con su correspondiente tamao.
11.- Se piden los coeficientes del polinomio y se guardan en a[i].
12.- El grado del arreglo b pasa a ser el del nuevo polinomio y se reinicia el arreglo a haciendo 0 todos sus
valores.
13.- Los valores del arreglo b[i] pasan a ser los del arreglo a[i] y el tamao del arreglo b pasa a ser =k-
1, donde n=k.
14.- Se reinician los valores del arreglo b haciendo todos sus valores 0.
15.- Se comienza a hacer la primera iteracin para obtener dQ y dP y se recorre el arreglo b
16.- Si el grado del polinomio es =2 se hacen las operaciones para polinomios de grado dos, sino se vuelve a
iterar.
17.- Se comparan los valores de R, S, dP y dQ con la tolerancia, si son menores se rompe el ciclo.
18.- Se imprime el polinomio de grado 2 y y el polinomio formado por el arreglo b.
Cdigo Comentado:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package factorescuadraticos;

import java.util.Scanner;

/**
*
* @author Hogar
*/
public class FactoresCuadraticos {

/**
* @param args the command line arguments
*/
static Scanner sc = new Scanner(System.in);
//Instancia de tipo Scanner (nos va apermitir leer los datos del usuario)
// "sc" lo hacemos static por comodidad(si se desea hacer uso de el no es necesario hacer otra
instancia)
double[] a;//declaracion de un arreglo "a" (guardara los coeficientes del polinomio)
double[] b;//declaracion de un arreglo "b" (guardara los coeficientes del polinomio reducido)
int n, k, gradoN, gradoK; //"n" es el tamao del arreglo "a",
//"k" es el tamao del arreglo "b";
//"gradoN" es el grado del polinomio
//"gradoK" es la operacion k=n-2 del metodo
double tolerancia, R, S, dP, dQ, P, Q;//declaracion de las variables tal y como estan en el
metodo
public static void main(String[] args) {
// TODO code application logic here
System.out.printf("Dame el grado del polinomio que sea mayor a 2: ");//Pedimos el grado del
polinomio
int n = sc.nextInt();//guardamos el grado en "n"
System.out.printf("Dame el numero de tolerancia: ");//Pedimos el valor de la tolerancia
double iter = sc.nextDouble();//guardamos la tolerancia en "iter"
FactoresCuadraticos fc = new FactoresCuadraticos(n, iter);
//instancia del objeto "fc" que recibe como parametros a "n", "iter"
//es decir son los valores iniciales que necesitamos para realizar el metodo
fc.Llenar();//metodo que guarda los coeficientes del polinomio en el arreglo "a"
fc.MetodoFC();//se inicia el metodo de factores cuadraticos
fc.SacarRaices();//metodo que saca raices basado en la fina ecuacion general(chicharronera)
boolean f = false;//variable de tipo booleano
while(!f)//mientras f diferente de true(verdadero), hacer
{
System.out.printf("Quieres sacar las raices faltantes?\n1. si\t2. no\n");//mensaje
int op = sc.nextInt();//se lee y se guarda la opcion en "op"
if(op==1)//si "op" es igual a 1
{
fc.Llenar2();//ahora los valores de "b" van a ser las nuevas "a"
if(fc.k!=0)// esto es para asegurar que todas la raices fueron calculadas
{
fc.MetodoFC();//se aplica de nuevo el metodo
fc.SacarRaices();//se sacan las raices
}
else//lanza un mesaje para avisar al usuario que todas las raices ya fueron
calculadas
{
System.out.println("Ya no hay mas raices");
}
}
else
f=true;//rompe el ciclo y termina el programa
}

}
FactoresCuadraticos(int n, double iter)//metodo constructor
{
//asignacion de variables provenientes del menu a variables propias de la clase
this.n = n+1;
this.gradoN = n;
this.gradoK = n-2;
this.tolerancia = iter;
this.k = this.n-2;
//se crean los arreglos "a" y "b" con su correspondiente tamao
a = new double[this.n];
b = new double[this.k];
}
public void Llenar()
{
System.out.printf("Dame los coeficientes del polinomio:\n");//mensaje
for(int i=0; i<this.n; i++)//recorre el arreglo
{
System.out.printf("a[%d]: ", i);//para ver en que lugar de a se guarda el coeficiente
a[i] = sc.nextDouble();//de lee y se guarda el coeficiente en "a[i]"
}
}
public void Llenar2()
{
if(gradoK>1)//Asegura que el grado sea mayor a 1 para poder realizar de nuevo el metodo
{
n = k;//el tamao del nuevo arreglo "a" es igual al tamao del arreglo "b"
gradoN = gradoK;//el grado del polinomio formado por las b es ahora el del nuevo
polinomio
a = new double[n];//se reinicia el arreglo "a" haciendo todos sus valores 0
for(int i=0; i<n; i++)//recorre el arreglo
{
a[i]= b[i];//las b son las nuevas a
}
k = n-2;//ahora el tamao del arreglo "b" es k=n-2; donde n=k arriba
gradoK = gradoN-2;//creo que esto es obvio
b = new double[k];//se reinicia el arreglo "b" haciendo todos sus valores 0
//Nota: terminado el metodo el programa ahora va a tener como polinomio inicial el
polinomio formado por las b
}
else
k=0;//Si no vuelve a k=0 para poder condicionarse en el main
}
public void MetodoFC()
{
int cont=0;//cuenta el numero de iteraciones
do//hacer
{
cont++;//cont=cont+1
if(cont==1)//para la primera iteracion
{
this.dP = a[gradoN-1]/a[gradoN-2];// formulaso
this.dQ = a[gradoN]/a[gradoN-2];//formulaso
P = 0; Q = 0; R=1; S=1;//R=1 y S=1 solo es para que no rompa el ciclo en la primera
iteracion
}
else
{
P += dP;//formulaso: P*=dP+P aqui no es necesario poner otra variable que
represente a "P*" porque al final de la iteracion P*=P
Q += dQ;//formulaso(es lo mismo pero con Q)
for(int j=0; j<k; j++)//recorre el arreglo "b"
{
//estos if y else hacen referencia a cuando los valores de b[-1] y b[-2] son 0
if(j==0)
b[j] = a[j];
else if(j==1)
b[j] = a[j] - P*b[j-1];
else
b[j] = a[j] - P*b[j-1] - Q*b[j-2];
}
if(gradoN==2)//si el grado del polinomio es 2
{
//formulazo: hace referencia a cuando el valor de b[-1] es 0
R = a[gradoN-1] - P*b[gradoN-2];
S = a[gradoN] - Q*b[gradoN-2];
dP = R/b[gradoN-2];
dQ = S/b[gradoN-2];
}
else
{
//formulazo
R = a[gradoN-1] - P*b[gradoN-2] - Q*b[gradoN-3];
S = a[gradoN] - Q*b[gradoN-2];
dP = R/b[gradoN-2];
dQ = S/b[gradoN-2];
}
}
}while(Math.abs(dP)>tolerancia & Math.abs(dQ)>tolerancia & Math.abs(R)>tolerancia &
Math.abs(S)>tolerancia);
//mientras "R", "S", "dP" y "dQ" sean menores a la tolerancia romper ciclo
//lo que sigue es solo para imprimir el polinomio resultante
int l=gradoN-2;//nos va a servir para darle exponentes al polinomio formado por las b
System.out.printf("P(x) = (x^2 %fx %f)(", P, Q);//imprime el primer polinomio que es de
grado dos
for(int i=0; i<k; i++)//recorre el arreglo "b"
{
if(l>=0)//evita exponentes negativos
{
System.out.printf(" %fx^%d ", b[i], l);//imprime el polinomio formado por las b con
sus respectivos exponentes en x
l--;//l=l-1: "l" empezo en k y se le va restando uno cuando se pasa de una b a otra
}
}
System.out.printf(") %fx %f\n", R, S);//imprime el residuo
}
public void SacarRaices()
{
double a=1, b=P, c=Q;//coeficientes(los coeficientes son tomados de polinomio grado dos del
cual se esta seguro)
//calcula lo que hay dentro de la raiz y lo guarda en d
double d = Math.pow(b,2)-4*a*c;
if(d<0)//si son raices complejas

{
d = -1*d;//hacemos que d sea positivo
double i = Math.sqrt(d);//saca su raiz y lo guarda en i
//muestra la parte real y la parte imaginaria por separado
//segun la chicharronera
System.out.println("Una raiz es: "+-b/(2*a)+"+"+i/(2*a)+"i");
System.out.println("La otra raiz es: "+-b/(2*a)+"-"+i/(2*a)+"i");
}
else//si son raices reales
{
//continuacion de chicharronera y muestra el resultado
System.out.println("Una raiz es: "+(-b+Math.sqrt(d))/(2*a));
System.out.println("La otra raiz es: "+(-b-Math.sqrt(d))/(2*a));
}
}
}
TEMA II: Sistemas de Ecuaciones Lineales
Mtodo Gauss:
Descripcin del Mtodo:
El mtodo de eliminacin de Gauss es una de las herramientas ms utilizadas en la resolucin de sistemas de
ecuaciones lineales en forma matricial. Este mtodo utiliza operaciones simples entre los renglones de la matriz y
as poder eliminar trminos para posteriormente resolver el sistema de ecuaciones lineales.
La principal diferencia entre Gauss y Gauss-Jordan radica en la terminacin del mtodo. Cuando utilizamos Gauss,
nos interesa dejar una sola variable con valor numrico y a partir de esta, sustituir en las ecuaciones restantes hasta
llegar al resultado de cada variable:
1 1 1
[ 0 2 2] = [ ]
0 0 3

Sin embargo con Gauss-Jordan, se manipula la matriz con las mismas operaciones hasta llegar a la matriz identidad
y los valores de las variables aparecern directamente:
1 0 0
[0 1 0] = [ ]
0 0 1

Ejemplo:
A continuacin se muestra un ejemplo para comprender el procedimiento empleado para resolver un Sistema de
Ecuaciones Lineales:

RESOLUCIN:
1.-Se plantea el sistema:
=
=
=
Para comenzar se expresa en su forma matricial:
2 1 3 1
[1 3 2 | 12 ]
9 3 9 0

2.-Comenzamos con las siguientes operaciones:


/
/ +
/
Para posteriormente obtener:
2 1 3 1
7 1 23
0 |
2 2 | 2
1 3 3
[0 2 2 2]
2 1 3 1
7 1 23 2 1 3 1
[0 2
1
2 | 2 ] 2 + 3 = [ 0 7/2 1/2 | 23/2]
1 3 3 7
0 2 2 0 0 11/7 22/7
2
Como se observa, aislamos el valor de la tercera variable (0, 0, 11/7) y as despejar x3.
Posteriormente se tiene que realizar sustitucin para encontrar los valores de las variables
restantes.
11 22
(3 ) =
7 7
(3 ) = 2
Ahora:
7 1 23
(2 ) + (2) =
2 2 2
(2 ) = 3
Despus:
2(1 ) + (3) 3(2) = 1
(1 ) = 1

RESOLUCIN:
Tomando el mismo ejemplo para poder observar la diferencia al final de la resolucin, ahora por
Gauss-Jordan partimos de:
2 1 3 1 2 1 3 1
7
[ 0 7/2 1/2 | 23/2] 11 (3 ) = [ 0 7/2 1/2| 23/2]
0 0 11/7 22/7 0 0 1 2
1 2
Ahora: 2 (3 ) + 2 y despus
7 2
2 1 3 1 1 0 0 1
[ 0 1 0 | 3 ] 3 3 + 1 y 1 2 + 1 =[ 0 1 0| 3]
0 0 1 2 0 0 1 2
Ntese que al final del mtodo Gauss-Jordan, se obtiene la matriz identidad y con ella los valores
directos del sistema.
A continuacin se presenta un ejercicio de mayor dificultad para resolver con Gauss-Jordan.
1 1 5 2 4
4 4 3 1 6
[ | ]
0 6 6 2 1
5 7 0 3 1
-4R1+R2
-5R1+R4
1 1 5 2 4
0 0 17 7 10
[ | ]
0 6 6 2 1
0 2 25 7 19
Reacomodando:
1 1 5 2 4
0 2 25 7 19
[ | ]
0 0 17 7 10
0 6 6 2 1
R4-3R2
R4-(81/17) R3
1 1 5 2 4
0 2 25 7 19
0 0 17 7 || 10
176 176
[ 0 0 0
17 17 ]
R2-(25/17) R3
R1-(5/17) R3
1 1 0 0 1
0 2 0 0 1
0 0 17 0 || 17
176 176
[ 0 0 0
17 17 ]
R1-(1/2) R2
Dividiendo cada rengln entre su valor propio para llegar a la identidad nos queda:
1 0 0 0 3/2
0 1 0 0 1/2
[ | ]
0 0 1 0 1
0 0 0 1 1
Ejercicio:
Resolver mediante el mtodo de gauss los siguientes sistemas de ecuaciones:
1.- + 2 3 = 0
3 + 2 + 6 = 8
3 + 3 + = 0
2 + 3 + 2 = 8
2.- (1 + ) = 3
2 + =
3.- + 5 = 2
5+0y+z=3
2 5
+ 3 + 2 =
5 2
Diagrama de Flujo:

1
Inicio

Mostrar el
vector
Resultante

Ingresar Matriz
y Vector
Resultante

Fin

Se define el tamao de
la matriz.

Se analiza la diagonal
para comenzar
operaciones

Se analiza la diagonal
para comenzar
operaciones Hasta completar
la diagonal

Se divide un elemento
conveniente de la
diagonal entre s mismo
para obtener 1.

Realizan las operaciones


necesarias para obtener
0 fuera de la diagonal.

1
Algoritmo:
1. Inicio
2. Se Ingresa la Matriz y el Vector Resultante
3. Se define el tamao de la matriz n, el cual nos indica la dimensin de la diagonal al igual que la matriz.
4. Se analiza la diagonal para comenzar operaciones.
5. Se divide un elemento conveniente de la diagonal entre s mismo para obtener 1 en su respectiva
posicin, y as con todos los elementos de la diagonal.
6. Realizan las operaciones necesarias para obtener 0 fuera de la diagonal y llegar a la matriz identidad.
7. Se muestra el vector Resultante
8. Fin

Cdigo Comentado:
%Datos
A=input('Dame la matriz de coeficientes: ');
B=input('Dame el vector resultante: ');
C=[A B]; %--> unin de los datos en una solo matriz
n=length(A);
for i=1:n %--> para i desde la primera fila hasta el nmero de filas existentes
if C(i,i)~=1 %--> si el elemento de la diagonal es diferente de 1
C(i,:)= C(i,:)./C(i,i); %--> entonces se convierte a 1 dividiendo toda la fila por dicho
elemento
end
%--> adems el resto de elementos de la columna deben convertirse a 0 :
%--> es decir si n es diferente de i ya que si i y n son iguales entonces el
%--> elemento se encuentra en la diagonal
for n=1:n %--> para n desde la primera fila hasta el nmero de filas existentes
if n~=i %--> si n en la columna i no est en la diagonal es decir si i no es igual a n
C(n,:)=-C(n,i).*C(i,:)+C(n,:); %--> entonces se convierte a 0
end
end
end
x=C(1:n,n+1)%--> presenta el valor de la x resultantes
Mtodo Gauss-Seidel:
Descripcin del Mtodo:
Gauss- Seidel es un mtodo numrico para resolver un sistema de ecuaciones. Para poder utilizar el mtodo es
necesario verificar que tenemos un matriz dominante, para as comprobar que tenemos un sistema de ecuaciones
que converge.
Por lo tanto, el primer paso que debemos realizar es la suma de la matriz diagonal, considerando todos los nmeros
como su valor absoluto. Si dicha suma es mayor a la suma de las dems diagonales, podemos proseguir en el mtodo;
en caso contrario, es necesario realizar un reacomodo de renglones, es decir se aplica un pivoteo de manera
conveniente para tener una diagonal principal dominante.
11 1 12 2 13 3 1
21 1 22 2 23 3 = 2
31 1 32 2 33 3 3

|11 | + |22 | + |33 | > |12 | + |23 |


|11 | + |22 | + |33 | > |21 | + |32 |
|11 | + |22 | + |33 | > |31 | |13 |
La siguiente accin a realizar es el despeje de las variables de la siguiente manera: la primer variable se despeja de
la primer ecuacin, la segunda variable de la segunda ecuacin
Una vez despejadas las ecuaciones se sustituyen los valores iniciales, en caso de no tener se consideran stos como
cero.
Entonces: 1 tendr un valor cuando 2 y 3 valgan cero, sin embargo 2 se encontrar con el valor de 1 obtenido y
3 con valor de cero, por lo tanto 3 valdr de acuerdo a 1 y 2 que se tengan como resultado de las operaciones
anteriores. Es decir los valores que se obtienen son de acuerdo al valor que d como resultado en la solucin de la
variable anterior.
Para la siguiente iteracin 1 se ver influenciado por los valores que tomaron 2 y 3 . Se
vuelve a realizar una sustitucin de los valores, como se explic en el prrafo anterior.
Lo anterior se resume en la utilizacin de las siguientes frmulas:
1 12 2 13 3
1 =
11
2 21 1 23 3
2 =
22
3 31 1 32 1
3 =
33
El mtodo termina cuando el error sea menor al error permitido o cuando el nmero de iteraciones se cumpla, como
en todos los mtodos numricos que hemos visto.
Recordar que el error relativo porcentual se obtiene con lo siguiente:
1
=| | 100% <

Ejemplo:
Resolver el siguiente sistema de ecuaciones lineales con el mtodo de Gauss Seidel partiendo de x=1,y=1, z=1
como los valores iniciales:
2 3 + 2 2 = 1
+ 7 + 2 = 2
3 + + 8 = 3
RESOLUCIN:
1.-El sistema converge debido a que la suma de la diagonal principal es mayor a la suma de los
nmeros laterales de la matriz.

1 + 3 2 2 2 2 3 3
= ; = ; =
2 7 8
1+32 212 1 331 1
= =1 ; = = ; = =
2 7 7 8 8

2.-Despus de realizar la primera iteracin, las siguientes iteraciones ahora tomaran el valor
nuevo de x, y, z respectivamente. A continuacin se muestran los resultados obtenidos
despus de ocho iteraciones.
Iteracin x y z
0 1 1 1
1 1 -0.1429 0.0179
2 0.2854 0.2457 0.2592
3 0.5380 0.1907 0.1604
4 0.6281 0.1872 0.1248
5 0.6609 0.1846 0.1119
6 0.6705 0.1840 0.1081
7 0.6734 0.1838 0.1070
8 0.6742 0.1838 0.1067
iteracin x y z
0 1 1 1
1 1 -0.14286 0.017857
2 0.285395 0.245672 0.259213
3 0.53798 0.190665 0.160436
4 0.628121 0.187243 0.124753
5 0.660853 0.184633 0.111928
6 0.670495 0.184025 0.108141
7 0.673387 0.18383 0.107006
8 0.674233 0.183775 0.106674
9 0.674481 0.183759 0.106577
10 0.674554 0.183754 0.106548
RESOLUCIN:
1.-A continuacin se presenta un ejemplo ms complejo resuelto con el Mtodo de Gauss-
Seidel tomando como valores iniciales x=4, y=7, z=3 con un error menor al 3%.
7 + + 4 = 24
2 + 28 3 = 12
3 + + 13 = 43
2.-Las ecuaciones serian:
24 4 12 2 43 3
= ; = ; =
7+ 28 3 + 13

Iteracin x y z
0 4 7 3
1 -2.2857 2.4060 1.4833
2 3.3666 0.39216 3.56762
3 1.20131 0.50876 3.30911
4 1.45033 0.51542 3.34900
5 1.40806 0.52399 3.342968
6 -2.285714 2.40605 1.483323
7 1.41154 0.52616 3.34380
8 1.41153 0.52741 3.34388

3.-Ahora comprobamos el error:


1 1.41153 1.41154
=| | 100% < = | | 100 = 2103
1.41153

Ejercicio:
1.- Resolver el siguiente sistema de ecuaciones por el mtodo de Gauss Seidel utilizando un = .0001
. 11 + 72 . 33 = 19.3
31 . 12 . 23 = 7.85
. 31 . 22 103 = 71.4

2.- Resolver por el mtodo de Gauss Seidel el siguiente sistema de ecuaciones


101 + 2 + 23 = 3
41 + 62 3 = 9
21 32 + 83 = 51

3.- Resolver por el mtodo de Gauss Seidel el siguiente sistema de ecuaciones

2 5 + 4 + = 3
2 + + = 5
4 + 6 + 2 + = 10
Diagrama de Flujo:
Algoritmo:
1. Se verifica que el sistema sea convergente, es decir, que el valor absoluto de la traza es mayor al valor de los
dems coeficientes del sistema.
2. Mientras el sistema no sea convergente, se modifica el orden de dicho sistema de tal forma que pueda
converger.
3. Si el sistema no cumple con el 1. Se dice que el sistema es no convergente.
4. Si no:
4.1 Se definen los valores iniciales de las incgnitas. Si no se dan, los valores iniciales serian cero.
4.2 Se definen las incgnitas de la diagonal principal por despeje, usando los valores anteriores de dichas
incgnitas
4.3 Se repite el punto 4.2 hasta que el error relativo porcentual sea menor al error dado.

Cdigo Comentado:
%Datos
A=input('Dame la matriz de coeficientes: ');
b=input('Dame el vector resultante: ');
error=input('Dame el error: ');
n=length(A);%--> n = al tamao de la matriz A
x=zeros(n,1);%--> declaracion de un vector de n renglones
x_n=zeros(n,1);%--> declaracion de un vector de n renglones
e=zeros(n,1);%--> declaracion de un vector de n renglones

%Calculo de convergencia
for i=1:n-1%--> Para i=1 hasta n-1
while A(i,i)<max(A(i,1:n))%--> mientas el coefiente de la diagonal de A sea menor al maximo
valor del renglon en el que se este de A
Aux=A(n,1:n);%--> se guarda el ultimo renglon (completo) en "Aux"
b_aux=b(n);%--> de igual forma se guarda el ultimo renglon de "b" en "b_aux"
for j=n:-1:i+1 %--> Para j=n, con pasos de -1, hasta i+1
A(j,1:n)=A(j-1,1:n); %--> Ahora por cambio de variable hacemos que el ultimo renglon
de A sea igual al renglon de arriba
b(j)=b(j-1); %--> De igual manera lo hacemos para b
end
A(i,1:n)=Aux; %--> Ahora el ultimo renglon lo pasamos la primera posicion
b(i)=b_aux; %--> De igual forma para b
end
end

%Inicio del metodo Gauss-Seidel


for i=1:n %--> para i=1 hasta n
e(i)=1; %--> iniciamos el vector "e" con puros unos para poder usarlo en el while
end

while e(1)>=error && e(2)>=error && e(3)>=error %--> mientras el vector e sea menor al error
for i=1:n %--> para i=1 hasta n
sum=0; sum1=0; %-->declaramos dos variables para guardar las sumas y la iniciamos en cero
if i==1 %--> si i es igual a 1
for j=i+1:n %--> para j=i+1 hasta n
sum=A(i,j)*x(j)+sum; %--> segun la formula que se tiene sum = a12*x2+a13*x3...
end
x_n(i)=(b(i)-sum)/A(i,i); %--> esta es la continuacion de la formula para x1
end
if 2<=i && i<=n-1 %--> para encontrar el valor de la x intermedias
%--> Este for sirve para hacer la suma de manera acendente en cuanto a las posiciones
for j=i+1:n
sum=A(i,j)*x(j)+sum;
end
%--> Este for sirve para hacer la suma de manera decendente en cuanto a las posiciones
for j=i-1:-1:1
sum1=A(i,j)*x(j)+sum1;
end
x_n(i)=(b(i)-sum-sum1)/A(i,i); %--> sumamos las dos sumas y hacemos la continuacion de
la formula para las x intermedias
end
if i==n %--> para encontrar la xn
%--> Es la misma analogia que con la primera x
for j=i-1:-1:1
sum=A(i,j)*x(j)+sum;
end
x_n(i)=(b(i)-sum)/A(i,i);
end
end
for i=1:n %--> para i=1 hasta n
e(i)=abs((x_n(i)-x(i))/x_n(i)); %--> Se calcula el error para cada una de las x
resultantes
end

x=x_n; %--> se hace un cambio de variable


end
%--> se muestra en pantalla las x resultantes
x
Mtodo Gauus-Seidel con Relajacin:
Descripcin del Mtodo:
El mtodo de Gauss-Seidel nos sirve para resolver sistemas de ecuaciones lineales con un gran nmero de
ecuaciones, gracias a esto es uno de los mtodos ms utilizados.
A este mtodo se le puede aplicar un procedimiento extra llamado relajacin en el que se hace un promedio
ponderado de los resultados actuales y anteriores que permite mejorar la convergencia, es decir, se puede reducir el
nmero de iteraciones totales de esta, muy til para optimizar el desarrollo.
Para comenzar el mtodo se debe verificar que el sistema es convergente, es decir que la suma de la diagonal
principal es mayor a la suma de los dems nmeros en la matriz. Una vez que se haya verificado la convergencia, se
puede comenzar a aplicar el mtodo.
Se pueden encontrar las formulas a utilizar durante el desarrollo del mtodo despejando la primer variable de la
primer ecuacin, la segunda variable de la segunda ecuacin y as sucesivamente. Para el desarrollo de esta
explicacin se utilizara una matriz de 3 variables: 1 , 2 , 3 .
Las formulas a utilizar en un problema de 3 variables son las siguientes:

El proceso de relajacin se 1) Obtenemos el valor de X1 : 2) Aplicas relajacin:


debe aplicar en cada iteracin 1 12 2 13 3 = 1 + (1 )1
al momento de hallar el valor 1 =
11
de cada variable.
4) Obtenemos el valor de X2 : 5) Aplicas relajacin:
3) Para la frmula de X2 : 2 21 1 23 3 = 2 + (1 )2
2 =
= 22
7) Obtenemos el valor de X2 : 8) Aplicas relajacin:
6) Para la frmula de X3 : 3 31 1 32 2 = 3 + (1 )3
3 =
= 33

Relajacin:
Para aplicar este mtodo, se introduce un factor de relajacin con un valor entre 0 y 2, si se escoge un valor entre 0
y 1 se le llama subrelajacin, si se escoge un valor entre 1 y 2 se le llama sobrerelajacion.
Tomar en cuenta que:
El valor de 2 3 en la primer iteracin es 0, hasta que se encuentra un nuevo valor para ambas. Una vez
que se halla el primer valor de cada variable, se debe utilizar este nuevo valor para encontrar las siguientes
variables. Es un proceso de sustitucin de valores en cada iteracin en el que para hallar el nuevo valor se
debe utilizar el anterior inmediato encontrado.

Ejemplo:
Para explicar el funcionamiento de la relajacin se utilizara el ejemplo base propuesto para Gauss-Seidel y ahora se
le aplicara la relajacin con = 0.8 y valores iniciales de x, y, z =1:
RESOLUCIN:
1.- Partimos de:
1 + 3 2 2 2 2 3 3
= ; = ; =
2 7 8
1+32 212 1 331 1
= 2 =1 ; = 7 = 7 ; = 8 = 8
2.- Aplicando la relajacin en la primera iteracin:
= 1(. 8) + (1 0.8)1 = 1
1 1 1
= (. 8) + (1 0.8) =
7 7 7
1 1 1
= (. 8) + (1 0.8) =
8 8 8

Ahora para las siguientes iteraciones, con apoyo de Microsoft Excel se obtiene que:
iteracin x y z
0 1 1 1
1 1 0.085714 0.214286
2 0.428316 0.213681 0.250227
3 0.516047 0.195268 0.178394
4 0.605707 0.188848 0.135481
5 0.649824 0.185476 0.116639
6 0.666361 0.184315 0.109841
7 0.671982 0.183927 0.107573
8 0.673783 0.183805 0.106854
9 0.674342 0.183768 0.106632
10 0.674512 0.183757 0.106565
Con la tabla anterior queda demostrado que la relajacin permite obtener el resultado de
manera ms rpida y eficiente.
RESOLUCIN:
A continuacin se presenta otro ejemplo con el siguiente Sistema de Ecuaciones Lineales con
valores iniciales de x, y, z = 1 y = 0.9:

7 3 + 4 = 5
3 + 7 + 8 = 2
+ + 19 = 3

5 + 3 4 2 3 8 3
= ; = ; =
7 7 19

iteracin x y z
0 1 1 1
1 0.614286 -0.89184 0.26724
2 0.529733 0.177892 0.14157
3 0.64481 -0.01766 0.125351
4 0.641922 0.012908 0.124153
5 0.644047 0.007844 0.123959
6 0.643871 0.008656 0.123952
7 0.643916 0.008524 0.123949
8 0.643911 0.008545 0.123949
9 0.643912 0.008542 0.123949
10 0.643911 0.008542 0.123949
Con relajacin de 0.9=
iteracin x y z
0 1 1 1
1 0.614286 -0.89184 0.26724
2 0.529733 0.177892 0.14157
3 0.64481 -0.01766 0.125351
4 0.641922 0.012908 0.124153
5 0.644047 0.007844 0.123959
6 0.643871 0.008656 0.123952
7 0.643916 0.008524 0.123949
8 0.643911 0.008545 0.123949
9 0.643912 0.008542 0.123949
10 0.643911 0.008542 0.123949
Ejercicio:
1. Resolver con relajacin de = 0.8 y valores iniciales de x,y,z=0.1 con una tolerancia del 5%
12 3 + 2 2 = 2
4 7 + 2 = 4
9 + 8 = 6
2. Resolver con relajacin de = 0.9 y valores iniciales de x,y,z=0.2 con una tolerancia del 7%
12 3 + 2 2 = 2
4 7 + 2 = 4
8 + 8 + 4 = 6
5 9 + 8 = 12
3. Resolver con relajacin de = 0.7 y valores iniciales de x,y,z=1 el mismo sistema de ecuaciones lineales
del ejercicio 2 , y comparar la diferencia entre ambos grupos de iteraciones, Cual converge con mayor
rapidez?
Diagrama de Flujo:
Algoritmo:
1.-Se verifica que el sistema sea convergente, es decir, que el valor absoluto de la traza es mayor al valor de
los dems coeficientes del sistema.
2. Mientras el sistema no sea convergente, se modifica el orden de dicho sistema de tal forma que pueda
converger.
3. Si el sistema no cumple con el 1. Se dice que el sistema es no convergente.
4. Si no:
4.1 Se definen los valores iniciales de las incgnitas. Si no se dan, los valores iniciales serian cero.
4.2 Se definen las incgnitas de la diagonal principal por despeje, usando los valores anteriores de dichas
incgnitas
4.3 Se aplica la frmula de relajacin a las incgnitas encontradas para hacer que dichos valores converjan
ms rpido dado un valor de lambda.
4.4 Se repite el punto 4.2 hasta que el error relativo porcentual sea menor al error dado.

Cdigo Comentado:
%Datos
A=input('Dame la matriz de coeficientes: ');
b=input('Dame el vector resultante: ');
error=input('Dame el error: ');
l=input('Dme el valor de lambda: ');

n=length(A);%--> n = al tamao de la matriz A


x=zeros(n,1);%--> declaracion de un vector de n renglones
x_n=zeros(n,1);%--> declaracion de un vector de n renglones
e=zeros(n,1);%--> declaracion de un vector de n renglones

%Calculo de convergencia
for i=1:n-1%--> Para i=1 hasta n-1
while A(i,i)<max(A(i,1:n))%--> mientas el coefiente de la diagonal de A sea menor al maximo
valor del renglon en el que se este de A
Aux=A(n,1:n);%--> se guarda el ultimo renglon (completo) en "Aux"
b_aux=b(n);%--> de igual forma se guarda el ultimo renglon de "b" en "b_aux"
for j=n:-1:i+1%--> Para j=n, con pasos de -1, hasta i+1
A(j,1:n)=A(j-1,1:n);%--> Ahora por cambio de variable hacemos que el ultimo renglon de
A sea igual al renglon de arriba
b(j)=b(j-1);%--> De igual manera lo hacemos para b
end
A(i,1:n)=Aux;%--> Ahora el ultimo renglon lo pasamos la primera posicion
b(i)=b_aux;%--> De igual forma para b
end
end

%Inicio del metodo Gauss-Seidel


for i=1:n%--> para i=1 hasta n
e(i)=1;%--> iniciamos el vector "e" con puros unos para poder usarlo en el while
end

while e(1)>=error && e(2)>=error && e(3)>=error %--> mientras el vector e sea menor al error

for i=1:n%--> para i=1 hasta n


sum=0; sum1=0;%-->declaramos dos variables para guardar las sumas y la iniciamos en cero
if i==1%--> si i es igual a 1
for j=i+1:n%--> para j=i+1 hasta n
sum=A(i,j)*x(j)+sum;%--> segun la formula que se tiene sum = a12*x2+a13*x3...
end
x_n(i)=(b(i)-sum)/A(i,i);%--> esta es la continuacion de la formula para x1
end
if 2<=i && i<=n-1%--> para encontrar el valor de la x intermedias
%--> Este for sirve para hacer la suma de manera acendente en cuanto a las posiciones
for j=i+1:n
sum=A(i,j)*x(j)+sum;
end
%--> Este for sirve para hacer la suma de manera decendente en cuanto a las posiciones
for j=i-1:-1:1
sum1=A(i,j)*x(j)+sum1;
end
x_n(i)=(b(i)-sum-sum1)/A(i,i);%--> sumamos las dos sumas y hacemos la continuacion de
la formula para las x intermedias
end
if i==n%--> para encontrar la xn
%--> Es la misma analogia que con la primera x
for j=i-1:-1:1
sum=A(i,j)*x(j)+sum;
end
x_n(i)=(b(i)-sum)/A(i,i);
end
end

x_n=l.*x_n+(1-l).*x;%--> aplicamos la relajacion y lo guardamos en x_n


%--> el punto antes del operador significa que el producto que se efectua
sera escalar

for i=1:n%--> para i=1 hasta n


e(i)=abs((x_n(i)-x(i))/x_n(i));%--> Se calcula el error para cada una de las x resultantes
end

x=x_n;%--> se hace un cambio de variable


end
%--> se muestra en pantalla el valor de las x resultantes
x
Mtodo de LU:
Descripcin del Mtodo:
Se trata de un mtodo numrico que consiste en encontrar dos matrices a las que llamaremos L y U. Ambas
matrices siguen la siguiente estructura y estn igualadas a una matriz A, que es nuestra matriz base:
=

11 0 0 0 1
21 22 0 0 0 1
= = =
31 23 33 0 0 0 1
41 24 34 44 0 0 0 1

11 0 0 0 1 11
21 22 0 0 0 1
[ ] = 21
31 23 33 0 0 0 1
41 24 34 44 0 0 0 1

A partir de esta estructura, se encuentran los coeficientes L y los coeficientes U a travs de las siguientes
operaciones que corresponden a las columnas de L y los renglones de U :
12
1. 11 = 11 2. 12 = 11
3. 22 = 22 21 12

13
21 = 21 13 = 11
32 = 32 31 12

31 = 31 14 = 14 42 = 42 41 12
11

23 21 13
4. 23 = 22
5. 33 = 33 (31 13 + 32 23 )
24 21 14
24 = 22
43 = 43 (41 13 + 42 23 )

34 (31 14 +32 24 )
6. 34 = 33

7. 44 = 44 (41 14 + 42 24 + 43 34 )
Posteriormente se utiliza la Matriz L, y el vector resultante para obtener el vector :
1 1
2 2 2 21 1
=[ ][ ]=[ ] 1 = 1 2 =
3 3 11 22
4 4

3 (31 1 +32 2 ) 4 (41 1 +42 2 +43 3 )


3 = 33
4 = 44

Ejemplo:
RESOLUCIN:

]
= [


11 = 11 = 9
21 = 21 = 18
31 = 31 = 27
41 = 41 = 18
12 5
12 = =
11 9
13 2
13 = =
11 9
14 9
14 = = =1
11 9
5
22 = 22 (21 12 ) = 17 (18 ) = 7
9
5
32 = 32 (31 12 ) = 22 (27 ) = 7
9
5
42 = 42 (41 12 ) = 59 (18 ) = 49
9

2
23 (21 13 ) 8 (18 9) 4
23 = = =
22 7 7
24 (21 14 ) 20 (18 1) 2
24 = = =
22 7 7
2 4
33 = 33 [(31 13 ) + (32 23 )] = 12 [(27 ) + (7 ) ] = 2
9 7
2 4
43 = 43 [(41 13 ) + (42 23 )] = 42 [(18 ) + (49 )] = 10
9 7

2
34 [(31 14 ) + (32 24 ) 30 [(27 1) + (7 7)] 1
34 = = =
33 2 2

44 = 44 [(41 14 ) + (42 24 ) + (43 34 )]


2 1
= 38 [(18 1) + (49 ) + (10 )] = 1
7 2





]

= [ ; =



[ ]

Ejercicio:
1. Factorizar por LU la siguiente matriz:
9 3 6
A=[6 2 3]
2 4 1

2. Resolver el siguiente sistema de ecuaciones lineales por el mtodo de LU


2 3 + 2 + 4 = 1
4 7 + 2 + 6 = 4
8 + 8 + 4 = 8
5 9 + 2 = 12
3. Descomponer por LU la siguiente Matriz:
1 1 2 3
1 1 0 2
A=[ ]
2 2 1 3
1 4 3 1
Diagrama de Flujo: Los renglones posteriores de U van a ser igual al
cociente de los coeficientes del rengln
correspondiente de A menos las sumas de los
productos del rengln correspondiente de L por el
Inicio rengln anterior de U todo eso entre el valor de L
de la diagonal principal del rengln
(LU) correspondiente.

Se introduce el grado
de la matriz A (nxn) as
como la matriz A y el
vector resultante

Obtenidas las matrices, la matriz L


se iguala al vector resultante por lo
que se debe encontrar un vector
Se define la para que se cumpla la igualdad.
matriz L y U

La primera columna de
L corresponder a la
El vector en columna
primera columna de A
ser la solucin al
sistema de ecuaciones.

El primer rengln de U
corresponder al primer
FIN
rengln de A entre la
primera columna de L

La segunda columna de L
ser igual al valor de la
columna de A 1ra columna
de L x el primer valor de U
Algoritmo:
1. Se analiza al sistema como a una matriz de nxn
2. Dicha matriz(A) ser igual a dos matrices triangulares inferior y superior, L y U respectivamente, donde U tiene
una diagonal principal unitaria.
3. Se definen los valores de dichas matrices:
3.1. La primera columna de la matriz L es igual a la primera columna de A
3.2. El primer rengln de U es igual al cociente de los coeficientes del primer rengln de A entre el valor de 11
3.3. Las columnas posteriores de L van a ser igual a las columnas correspondientes de A menos las sumas de los
productos de las columnas anteriores de L por el valor de U de la columna correspondiente.
3.4. Los renglones posteriores de U van a ser igual al cociente de los coeficientes del rengln correspondiente de
A menos las sumas de los productos del rengln correspondiente de L por el rengln anterior de U todo eso
entre el valor de L de la diagonal principal del rengln correspondiente.
4. Obtenidos los valores de las matrices L y U
4.1. La matriz L tiene que ser igual al vector de solucin b, por lo tanto se debe de encontrar un vector columna
X que satisfaga la igualdad
4.1.1. Los coeficientes del vector columna X se definen por medio de sustitucin
4.2. Obtenidos los valores de X dicho vector tiene que ser igual a la matriz U, por lo tanto debe de haber un
vector columna b que satisfaga a la igualdad
4.2.1.Los coeficientes del vector columna b se definen por medio de sustitucin
5. Dichos valores del vector b sern la solucin del sistema de ecuaciones lineales.

Cdigo Comentado:
%Datos
A=input('Dame la matriz de coeficientes: ');
b=input('Dame el vector resultante: ');
%Factorizacion LU
n=length(A); %--> n = al tamao de la matriz A
L=zeros(n,n);%--> Se declara la matriz L de nxn
U=zeros(n,n); %--> Se declara la matriz U de nxn
for k=1:n
U(k,k)=1; %--> la diagonal de U sera de 1
L(k:n,k)=A(k:n,k)-L(k:n,1:k-1)*U(1:k-1,k); %--> (k:n,k) = tomara todo la columna k
%--> (k:n,1:k-1) = tomara los renglones de k hasta k-
1, de 1 hasta k-1 columnas
%--> (1:k-1,k) = tomara la columna k, de 1 hasta k-1
renglones cada una
U(k,k+1:n)=(A(k,k+1:n)-L(k,1:k-1)*U(1:k-1,k+1:n))/L(k,k); %--> (k,k+1:n) = tomara la renglon k,
de k+1 hasta n
%-->(k,1:k-1) = tomara el renglon k,
de 1 hasta k-1 columnas
%-->(1:k-1,k+1:n) = tomara la columna
k+1 hasta n, de 1 hasta k-1 renglones
end
%Calculo de los vectores resultantes
x=L^(-1)*b;
X=U^(-1)*x;
%--> Muestra en pantalla el valor de X
X
TEMA III: Formulacin de Polinomios
Mtodo de Lagrange:
Descripcin del Mtodo:
El mtodo de interpolacin de LaGrange es utilizado para aproximar una serie de datos a un polinomio y as poder
manipular la informacin de manera ms cmoda y eficaz. El polinomio formado por la interpolacin de LaGrange
tiene la siguiente forma:

() = () ( )
=
En donde:


() = , = , , , , ,

=

Cuando n=1

() = ( ) + ( )

Cuando n=2
( )( ) ( )( ) ( )( )
() = ( ) + ( ) + ( )
( )( ) ( )( ) ( )( )
Y as respectivamente.

Ejemplos:
1.-Construir un polinomio interpolador utilizando el mtodo de LaGrange considerando los puntos (1, 3), (2, 4), (3,
2) y (5, 1).
2.-Obtener el polinomio de interpolacin usando la frmula de interpolacin de LaGrange con la siguiente tabla de
valores, e interpolar en el punto x =2.
X 4 0 -6 1 -4
Y 808 4 1438 10 160

RESOLUCIN:
1.- En este caso n = 3; entonces se tiene que:
( 2)( 3)( 5) 1
3,0 () = = ( 2)( 3)( 5)
(1 2)(1 3)(1 5) 8
( 1)( 3)( 5) 1
3,1 () = = ( 1)( 3)( 5)
(2 1)(2 3)(2 5) 3
( 1)( 2)( 5) 1
3,2 () = = ( 1)( 2)( 5)
(3 1)(3 2)(3 5) 4
( 1)( 2)( 3) 1
3,3 () = = ( 1)( 3)( 2)
(5 1)(5 2)(5 3) 24
Se obtiene finalmente que la suma de L ser el polinomio buscado:
() = 3,0 () + 3,1 () + 3,2 () + 3,3 ()
1 9
() = 3 2 + 11 4
2 2
RESOLUCIN:
2.-
( 1 )( 2 )( 3 )( 4 ) 1
0 () = = ()( + 6)( 1)( + 4)
(0 1 )(0 2 )(0 3 )(0 4 ) 960
( 0 )( 2 )( 3 )( 4 ) 1
1 () = = ( + 6)( 1)( + 4)( 4)
(1 0 )(1 2 )(1 3 )(1 4 ) 96
( 0 )( 1 )( 3 )( 4 ) 1
2 () = = ()( 1)( + 4)( 4)
(2 0 )(2 1 )(2 3 )(2 4 ) 840
( 0 )( 1 )( 2 )( 4 ) 1
3 () = = ()( + 6)( + 4)( 4)
(3 0 )(3 1 )(3 2 )(3 4 ) 105
( 0 )( 1 )( 3 )( 2 ) 1
4 () = = ()( 1)( + 6)( 4)
(4 0 )(4 1 )(4 3 )(4 2 ) 320

() = 808 0 () + 4 1 () + 1438 2 () + 10 3 ()+160 4 ()


() = 2 4 + 5 3 2 2 + + 4
Ahora valuado en x=2:
(2) = 2(2)4 + 5(2)3 2(2)2 + (2) + 4 = 70

Ejercicios Propuestos:
1.- Calcular el polinomio de interpolacin de LaGrange para el siguiente conjunto de puntos:
| 0 | .33 | .66 | 1
| 1 | 1.391| 1.935 | 2.718

2.- Por medio del polinomio interpolante de LaGrange, hallar el valor aproximado de la funcin f(x) en el punto
x=3.5, si f(x) es una funcin discreta representada por la siguiente tabla de valores:
x| 1 | 4 | 8
f(x)| 1.5709 | 1.5727 | 1.5751
3.- Desarrolla una frmula en polinomios de LaGrange para los siguientes datos
T| -12.0 | 10 | 38
| 50.1 | 10 | 4.9
Diagrama de flujo:

1
INICIO
Si
No
i=1
() (())
Dar el nmero de Si =
() ()
puntos que se
desea interpolar
i=j
No

n
Vec=L(i,1:n1)

Dar los valores


de x
P=Y*L

P
L

FIN

Dar los valores


de f(x)

Y2

i==1

j==1

vect=1

1
Algoritmo:
1. Dar el nmero de puntos con los que se desea interpolar n
2. Dar en orden los puntos ()((0 ), ( 1 ), (2 ) (1 )) y se guardan en un vector (2 )
3. Se hace una matriz con valores igual a 0 donde se guardarn los valores de x
4. Dar en orden los valores de x (0 , 1, 2 1 )
5. Se crea un vector auxiliar que permita guardar parte de las componentes de
6. Se crea un vector 2 que permita guardar los valores de
7. Se crean contadores (i, j) que permitan entrar y salir del ciclo cuando sea necesario y se inicializan
8. Mientras i=1
8.1. Mientras i sea diferente de j
8.1.1. El vector auxiliar va a ser igual a la multiplicacin de los valores entre el polinomio
formado por los correspondientes a las races de la columna de la matriz entre el producto
de los valores de () ()
9. Se guarda el valor del vector auxiliar en
10. El polinomio va a ser igual el producto de los valores de 2 y 2

Cdigo Comentado:
%Calculo del polinomio de segundo grado
Y=Y(1,1:n2);
L=zeros(n2,n2);%L2 va a ser una matriz de 3x3 donde se guardaran los coeficientes de Lagrange
for i=1:n2
2=1;%vector V auxiliar
for j=1:n2
if i~=j
V2=conv(V,poly(X(j))/(X(i)-X(j)));%poly --> construye un vector(polinomio) dadas sus
raices
%conv --> nos sirve para representar el producto
entre dos polinomios dados
end
end
L(i,1:n2)=V2;%Se guarda el valor de V2 en L2
end
P=Y*L;
Mtodo de Polinomio de Diferencias Finitas:
Descripcin del Mtodo:
Sabemos que un mtodo para interpolacin es el de LaGrange, sin embargo, las desventajas son las siguientes:
a) La cantidad de clculos necesaria para una interpolacin es grande
b) La interpolacin para otro valor de x necesita la misma cantidad de clculos adicionales, ya que no se
pueden utilizar partes de la aplicacin previa
c) Cuando el nmero de datos tiene que incrementarse o decrementarse , no se pueden utilizar los resultados
de los clculos previos.
d) La evaluacin del error no es fcil.

El uso de las frmulas de interpolacin de Newton salva estas dificultades. Para escribir una interpolacin de
Newton para un conjunto dado de datos tiene que desarrollar una tabla de diferencias. Una vez hecho esto, las
frmulas de interpolacin que pasan por distintos conjuntos de datos consecutivos como i=0,1,2,3; i=3,4,5,6 o
i=2,3,4, etc. Se pueden escribir con mucha facilidad. Por lo tanto, el orden de un polinomio de interpolacin se
puede incrementar rpidamente con datos adicionales. El error de la frmula de interpolacin de Newton tambin
se puede estimar con comodidad.

TABLA DE DIFERENCIAS FINITAS.


Supondremos que las abscisas de los datos tienen igual separacin con un tamao de intervalo h. Los puntos se
denotarn por ( , ).
Para evaluar una frmula de interpolacin de Newton hacia adelante, son necesarios una tabla de diferencias finitas
y los coeficientes binomiales. Por lo tanto, primero definimos las diferencias hacia adelante como:
0 = (diferencia hacia delante de orden cero)
= +1 (diferencia hacia delante de orden uno)
2 = +1 (diferencia hacia delante de orden dos)
3 = 2 +1 2 (diferencia hacia delante de orden tres)
.
.
.
= 1 +1 1 (diferencia hacia delante de orden k)
La tabla de diferencias es un medio conveniente para evaluar las diferencias para un conjunto dado de datos. En la
tabla, la primera columna es el ndice de los datos, la segunda son las ordenadas de los datos. La tercera columna
lista de diferencias de primer orden calculadas a partir de la segunda columna. La cuarta columna muestra las
diferencias de segn orden calculadas a partir de la columna anterior, etc. Cada rengln proporciona un conjunto de
diferencias hacia delante de los puntos correspondientes.

i 2 3 4 5
0 0 0 2 f0 3 f0 4 f0 5 f0
1 1 1 2 f1 3 f1 4 f1
2 2 2 2 f2 3 f2
3 3 3 2 f3
4 4 4
5 5

Uno debe saber lo siguiente acerca de la tabla de diferencias: Si fi se toma como


fi = f(xi ) (donde () es un polinomio de orden L, y los tienen igual separacin), entonces la columna para la
diferencia de orden L se convierte en una constante y la siguiente columna ([L+1]-sima diferencia) se anula. Si
esto ocurre, sabemos que los datos pertenecen a un polinomio de orden L. Sin embargo, si una columna de
diferencias tiene uno o ms valores anormalmente grandes, es probable que existan algunos errores humanos en el
proceso de desarrollo de la tabla o en el conjunto de datos.

Los coeficientes binomiales estn dados por:



( )=1
0

( )=
1
1
( ) = ( 1)
2 2!
1
( ) = ( 1)( 2)
3 3!
.
.
.
1
( ) = ( 1)( 2) ( + 1)
!

Donde s es una coordenada local definida por = 0 y h es el intervalo uniforme de la retcula.

La frmula de interpolacin de Newton hacia adelante que pasa por + 1puntos, 0 , 1 , 2 , , se escribe como


() = (0 + ) = ( ) 0

=0
Por ejemplo, cuando = 2 la ecuacin es
( 1)
(0 + ) = 0 + ( 1 0 ) + (2 21 + 0 )
2
O equivalente
2 + 41 30 ()2 (2 21 + 0 )
(0 + ) = 0 + () +
2 2 2

La ecuacin es un polinomio de orden k ya que ( )es un polinomio de orden n, y su mximo orden es k. La ecuacin
es igual a 0 , 1 , 2 , , en 0 , 1 , 2 , , , respectivamente, lo cual se muestra a continuacin:
= 0; (0 ) = (0 + 0) = 0
= 1; (1 ) = (0 + ) = 0 + 0 = 1
= 2; (2 ) = (0 + 2) = 0 + 20 + 2 0 = 2
.
.
.
( 1) 2
= ; ( ) = (0 + ) = 0 + 0 + 0 + =
2
Los primeros m+1 trminos de la ecuacin forman un polinomio de interpolacin de orden m ajustado a los m+1
puntos en 0 , 1 , 2 , , . De la misma forma, los primeros m+2 trminos forman un polinomio de interpolacin
de orden m+1 ajustado a m+2. As, el orden de un polinomio de interpolacin se puede cambiar fcilmente
modificando el nmero de diferencias que se toman del primer rengln de la tabla.

Debido a la equivalencia entre las frmulas de interpolacin de Newton y las de LaGrange el error del polinomio
debe ser idntico. As se puede escribir como
() = () () = () (+1) () 0 < <
Donde () es a funcin exacta y () es la interpolacin; sin embargo, la evaluacin de la ecuacin para la
interpolacin es mucho ms fcil que la interpolacin de LaGrange.
Consideremos la ecuacin con = . Si k se incrementa de N a N+1, el trmino adicional es
( 1)( 2) ( ) +1 ( 0 )( 1 ) ( ) +1 0
( ) +1 0 = 0 = +1
+1 ( + 1)! ( + 1)!
0
Donde se utilizan = 0 + . Se puede mostrar que el segundo trmino de la ecuacin es una
aproximacin de ( + 1). Por lo que finalmente el error puede calcularse con:
+1 0
() +1 ( 0 )( 1 ) ( )

Ejemplo:

Dada la funcin:() = ()
a) Tabularla en el intervalo 0 < x < 11 considerando un incremento constante de 1 en la variable
independiente.
b) Calcule la primera derivada del polinomio en los puntos:
(1) x = 0
(2) x = 4.3
(3) x = 10.5

RESOLUCIN

Tabulamos los puntos, as como las diferencias entre estas; pero sabemos que obtendremos un
alto nmero de iteraciones por lo que nos conviene utilizar un software para hacer dicha
tabulacin, en este caso utilizaremos Excel:

x f(x)
0 1.33333333 -3.5469298 39.7726363 -147.307024 740.391161 -5531.77927 51390.0452 -518704.598 2879505.03 -1034364.45 59266789.6 -410776479 -410776479
1 -2.21359647 -43.3195661 187.079661 -887.698186 6272.17043 -56921.8245 570094.643 -3398209.63 3913869.48 -60301154 470043268
2 -45.5331625 -230.399227 1074.77785 -7159.86861 63193.9949 -627016.467 3968304.28 -7312079.11 64215023.5 -530344422
3 -275.932389 -1305.17707 8234.64646 -70353.8635 690210.462 -4595320.74 11280383.4 -71527102.6 594559446
4 -1581.10946 -9539.82353 78588.51 -760564.326 5285531.21 -15875704.1 82807486 -666086548
5 -11120.933 -88128.3335 839152.836 -6046095.53 21161235.3 -98683190.1 748894034
6 -99249.2665 -927281.169 6885248.37 -27207330.9 119844425 -847577224
7 -1026530.44 -7812529.54 34092579.2 -147051756 967421650
8 -8839059.97 -41905108.8 181144336 -1114473406
9 -50744168.7 -223049444 1295617742
10 -273793613 -1518667186
11 -1792460799

A continuacin, haremos una sustitucin de los valores en la ecuacin para obtener el polinomio
y obtener la derivada, pero esta utilizaremos nicamente 6 valores de la tabla:



() = ( + ) = ( )

=
. .
() = . + ( ) + ( )( )
!
.
+ ( )( )( )
!
.
+ ( )( )( )( )
!
.
+ ( )( )( )( )( )
!
.
+ ( )( )( )( )( )( )
!

Desarrollando tenemos:
() = 71.3750628 6 1116.7241 5 + 6558.71158 4 17882.4737 3
+ 22365.9361 2 9928.99677 + 1.333333
Para calcular el error:
N+1 f0
en (x) (x x0 )(x x1 ) (x xN )
hN+1
Por lo que en este caso N=6
7 f0
(x) 7 (x 0)(x 1)(x 2)(x 3)(x 4)(x 5)(x 6)(x 7)
h
2879505.03 7
en (x) (x 21x 6 + 175x 5 735x 4 + 1624x3 1764x 2 + 720x)
1
Decidimos que el valor a evaluar para obtener el error es 1, por lo que:
2879505.03 7
(x) (1 21(1)6 + 175(1)5 735(1)4 + 1624(1)3 1764(1)2
1
+ 720(1)) = 0

Obtenemos la primera derivada del polinomio:



71.3750628 6 1116.7241 5 + 6558.71158 4 17882.4737 3 + 22365.9361 2

9928.99677 + 1.333333
= (6)(71.3750628) 5 + (5)(1116.7241) 4 + (4)(6558.71158) 3
+ (3)(17882.4737) 2 + (2)(9928.99677)
() = 428.250377 5 5583.62051 4 + 26234.8463 3 53647.4214 2
+ 44731.8722 9928.99677
Sustituimos los valores:

(0) = 428.250377(0)5 5583.62051(0)4 + 26234.8463(0)3 53647.4214(0)2 +


44731.8722(0) 9928.99677=-9928.99677
(4.3) = 428.250377(4.3)5 5583.62051(4.3)4 + 26234.8463(4.3)3
53647.4214(4.3)2 + 44731.8722(4.3) 9928.99677=5566.65405

(10.5) = 428.250377(10.5)5 5583.62051(10.5)4 + 26234.8463(10.5)3


53647.4214(10.5)2 + 44731.8722(10.5) 9928.99677=11711791.15
Finalmente observamos la grfica de la funcin y la grfica del polinomio:

() =
()

() = 71.3750628 6 1116.7241 5 + 6558.71158 4 17882.4737 3


+ 22365.9361 2 9928.99677 + 1.333333

Ejercicios Propuestos:
1) Dada la funcin tabular:
x 0 0.2 0.4 0.6 0.8 1 1.2

f(x) -2 -1.3950 -.03886 3.3468 25.8479 63.8365 261.2527


Determine el valor de la funcin para:
a) x=0.5, considerando un polinomio de tercer grado
b) x=1.5 considerando un polinomio de quinto grado
c) x=2, utilizando todos los puntos de la tabla
2) En un laboratorio se hicieron mediciones de las coordenadas (x, y) de la posicin de un proyectil que describi
una trayectoria parablica.
x 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85
[m]
y[m] 0 8.1 15.1 21.1 25.9 29.7 32.3 33.9 34.4 33.7 32.1 29.9 25.4 20.5 14.4 7.3 - -
0.96 10.3

Obtener:
a) La ordenada y del proyectil cuando x = 42.3 m
b) El mximo alcance horizontal x (ocurre cuando y = 0, nuevamente)
Utilice interpolacin de segundo orden

3) Dada la funcin tabular:


x 0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

f(x) 36.75 42.1875 41.25 34.125 22.5 9.5625 0 0 17.25 60.9375 141.75

Determine el valor de la funcin para:


b) x = 1.27
c) x = 2.31
d) x = 4.3
e) x = - 0.21
Utilice interpolacin de Newton
Diagrama de Flujo: 1

Si No
m=>1
INICIO

Pides el nmero ( ) = (: 1)
de valores de x
como n

No Si
n
== 1

Pides valores
de x del arreglo
nx1 llamado X
1
(: ) = (: )( ) ( 1 )
()!

= [1 2 3 ]

(1: 1) = ( )

Pides valores de
f(x) del arreglo
nx1 llamado Y
() = (: ) + (1: 1)

Y= [f(x)i f(x)i+1 f(x)i+2


f(x)n ]
()

Calcular

=
1 FIN

M= (n-1)x(n-1),
donde (n-1)=m
( ), ( ),, ( )

1
Algoritmo:
1.- Pides el nmero de valores de x como n
2.- Pides los valores de x
4.- Guardamos valores de x en un arreglo de dimensin nx1 llamado X donde:
= [1 2 3 ]
5.- Pides los valores de f(x)
6.- Guardamos valores de f(x) en un arreglo de dimensin nx1 llamado Y donde:
Y= [f(x)i f(x)i+1 f(x)i+2 f(x)n ]
7.- Calcular h

=
1
8.- Creamos un arreglo de dimensin (n-1)x(n-1), donde (n-1)=m, hasta que m=1, los llamo
( ), ( ),, ( )
9.-Operamos para llenar ( ) = (: 1):
(+ ) ( ) = (: )
Hasta 1 ( ) = 1 (: 1)
10.-Definimos polinomio de Interpolacin p(x)
() = (: ) + (1: 1)
11.-Se crea otro arreglo de nx1 lo comenzamos a llenar
1
(: ) = (: )( ) ( 1 )
()!
(1: 1) = ( )

Cdigo Comentado:
%Datos
X=[2; 3; 4; 5];Y=[5; 6; 3; 2];
%Inicio metodo
n=length(X);%numero de puntos
h=(X(n)-X(1))/(n-1);%calculo del tamao de paso

%Inicio Tabla de diferencias finitas


DY=zeros(n-1,n-1);
for j=1:n-1
for i=1:n-1
if j==1
DY(i,j)=Y(i+1)-Y(i);
else
if i>=n-(j-1)
DY(i,j)=0;
else
DY(i,j)=DY(i+1,j-1)-DY(i,j-1);
end
end
end
end

%Inicio para la obtencion del polinomio de interpolacion


L=zeros(n-1,n); a=n;
for i=1:n-1
aux=1;
a=a-1;
for j=1:i
aux=conv(aux,poly(X(j)));
end
L(i,a:n)=aux;
end

DY_0=zeros(1,n-1);
for i=1:n-1
fact=1/(factorial(i)*h);
DY_0(1,i)=fact*DY(1,i);
end

P=DY_0*L;
P(n)=P(n)+Y(1);
syms x
pretty(poly2sym(P,x))
Mtodo de Polinomio de Diferencias Divididas:
Descripcin del Mtodo:
A menudo aparece la necesidad de escribir un polinomio de interpolacin para puntos con separacin no uniforme. El
modelo de interpolacin de Newton puede extenderse a los puntos con separacin no uniforme utilizando las diferencias
divididas. As, el polinomio de interpolacin de LaGrange en una retcula con espaciamiento no uniforme se puede expresar
de manera equivalente en la forma de un polinomio de interpolacin de Newton.

Denotemos al polinomio de interpolacin de LaGrange ajustando a 0 , 1 , 2 , , +1 como:


( 0 )0,1,2,,+1 () + (+1 )0,1,2,, ()
0,1,2,,+1 () =
+1 0
Si la ecuacin se desarrolla en una serie de potencias, el coeficiente del trmino de mayor orden se llama coeficiente
principal. El coeficiente principal de ,,,, utilizando los mismos subndices. Al aplicar esta regla, el coeficiente dominante
es 0,1,2,, . De manera similar, los coeficientes dominantes de 0,1,2,,+1 () 0,1,2,,+1 . Mediante la inspeccin de la
ecuacin, su coeficiente dominante para el lado izquierdo se relaciona con los de los dos polinomios de interpolacin del
lado derecho mediante:
1,2,,+1 0,1,2,,
0,1,2,,+1 () =
+1 0
La ecuacin es una diferencia dividida de orden m+1, ya que est dada por la diferencia de los coeficientes dominantes de
orden m dividas entre la distancia de los puntos ms exteriores. Por medio de la ecuacin se pueden calcular en forma
recursiva los coeficientes dominantes a partir de una tabla de valores

Por medio de la diferencia se puede obtener- un polinomio de interpolacin como:

,,, () = + , ( ) + ,, ( )( ) + + ,,, ( )( )( ) ( 1 )
El error de la interpolacin se evala de la misma forma que la interpolacin de Newton en una malla igualmente espaciada.
En realidad, el error de la ecuacin es aproximadamente igual al trmino que se aadira a la ecuacin si la interpolacin se
extendiera para ajustarse a otro punto ms, j+1; es decir, su error es:

() ,,,,+1 ( )( )(( ) ( )

La tabla de diferencias dividas entonces es:

0 0 1 0 1,2 0,1 1,2,+1 0,1


0,1 = 0,1,2 = 0,1,2,+1 =
1 0 2 0 +1 0

1 1 2 1 2,3 1,2
1,2 = 1,2,3 =
2 1 3 2
2 2 3 2 3,4 2,3
2,3 = 2,3,4 =
3 2 4 3
+1
,+1 =
+1

Ejemplo:
a) Elabore una tabla de diferencias divididas para los siguientes datos:
i
0 0.1 0.99750
1 0.2 0. 99002
2 0.4 0. 96040
3 0.7 0.88120
4 1.0 0.76520
5 1.2 0.67113
6 1.3 0.62009

b) Escriba la frmula de interpolacin utilizando la tabla de diferencias divididas ajustada a los puntos: b.1) i=o
hasta 6 y b.2) i=2 hasta 4
c) Obtenga una estimacin del error de las interpolaciones
d) Evale los polinomios de interpolacin en x=0.3 y x=0.55
e) Estime los errores de la interpolacin para los dos valores del inciso d) y comprelos con los valores exactos
de los errores. (Los valores exactos son (. ) =. (. ) = . )
RESOLUCIN
Se ilustra la tabla obtenida aplicando diferencias divididas, y adems como es que se obtuvieron
los primeros valores de cada columna:

0.96040 0.99002
= 0.07480
0.2 0.1

0.14810 (0.07480)
= 0.24433
0.4 0.1

0 .23180 (0.24433)
= 0.02088
0.7 0.1

0.03418 0.02088
= 0.01478
1 0.1

0.00090 (0.00236)
= 0.00122
1.2 0.1

i xi fi fi,i+1 fi,i+2 fi,i+3 fi,i+4 fi,i+5 fi,i+6


0 0.1 0.9975 -0.0748 -0.24433333 0.02088889 0.01478395 -0.00239198 0.00128601
1 0.2 0.99002 -0.1481 -0.2318 0.03419444 0.01215278 -0.00084877
2 0.4 0.9604 -0.264 -0.20444444 0.04634722 0.01121914
3 0.7 0.8812 -0.38666667 -0.16736667 0.05644444
4 1 0.7652 -0.47035 -0.1335
5 1.2 0.67113 -0.5104
66 1.3 0.62009

Como se puede observar el valor de h es variable.

El polinomio ajustado de i=0 hasta 5 es entonces


0,15 () = 0.99750 0.07480( 0.1) 0.24433( 0.1)( 0.2)
+ 0.02088( 0.1)( 0.2)( 0.4)
+ 0.01478( 0.1)( 0.2)( 0.4)( 0.7)
0.00236( 0.1)( 0.2)( 0.4)( 0.7)( 1)

La estimacin del error de esta interpolacin es:


() = 0.00122( 0.1)( 0.2)( 0.4)( 0.7)( 1)( 1.2)
Los resultados calculados se resumen en la siguiente tabla:

, ERROR (ESTIMADO) ERROR (EXACTO)


X=0.3 0.97762 6.17 107 5.2 106
X=0.55 0.92580 1.26 107 5.2 106

Los errores mostrados antes requieren cierto examen. Los valores exactos de f(0.3) y f(0.55) se dan
slo hasta la quinta cifra decimal, por lo que estpan sujetos a errores de redondeo de alo ms
5.0 106. Por lo tanto, los valores exactos que se muestran abajo no tiene significado, excepto
para ilustrar el efecto del error de redondeo de una resta. Por otro lado, los valores estimados son
menores que estos valores. As concluimos que los resultados de interpolacin en este caso son
exactos dentro de los errores de redondeo.

El polinomio ajustado de i=2 hasta 4 es:


1,2,3,4 () = 0.96040 0.26400( 0.4) 0.20445( 0.4)( 0.7)
El error estimado de esta interpolacin es aproximadamente

() = 0.04636( 0.4)( 0.7)( 1)


Los valores calculados se resumen:
, ERROR (ESTIMADO) ERROR (EXACTO)
X=0.3 0.97762 -0.00130 -0.00099
X=0.55 0.92580 0.00047 0.00039

Los errores estimados coinciden con los errores exactos.

Ejercicios Propuestas:
1) Determine la tabla de diferencias divididas para la siguiente funcin

x 0 0.24 0.9 1.3 1.75 2.02 2.54

f(x) -2 -1.3950 -.03886 3.3468 25.8479 63.8365 261.2527

Determine el valor de la funcin para:


d) x=0.5, considerando un polinomio de tercer grado
e) x=1.5 considerando un polinomio de quinto grado
f) x=2, utilizando todos los puntos de la tabla
2)

a) Elabore una tabla de diferencias divididas para los siguientes datos:


i

0 0.3 0.84554

1 0.6 0. 52147

2 0.12 0. 51451

3 0.24 0.85481

4 0.48 0.14885
5 0.96 0.86162

6 1.92 0.68521

b) Escriba la frmula de interpolacin utilizando la tabla de diferencias divididas ajustada a los puntos: b.1) i=0
hasta 4 y b.2) i=2 hasta 4
c) Obtenga una estimacin del error de las interpolaciones
d) Evale los polinomios de interpolacin en x=2 y x=2.6

2) Dada la funcin:
a) Obtener los valores para x=0.3, 0.76, 0.94, 1.5
b) Obtener la tabla de diferencias divididas con dichos valores
c) Obtener el polinomio con todos los valores
d) Calcular el error
Diagrama de Flujo:
Algoritmo:
1.- Pedir el nmero de puntos a introducir y guardarlos en n
2.- Crear una matriz de tamao n-1xn-1
3.- Pedir los valores de X y Y
4.- Calcular la primera columna de la matriz con:
DY(i,j)=(Y(i+j)-Y(i))/(X(i+j)-X(i)
5.- Calcular las dems columnas de la matriz con:
DY(i,j)=(DY(i+1,j-1)-DY(i,j-1))/(X(i+j)-X(i))
6.- Crear otra matriz de tamao n-1xn
7.- Guardar los polinomios resultantes en la matriz creada, de la forma:
[(x-x1); (x-x1)(x-x2); (x-x1)(x-x2)(x-x3); ... ]
8.- Crear un vector dadas las races
9.- Tomar los vectores correspondientes de la matriz creada
10.- Realizar las operaciones entre vectores
11.- Mostrar el vector resultante en forma de polinomio

Cdigo Comentado:
%Datos
X=[2; 4; 5; 7];Y=[5; 6; 3; 2];
%Inicio metodo
n=length(X);%numero de puntos
%InicioTabla de diferencias divididas

DY=zeros(n-1,n-1); %Reserva de memoria para la tabla(matriz de n-1xn-1)

for j=1:n-1 %Recorre las columnas de la matriz


for i=1:n-1 %Recorre los renglones de la matriz
if j==1
DY(i,j)=(Y(i+j)-Y(i))/(X(i+j)-X(i));%//Se calcula la primera columna
else
if i>=n-(j-1)
DY(i,j)=0; %Esto hace 0 las posiciones faltantes
else
DY(i,j)=(DY(i+1,j-1)-DY(i,j-1))/(X(i+j)-X(i)); %Calculo de las columnas siguientes
end
end
end
end
%Inicio de obtencion del polinomio de interpolacion

L=zeros(n-1,n); %Reserva de memoria para L (matriz de n-1xn)


a=n;
%Esta accion solo guarda en una matriz los polinomis resultantes, es decir
%[(x-x1); (x-x1)(x-x2); (x-x1)(x-x2)(x-x3); ... ]
for i=1:n-1
aux=1;
a=a-1;
for j=1:i
aux=conv(aux,poly(X(j)));%poly --> construye un vector(polinomio) dadas sus raices
%conv --> nos sirve para representar el producto entre dos polinomios dados
end
L(i,a:n)=aux;% a:n --> toma un renglon de "a" hasta "n" columnas
end
DY_0=DY(1,1:n-1); %Sera el vector o el renglon de la tabla que vamos a usar

P=DY_0*L;%producto matricial
P(n)=P(n)+Y(1);%Solo le sumamos y1 a P donde cada columna de P sera la x elevada a un grado
%Presentar el vector P como polinomio
syms x %Declaracion de un simbolo x (en este caso sera la variable x)
pretty(poly2sym(P,x))%poly2sym --> Convierte un vector a polinomio con su respectiva variable
%pretty --> muestra de manera legible al polinomio
TEMA IV: Derivadas
Mtodo de Deduccin de Esquemas de derivacin:
Descripcin del Mtodo:
Para una derivada de orden p, el mnimo nmero de datos necesario para obtener una proximacin por diferencias
es p+1. Por ejemplo, una aproximacin por diferencias para la primera derivada de una funcin necesita al menos
dos puntos.

Empecemos a deducir la aproximacin por diferencias para = ( ) utilizando = ( ) y +1 = (+1 ). Los


valores de en todos los puntos distintos de se desarrollan en una serie de Taylor. El desarrollo de Taylor de
+1 alrededor de es
2 3 4
+1 = + + + + +
2 6 24
Al despejar en la ecuacin se obtiene:

+1 1 1 2
=
2 6
Si truncamos despus del primer trmino, la ecuacin es la aproximacin por diferencias hacia adelante. Los
trminos truncados conforman el error de truncamiento. Este se puede representar por medio del coeficiente
principal debido a que los dems trminos se anulan ms rpido que ste cuando h decrece. La aproximacin por
diferencias hacas adelante se expresa, incluyendo el efecto del error por truncamiento como sigue:

+1
= + ()

1
Donde: () =
2
El trmino () indica que el error es aproximadamente proporcional al intervalo de la retcula. El error tambin
es proporcional a la segunda derivada .

La aproximacin utilizando +1 y 1 se puede obtener mediante los desarrollos de Taylor de +1 y 1 .


1
+1 1 = 2 + 3 +
3
Donde el termino se eliman en forma automtica. Al despejar de aqu tenemos:
+1 1 1 2
= +
2 6

La aproximacin por diferencias del segundo enfoque se expresa como:


+1 1
= + (2 )
2
Donde
1
(2 ) = 2
6
Ejemplo:
Calcule la primera derivada de tan(x) en x=1 mediante las dos aproximaciones por diferencias, utilizando h=0.1,
0.05 y 0.02. Evale despus el porcentaje de error de cada aproximacin.

RESOLUCIN
Sustituimos los valores en las ecuaciones. Comenzamos con el primer enfoque de Taylor:

+1
=

Para este tipo de ejercicios resulta importante realizar la tabla de diferencias y en este caso, por
tener h constante, utilizaremos la tabla de diferencias finitas, en esta caso utilizaremos un
software para construirla:
Por lo que:
tan(.9) tan(1)
= = 2.972495
0.1
Y el error va a ser igual a:
1
() =
2
El valor lo obtenemos de la tabla
2 =
Entonces:
1
() = (.1)(0.29724951) = 0.0148624755
2
Para el segundo enfoque:
+1 1 1.96475966 1.26015822
= = = 3.523045
2 2(.1)
Entonces:
1
() = (. 1)2 (0.06672985) = 1.112164 104
6

Si los resultados que obtenemos los acomodamos en una tabla se obtiene:


h=0.1 h=0.05 h=0.2

() () () () () ()
PRIMER ENFOQUE 2.9724 0.0148624755 3.1805 0.000364 3.3224 0.420244
SEGUNDO 3.5230 1.112164 3.7181 1.2439 3.5361 -0.18563
ENFOQUE 104 106

A continuacin obtendremos aproximaciones por diferencias para la segunda derivada. El principio bsico para obtener una
aproximacin por diferencias de segn orden es eliminar la primera derivada de los desarrollos de Taylor y, de ser posible,
tantos trminos de orden superior a 2 como sea posible.

Por ejemplo, obtenemos una aproximacin por diferencias de utilizando +1 , , 1 . Si sumamos los desarrollos de
Taylor obtenemos:
1
+1 + 1 = 2 + 2 + 2 + 4 +
12
Restando 2 de ambos lados y despejando :

+1 2 + 1
= + (2 )
2
1
Donde el error se representa como: (2 ) = 12 2
Ejercicio:
1) Se determin experimentalmente el trabajo mecnico que se realiza cuando un motor sube un vagn con
materiales ptreos; sus valores se resumen en la tabla siguiente para distintos valores del tiempo:
t(s) 0 1 2 3 4 5 6 7 8 9 10

T(N*m) 0 2 5 9 14 20 27 35 44 54 65
Determine la potencia instantnea del motor (suponiendo eficiencia del 100%), si Potencia=Dt/dt en W en:
1) t=1 [s]
2) t=4 [s]
3) t=8 [s]
4) t=10 [s]
2) Obtener la derivada de los puntos x=2,3,4 y calcular el error:
a) = 3 (4)

+1
3) Para la curva definida por = obtener la ecuacin de la recta tangente a la curva en el punto para el
1
cual x=4
1+()
4) Para la funcin = () calcular ( = 4 )
Diagrama de Flujo: 1

INICIO

SE CALCULA EL
ERROR
CORRESPONDIENTE
INGRESAR LOS
VALORES DE X
Y F(x)

SE MUESTRA EL ERROR
CORRESPONDIENTE
ASI COMO EL
RESULTADO DE LA
SE CALCULA EL DERIVADA
VALOR DE N

N= ( + 1)

FIN

(3)
PREGUNTA
LA
(2) DERIVADA
REQUERIDA

(3)
(1)

(+1) (+1)(1)
: = : =
2

"
( 1) 2 + ( + 1)
=
2

1
Algoritmo:
1. Ingresar los valores de x as como su respectivo valor de la funcin.
2. Se guardan los valores ingresados en una tabla. (x,f(x))
3. Determinar el valor de n, el cual se refiere a la diferencia entre los valores de x.
4. Preguntar si se requiere la primera o segunda derivada, o bien si se requieren ambas. (1, 2,3).
5. Conforme a lo requerido anteriormente realizar las operaciones correspondientes:
(+1)
6. Realizar la operacin para la primera derivada de primer orden: =
(+1)(1)
7. Realizar la operacin de la primera derivada de segundo orden : =
2
8. Realizar la operacin de la segunda derivada:
( 1) 2 + ( + 1)
=
2
9. Se realiza el error para la primera derivada, (xi-1<z<xi+1):

= (())
2
2
= 6 (())

10. Se realiza el error para la segunda derivada:


2
= 12 (()) = 02

11. Se muestran los valores obtenidos de las derivadas as como el error correspondiente.

Cdigo Comentado:
%Datos
X=input('Dame los puntos de x en forma de vector: ');
Y=input('Dame los puntos en y en forma de vector: ');
x=input('En que punto deseas saber la derivada?: ');
%X=[50; 80; 110; 140; 170]; Y=[3.5; 4.2; 5.7; 3.8; 1.2];
%x=80;
%Inicio metodo
n=length(X);%numero de puntos
h=(X(n)-X(1))/(n-1);%calculo del tamao de paso

%Calculo de la derivada de primer orden


Dy=zeros(1,n-2); %Reserva de memoria para las derivadas de primero y segundo orden(matriz de 1xn-2)
for i=1:n
if X(i)==x %Se comprueba que la x este dentro de los puntos dados
Dy(1)=(Y(i+1)-Y(i))/h;
end
end
%Calculo de la derivada de segundo orden
for i=1:n
if X(i)==x %Se comprueba que la x este dentro de los puntos dados
Dy(2)=(Y(i+1)-Y(i-1))/(2*h);
end
end
%Calculo de la segunda derivada
for i=1:n
if X(i)==x %Se comprueba que la x este dentro de los puntos dados
D2y=(Y(i+1)-2*Y(i)+Y(i-1))/(h*h);
end
end
%Calculo de tabla de diferencias finitas
DY=zeros(n-1,n-1);
for j=1:n-1
for i=1:n-1
if j==1
DY(i,j)=Y(i+1)-Y(i);
else
if i>=n-(j-1)
DY(i,j)=0;
else
DY(i,j)=DY(i+1,j-1)-DY(i,j-1);
end
end
end
end
%Calculo del error
DY0=zeros(1,n-1); %Reserva de memoria para las derivadas necesarias para el error(matriz de 1xn-1)
for i=n-1:-1:1
for j=1:n-1
if i+j==n %Asegura que agarrara la diagonal secundaria de la tabla
DY0(1,j)=DY(i,j);%Se guardan las variables
end
end
end
E=zeros(1,n-2); %Reserva de memoria para guardar los errores para las derivadas
%Se calcula el error
for i=1:n-2
E(i)=(-1*DY0(i+1))/(factorial(i+1)*h);
end
disp('La derivada de primer orden es: ');
Dy(1)+E(1)
disp('La derivada de segundo orden es: ');
Dy(2)+E(2)
disp('Su segunda derivada es: ');
D2y+E(length(E))
TEMA V: Integracin
Mtodo de Newton-Cotes (Trapecios):
Descripcin del Mtodo:

Para estimar = () por este mtodo funcionan prcticamente en dos pasos:
1.-Se divide el intervalo [, ] en n intervalos de igual amplitud cuyos valores extremos son sucesivos:

= + ( )

Donde i=0, 1, 2,, n
=
=
2.- Se aproxima cada intervalo () por un polinomio () de primer grado, y se integra cada subintervalo para
obtener el rea de cada trapecio, y su suma ser la aproximacin de I.

En el caso de n=1 en el intervalo [, ] queda tal cual = , = , se selecciona un polinomio de primer grado
1 () y la aproximacin a la integral es el rea del trapezoide bajo esta curva. Para llevar a cabo la integracin

1 1 () , es preciso representar 1 () por un () que est dada para valores equidistantes de x con distancia h,

se tendr entonces:
() 1 ()
Donde
1 () = 1 ( + ) = ( ) + ( )
Se reemplaza 1 () en la integral y se tiene:
1
() = [( ) + ( )]

Para integrar es necesario tener todo en trminos de la nueva variable s dada por la expresin:
= +
De esta diferencial de x queda en trminos de diferencial de s:
=
Ya que y son constantes
Para que los lmites de integracin y 1 estn en trminos de s se sustituyen por = + y se despeja
s, lo que da:
= + donde = 0
1 = + donde = 1
Y resulta:
1 1
[( ) + ( )] = [( ) + ( )]
0
Al integrar se tiene:
1
1 1
[( ) + ( )] = [( ) + 2 ( )] |10 = [( ) + ( )]
0 2 2
Como ( ) = ( + ) ( ) se llega finalmente a


() [( ) + (1 )]
2

Para un caso general se aplica la frmula:


1

() [( ) + 2 ( ) + ( )]
2
=1

Donde h:

=

Ejemplo:
Resuelve la siguiente integral por el mtodo anteriormente explicado.
9
4 2 2 + 1

1 2
RESOLUCIN:
1.-Se determina el intervalo entre trapecios con los que se resolver la integral:
91
= = 4 =2 m= el nmero de trapecios que se desea utilizar

2.-Aplicando la frmula del mtodo queda de la siguiente frmula:


9

() = [(0 ) + 2[(1 ) + (2 ) + (3 )] + (4 )]
1 2

3.- Sustituyendo los valores evaluados en la formula nos queda:


9
2
() = [4 + 2[2.3790 + 1.8039 + 1.3746] + 1.0123]
1 2
9
() 16.1273 2
1

Su calculamos de manera analtica esta integral obtendremos:

9
4 2 2 + 1
= 15.555
1 2
Ejercicios Propuestos:
5 2 2 1
1.- Aproxime = 0 3
.
8
2.-Aproxime = 2(3 6 2 ).
45
3.- Aproxime = 30 2 .
Diagrama de Flujo:

INICIO

INGRESAR LA
FUNCIN, EL
INTERVLO [a,b] y m

fx)

a,b

h=(b-a)/m

i=0

n=1

f(a) y f(b)

i=m-1
A=(h/2)(f(a)+
2fi+f(b)
no
si

f(a+n*m)
A
n=n+1

FIN
Algoritmo:
1. Ingresar la funcin
2. Guardar en f(x)
3. Ingresar el valor a,b ( el intervalo)
4. Ingresar el valor de m
5. Realizar h=a-b/m
6. Realizar i=0 ; n=1
7. Hacer f(a) y f(b)
8. Mientras i sea diferente de m -1
8.1 Hacer f(a+n*m)=fi
8.2 Hacer n=n+1
9. A=h/2(f(0)+2(fi)+f(b)
10. Mostrar A

Cdigo Comentado:
%Datos
a=input('Dame a: ');
b=input('Dame b: ');
n=input('Dame el numero de particiones: ');
h=(b-a)/n;%tamo de paso
x=a:h:b;%Se calculan los puntos en x en un intervalo de [a,b] con pasos de h
Y=input('Dame la funcion con variable "x" : ');
%Metodo de los trapecios compuesto
sigma=0; %se declara una sigma
for i=2:length(Y)-1
sigma=Y(i)+sigma;%se calcula sigma
end
%Se calcula la integral segun el metodo
I=(h/2)*(Y(1)+2*sigma+Y(length(Y)))
%Calculo de tabla de diferencias finitas
DY=zeros(n-1,n-1);
for j=1:n-1
for i=1:n-1
if j==1
DY(i,j)=Y(i+1)-Y(i);
else
if i>=n-(j-1)
DY(i,j)=0;
else
DY(i,j)=DY(i+1,j-1)-DY(i,j-1);
end
end
end
end
%Calculo del error
DY0=zeros(1,n-1);
for i=n-1:-1:1
for j=1:n-1
if i+j==n
DY0(1,j)=DY(i,j);
end
end
end
disp('Error');
%calculo del error
E = abs((((b-a)^3)/12)*(DY0(2))) %calculo del error
disp('Valor verdadero');
IE=I-E
Mtodo de Reglas de Simpson:
Descripcin del Mtodo:
Usando las definiciones del mtodo anterior y si n=2, en el intervalo [, ] se dividen en dos subintervalos, se tendrn
tres abscisas:
0 =
1
1 = 0 + 1 ( ) = + = ( )
2 2 2 2
Se aproxima f(x) con una parbola y la aproximacin a la integral ser el rea bajo el segmento de la parbola
comprendida entre ( ) y (2 ) :
2
() 2 ()

Para integrara del lado derecho se usa la frmula de Newton de diferencias finitas hacia adelante para expresar:
( 1) 2
2 () = 2 (0 + ) = ( ) + ( ) + ( )
2!
Al sustituir 2 () y expresar toda la integral en trminos de la nueva variable s, queda:
2 2
() 2 () = 2 (0 + )
0
2 2
( 1) 2
2 (0 + ) = [( ) + ( ) + ( )]
0 0 2!
1 1 1
= [( ) + 2 ( ) + 3 2 ( ) 2 2 ( )] |20
2 3! 4
1 1 1
= [( ) + 2 ( ) + 3 2 ( ) 2 2 ( )] |20
2 3! 4
De la definicin de la primera y la segunda diferencia hacia delante, se tiene:
( ) = ( + ) ( ) = (1 ) ( )
Y
2 ( ) = ( + 2) 2( + ) + ( ) = (2 ) 2(1 ) + ( )
Que sustituidas en la ltima ecuacin dan lugar al algoritmo de Simpson:


() = [( ) + 4(1 ) + (2 )]
3
Para un caso general se pueden aplicar las frmulas:
Regla de Simpson 1/3
1

() [( ) + 4 ( ) + ( )]
3
=1

Regla de Simpson 3/8:


1
3
() [( ) + 3 ( ) + ( )]
8
=1


( )[( ) + 3 1
=1 ( ) + ( )]
()
8

Donde en ambos casos h:



=

Ejemplo:

Calcular la integral de () con el mtodo de Simpson de 0 a . Donde f(x) se define como:
() = ()

RESOLUCIN:
1.-Planteamos la Integral:

2
= ()
0
Para el mtodo de Simpson 1/3 se tiene:

= () = [0 (0 )+1 (1 ) + 2 (2 ) + + ( )]

2.- Simplificando:

= [(0 ) + 4((1 ) + (2 ) + + (1 )) + ( )]
3

3.- Dividimos el intervalo de 0 a 2 en tres puntos donde:

20
= = =
2 2 4

0 = 0, 1 = , 2 =
4 2
Dichos puntos se tendrn que evaluarse en () por lo tanto:
( )
0 0 0
1 0.785398 0.322396
2 1.570796 0.207879
4.-Aplicando el mtodo se tiene:

2
=
() 4 [0 + 4(0.322396) + 0.207879] = 0.39203603
0 3

5.-Comparamos con el valor verdadero con el valor obtenido:



2
= () = 0.39606
0
= |0.39606 0.39203603| = 0.00402396

Ejercicio:
1
1.- Calcular la integral de () con el mtodo de Simpson de 0 a . Donde f(x) se define como:
3 2
() = ()
2
1 1
2.-Aproxime la funcin 1 2 .
2

(2)
3.-Aproxime el rea de la funcin () = 2 en el intervalo (-5,10).
45
Diagrama de Flujo (Simpson1/3):

INICIO

INGRESAR LA
FUNCIN, EL
INTERVLO [a,b]

fx)

a,b

h=(b-a)/2

f(a+h)

f(a) y f(b)

I=b-
a/6)(f(a)+4(f(a+h)+f
(b)

FIN
Algoritmo (Simpson 1/3):
1. Ingresar la funcin
2. Guardar en f(x)
3. Ingresar el valor a,b ( el intervalo)
4. Realizar h=a-b/2
5. Obtener f(a), f(b), f(a+h)
6. Hacer I=b-a/6)(f(a)+4(f(a+h)+f(b)
7. Mostrar I

Cdigo Comentado (Simpson1/3):


%Datos
a=input('Dame a: ');
b=input('Dame b: ');
n=input('Dame el numero de particiones: ');
h=(b-a)/n; %tamo de paso
x=a:h:b; %Se calculan los puntos en x en un intervalo de [a,b] con pasos de h
Y=input('Dame la funcion con variable "x" : ');
%Metodo simpson 1/3 compuesto
%Se declaran dos sigmas
sigma=0;
sigma1=0;
for i=2:length(Y)-1
if rem(i,2)==0 %--> rem: Comando que te regresa un booleano si i es par
sigma=Y(int64(i))+sigma;%Se calcula sigma
else
sigma1=Y(i)+sigma1;%Se calcula sigma1
end
end
%Se calcula la integral segun el metodo
I=(h/3)*(Y(1)+4*sigma+2*sigma1+Y(n+1))
Diagrama de Flujo (Simpson 3/8):

INICIO

INGRESAR LA
FUNCIN, EL
INTERVLO [a,b]

fx)

a,b

h=(b-a)/2

f(a+h)

f(a+2h)

f(a) y f(b)

1. I=(b-
a/8)(f(a)+3(f(a+h)
3(f(a+2h)+f(b)

FIN
Algoritmo (Simpson 3/8):
1. Ingresar la funcin
2. Guardar en f(x)
3. Ingresar el valor a,b ( el intervalo)
4. Realizar h=a-b/3
5. Obtener f(a), f(b), f(a+h), f(a+2h)
6. Hacer I=(b-a/8)(f(a)+3(f(a+h) 3(f(a+2h)+f(b)
7. Mostrar I

Cdigo Comentado (Simpson 3/8):


%Datos
a=input('Dame a: ');
b=input('Dame b: ');
n=input('Dame el numero de particiones: ');
h=(b-a)/n; %tamo de paso
x=a:h:b; %Se calculan los puntos en x en un intervalo de [a,b] con pasos de h
Y=input('Dame la funcion con variable "x" : ');
l=int8(n/3); %Se hace u casteo de double a int
%Metodo de simpson 3/8 compuesto
if double(l)-n/3~=0%Se asegura que n tiene que ser un multiplo de 3 para realizar el metodo
disp('particion no valida n tiene que ser multiplo de 3');
else
%Se declaran tres sigmas segun el metodo
sigma1=0;
sigma2=0;
sigma3=0;
%Se calcula sigma 1
for i=2:3:length(Y)-2
if i<length(Y)
sigma1=Y(i)+sigma1;
end
end
%Se calcula sigma 2
for i=3:3:length(Y)-1
if i<length(Y)
sigma2=Y(i)+sigma2;
end
end
%Se calcula sigma 3
for i=4:3:length(Y)-3
if i<length(Y)
sigma3=Y(i)+sigma3;
end
end
%Se calcula la integral segun el metodo
I=(3*h/8)*(Y(1)+3*sigma1+3*sigma2+2*sigma3+Y(length(Y)))
end
Mtodo de Cuadratura de Gauss:
Descripcin del Mtodo:
Ejemplo:
Ejercicio:
Diagrama de Flujo:
Algoritmo:
Cdigo Comentado:

You might also like