Está en la página 1de 28

Mtodos Numricos

Facultad de Qumica
Prof. Ernesto Caldern Castillo
metodosnumericosfq@yahoo.com.mx
Con programacin aplicada
INDICE
Soluciones de ecuaciones no lineales
Matrices y sistemas de ecuaciones lineales
Sistemas de ecuaciones no lineales
Aproximacin funcional e interpolacin
Integracin y diferenciacin numrica
Ecuaciones diferenciales ordinarias
Ecuaciones diferenciales parciales
Introduccin a la programacin
Paquetera (VB-excel)
Lenguajes de programacin
Delphi/Tpascal
Fortran
C
Errores
Error = paprox - p
EAbs = | paprox p |
|paprox p|
ERelativo = si p0
p
ERP= ER x 100%
|paprox p|
< 5 x 10
-t

p
Definicin :
Soluciones de ecuaciones no lineales
Se usan para encontrar las races reales y complejas de la ecuacin f(x)=0

Tenemos los mtodos abiertos y los mtodos acotados

Mtodos acotados: una funcin cambia de signo en la aproximidad de su raz
mtodo de la biseccin (o intervalo medio).
mtodo de la falsa posicin (regula falsi).

Mtodos abiertos: emplean una aproximacin funcional para obtener un
nuevo valor estimado de la raz.
Punto-fijo (sustitucin sucesiva o directa)
Newton-Raphson (lnea recta empleando informacin del gradiente)
Secante (lnea recta empleando dos puntos)
Muller (races complejas, aprox. cuadrtica empleando tres puntos)
no existe un mtodo universal de resolucin de sistemas de ecuaciones no
lineales, ms bien cada sistema no lineal requerir su mtodo de resolucin
idneo.
SOLUCIONES DE ECUACIONES NO LINEALES
( ) 0 = x f
Las soluciones de una ecuacin no lineal se llaman races o ceros
Ejemplos:
tanh(2x) tan(x) d)
1 x 0 , 0 69 . 3
) 5 . 0 1 . 1 ) 1 (
) 5 . 0 1 . 2 (
c)
b x a , 0 ) ( )
0 3 3 16 4 1 )
2 / 1
2 / 1
4 3 2
=
< < =


< <
= + + +
x x
x x
x x f b
x x x x a
Por lo gral carecen de una solucin exacta
Mtodo de punto fijo
( ) 0 = x f arreglando para que x quede lado izquierdo
( ) x g x =
0 3 2
2
= + x x reordenando
2
3
2
+
=
x
x 0 ) ( = x sen ( ) x x sen x + =
El nuevo valor calculado
( )
i i
x g x =
+1
el error aproximado
% 100
1
1
+
+

=
i
i i
a
x
x x
c
( ) 0 5 2
2
= = x x x f
Ejemplo para la ecuacin
sus races son:
1.850781059 y -1.350781059
posibilidades de x=g(x)
1 4
5 2
5 2
1 2
5
2
5
5 2
2
2
2


=
=

=
+
=
=
x
x x
x x
x x
x
x
x
x
x x
despejando el 2do trmino

despejando x del 1er trmino

Factorizando x y despejndola

Sumando x a cada lado.
se evala g(x) en x
0
dando como resultado x
1
;
( )
1 0
x x g =
Cuando x
1
=x
0
( ) , 0 = x f ( ) x x g =
Cuando x
1
x
0

, 0 =
|
.
|

\
|
-
x f
g(x)x
.
.
Valor inicial:
1 iteracin:
2 iteriacin:
3 iteracin:

i-sima iteracin:
i+1-sima iteracin:
( )
( )
( )
( )
( )
1 1
2 3
1 2
0 1
0
+ +
=
=
=
=
=
i i
i i
x g x
x g x
x g x
x g x
x g x
x

( )
( )
( )
( )
( )
( )
1
3
2
1
0
+ i
i
x f
x f
x f
x f
x f
x f

una segunda evaluacin g(x) en x


1
, g(x
1
)=x
2


Este proceso se repite y se obtiene este equema iterativo
Si la sucesin f(x
0
),f(x
1
), f(x
2
), tiende a 0, el proceso converge a x, se continuar hasta
que f(x
i
)<e
1
, donde e
1
es un valor pequeo o una cercana de x
i
con x, se toma como raz
a x
i
.
En caso que el proceso diverge se tendr de usar otra g(x).
_
_
Criterio de convergencia
( ) x x g =
si la sucesin x
0
,x
1
,x
2
, converge a x los valores de x
i
y x
i+1
se acercan entre
s al avanzar la iteracin.
_
i i i
x x d =
+1
Si d
1
,d
2
,d
3
, 0 el proceso iterativo converge a una raz hasta que
d
i
<c, y tomar a x
i+1
como raz buscada.
Si no converge en un nmero grande de iteraciones, entonces x
0
,x
1
,x
2
, diverge de x, se
detiene y se modifica la funcin g(x), el valor inicial o ambos.
Para encontrar una raz real de la ecuacin g(x) = x, proporcionar la funcin G(X) y los
DATOS: Valor inicial X0, criterio de convergencia TOL, y nmero mximo de iteraciones MAXIT.
RESULTADOS: La raz aproximada X o un mensaje de falla.
PASO 1.- Hacer I = 1
PASO 2.- Mientras I < MAXIT repetir los pasos 3 a 6.
PASO 3.- Hacer X = G(X0) 'calcula xi
PASO 4.- Si ABS(X - X0) < tol entonces IMPRIMIR X y TERMINAR. De otro
modo CONTINUAR.
PASO 5.- Hacer I = I + 1
PASO 6.- Hacer X0 = X 'actualiza X0
PASO 7.- IMPRIMIR mensaje de falla "EL MTODO NO CONVERGE A UNA RAZ" y TERMINAR
Agoritmo de punto fijo: a) pseudocdigo
f uncin g(x)
retornar
g=.....
Agoritmo:
b) diagrama de flujo del mtodo de punto fijo
puntof(xi,tol,maxit)
i=1
band=f o
i<=maxit
x=g(x)
|x-xi|<=tol
band=v
band=f
No
si
ciclo
while_do
Si
i=i+1
xi=x
raiz= x
band=v
mtodo no
converge
retornar
Si
No
Agoritmo:
b) diagrama de flujo del mtodo de punto fijo
puntof(xi,tol,maxit)
i=0
band=f o
i<=maxit
x=g(x)
|x-xi|<=tol
band=v
band=f
No
si
ciclo
while_do
Si
i=i+1
xi=x
band=v
mtodo no
converge
retornar
Si
No
puntof=x
Function pf(xi,tol,maxit)
i=0
band=0
do while(i<maxit)
x=g(x)
if (abs(x-x0)<=tol) then
band=1
exit
else
i=i+1
x0=x
endif
loop
if (band=1) then
pf=x
else
pf=0 no converge
MsgBox Prompt := el mtodo no converge",_
Buttons:=vbOk,Title := "Error
end if
end function
funcin g(x)
retornar
g=(x
2
+3)/2
Agoritmo:
b) diagrama de flujo del mtodo de punto fijo, continuacin.
Ejemplo:
Function g(x)
g=(x^2+3)/2
end function
2
3
2
+
=
x
x
.... ) ( = x g
Ejemplo general:
Esto es g(x)
f uncin g(x)
retornar
g=.....
Function g(x)
g
end function
Realizar su grfica del mtodo
real(8) function pf(x0,tol,maxit)
!dec$ attributes dllexport :: pf
real(8) :: x,x0,tol
integer :: maxit,band
i=0
band=0
ciclowhile: do while(i<maxit)
x=g(x)
if (abs(x-x0).le.tol) then
pf=g(x0)
band=1
exit
else
i=i+1
x0=x
endif
enddo ciclowhile
if (band.eq.0) pf=0 !no converge

contains
real(8) function g(x1)
real(8) :: x1
g=2*x1**2-5
end function g
end function pf
C
o
d
i
f
i
c
a
c
i

n

e
n

f
o
r
t
r
a
n
9
0
,

c
o
m
o

a
r
c
h
.
d
l
l

Declare Function pf Lib "metodosn.dll" (x0 As Double, tol As Double, maxit As Integer) As Double

Codificacin en VB con excel y usando arch.dll de f90
Function pfvb(x02 As Double, tol2 As Double, maxit2 As Integer) As Double
Dim x2 As Double
Dim i2, band2 As Integer
i2 = 0
band2 = 0
While i2 < maxit2
x2 = g(x2)
If (Abs(x2 - x02) <= tol2) Then
pfvb = g(x02)
band2 = 1
End
Else
i2 = i2 + 1
x02 = x2
End If
Wend

Segunda opcin programar las funciones en VB con excel, se puede usar funcin o
procedimiento/subrutina
If band = 0 Then msbox = "el
mtodo no converge..."
'pfvb = 0 'no converge
End Function

Function g(x1) As Double
g = 2 * x1 ^ 2 - 5
End Function
Function pfvb(x0 As Double, tol As Double, maxit As Integer) As Double
Call pf(x0, tol, maxit)
If pf(x0, tol, maxit) = 0 Then msbox = "el mtodo no converge..."
End Function
Mtodo de Newton-Raphson
Recordando la expansin de la serie de Taylor, que la podemos expresar como:
2
1 1 1
) (
! 2
) (
) )( ( ) ( ) (
i i i i i i i
x x
f
x x x f x f x f
' '
+ ' + =
+ + +

Truncando la serie de Taylor despus del 1er trmino derivado, tenemos:


x
i
X
i+1
) )( ( ) ( ) (
1 1 i i i i i
x x x f x f x f ' + ~
+ +
debe ser igual a cero
) )( ( ) ( 0
1 i i i i
x x x f x f ' + =
+
o
se puede resolver para:
) (
) (
1
i
i
i i
x f
x f
x x
'
=
+
Esta es la ecuacin de Newton Raphson
Ejemplo:
) (
i
x f
0 ) (
i
x f
) (
i
x f '
Pendiente=
X
i+1
x
i
0

) (x f
x

Usando el mtodo de Newton Raphson calcule la raz
de f(x)=-e
-x
-x, con un valor inicial de x
0
=0
Su primera derivada de la funcin: f(x)=-e
-x
-1
1
1


=

+
i
i
x
i
x
i i
e
x e
x x
Estimando el error:
,
1 r i
x x =
+
es el valor verdadero de la raz
0 ) ( =
r
x f
entonces tenemos:
2
) (
! 2
) (
) )( ( ) ( 0
i r i r i i
x x
f
x x x f x f
' '
+ ' + =

restando
) )( ( ) ( 0
1 i i i i
x x x f x f ' + =
+
2
) (
! 2
) (
) )( ( 0
i r i r i
x x
f
x x x f
' '
+ ' =

i x
i

t
(%)
0 0 100
1 0.500000000 11.8
2 0.566311003 0.147
3 0567143165 0.0000220
4 0.567143290 < 10
-18
El error porcentual
disminuye con cada iteracin
Suponiendo que hay convergencia x
i
y se bebe aproximar a la raz x
r
:
Estimando el error (continuacin)
1 1 , + +
=
i r i t
x x E tenemos:
2
1 ,
1 ,
! 2
) (
) ( 0
+
' '
+ ' =
+
i t
E
f
E x f
i t i

2
1 ,
1 ,
) ( 2
) (
+
'
' '
=
+
i t
E
x f
f
E
r
i t

Ejemplo: tenemos la funcin f(x)=-e


-x
-x
su primera derivada es: f(x)=-e
-x
-1 se puede evaluar en X
r
=0.56714329
f(0.56714329)=-1.56714329

La segunda derivada: f(x)=e
-x
, f(0.56714329)=0.56714329
2
,
2
1 ,
18095 . 0
) 56714329 . 1 ( 2
56714329 . 0
1 ,
i t i t
E E E
i t
=

~
+
+
Del ejemplo anterior el error inicial fue E
t,0
=0.56714329, el cual se puede sustituirse en
la ecuacin de error que predice E
t,1
0.18095(0.56714329)
2
=0.0582
Lo cual es cercano al error verdadero de 0.06714329
Para la siguiente iteracin E
t,2
0.18095(0.06714329)
2
=0.0008158
Lo cual es cercano al error verdadero de 0.0008323
Para la tercera iteracin E
t,3
0.18095(0.0008323)
2
=0.000000125
En E
t,4
0.18095(0.000000125)
2
=2.83x10
-15
La estimacin del error mejora, ya que est ms cercano a la raz, x y se aproxima
mejor mediante x
r
.
Para encontrar una raz real de la ecuacin f(x) = 0, proporcionar la funcin F(X) y
su derivada DF(X) y los
DATOS: Valor inicial X0, criterio de convergencia EPS, criterio de exactitud EPS1 y
nmero mximo de iteraciones MAXIT.
RESULTADOS: La raz aproximada X o un mensaje de falla.

PASO 1.- Hacer I = 1
PASO 2.- Mientras I < MAXIT repetir los pasos 3 a 7.
PASO 3.- Hacer X = X0 - F(X0) / DF(X0) 'calcula xi
PASO 4.- Si ABS(X - X0) < EPS entonces IMPRIMIR X y TERMINAR. De
otro modo CONTINUAR.
PASO 5.- Si ABS(F(X)) < EPS1 entonces IMPRIMIR X y TERMINAR. De
otro modo CONTINUAR.
PASO 6.- Hacer I = I + 1
PASO 7.- Hacer X0 = X 'actualiza X0
PASO 8.- IMPRIMIR mensaje de falla "EL MTODO NO CONVERGE A UNA RAZ"
y TERMINAR
Algoritmo Mtodo de Newton-Raphson
Pseudocdigo:
Algoritmo Mtodo de Newton-Raphson
Diagrama de flujo:
newtonr(xi,tol,maxit)
i=1
band=f o
i<=maxit
xi=xi-fx(xi)/fp(xi)
|f(xi)|<=tol
band=v
band=f
No
si
ciclo
while_do
Si
i=i+1
raiz= xi
band=v
mtodo no
converge
retornar
Si
No
f uncin fx(x)
retornar
f x=.....
f uncin fp(x)
retornar
f p=.....
Ver archivo en excel del mismo mtodo
pero con condicin al final del circuito
de clculo.
Realizar su grfica del mtodo
Mtodo de la secante
Se usa cuando algunas funciones cuyas derivadas pueden ser difciles de evaluar. En
estos casos la derivada se puede aproximar mediante una diferencia finita regresiva:
) (
i
x f
) (
1 i
x f
X
i+1
x
i
) (x f
x

1
1
( ) ( )
( )
i i
i
i i
f x f x
f x
x x

' ~

Sustituyendo en la ec de NR tenemos una


ecuacin iterativa:
1
1
1
( )( )
( )
( ) ( )
i i i
i i i
i i
f x x x
x x g x
f x f x

= =

-el mtodo requiere de 2 puntos iniciales de x


1 0 1
2 1
1 0
2 1 2
3 2
2 1
( ) ( )
( ) ( )
( ) ( )
( ) ( )
x x f x
x x
f x f x
x x f x
x x
f x f x

La siguiente aproximacin x
2
est dada por:
x
3
por:
Hasta que g(x
i
)=x
i+1
o una vez que |x
i+1
-x
i
|< o |f(x
i+1
)|<
1
2 iteracin:
x
0
=1 f(x
0
)=-0.63212
x
1
=0.61270 f(x
1
)=-0.07081
56384 . 0
) 07081 . 0 ( 61270 . 0
) 61270 . 0 1 ( 07081 . 0
61270 . 0
2
=


= x

t
=0.58%
3 iteracin:
x
1
=0.61270 f(x
1
)=-0.07081
x
2
=0.56384 f(x
2
)=0.00518
56717 . 0
) 00518 . 0 ( 07081 . 0
) 56384 . 0 61270 . 0 ( 00518 . 0
56384 . 0
2
=


= x

t
=0.0048%
61270 . 0
) 63212 . 0 ( 1
) 1 0 ( 632120 . 0
1
1
=


= x

t
=8.0%
-usando el ejemplo anterior pero ahora con ste mtodo, para calcular la raz de
f(x)=e
-x
-x
con valores iniciales de x
-1
=0 y x
0
=1.0

1 iteracin:
x
-1
=0 f(x
-1
)=1.00000
x
0
=1.0 f(x
0
)=-0.63212
Realizar su grfica del mtodo
Para encontrar una raz real de la ecuacin f(x) = 0, proporcionar la funcin F(X) y los
DATOS: Valores iniciales X0, X1, criterio de convergencia tol, criterio de exactitud tol1 y
nmero mximo de iteraciones MAXIT.
RESULTADOS: La raz aproximada X o un mensaje de falla.
PASO 1.- Hacer I = 1
PASO 2.- Mientras I < MAXIT repetir los pasos 3 a 8.
PASO 3.- Hacer X = X0 - (X1.X0)*F(X0) /(F(X1)-F(X0))
PASO 4.- Si ABS(X - X1) < tol entonces IMPRIMIR X y TERMINAR.
PASO 5.- Si ABS(F(X)) < tol1 entonces IMPRIMIR X y TERMINAR.
PASO 6.- Hacer X0 = X1
PASO 7.- Hacer X1 = X
PASO 8.- Hacer I = I + 1
PASO 9.- IMPRIMIR mensaje de falla "EL MTODO NO CONVERGE A UNA RAZ" y
TERMINAR
Algoritmo Mtodo de la secante
Algoritmo Mtodo de la secante
Diagrama de flujo
msecante(x0,x1,tol1,tol2,maxit)
i=1
band=f o
i<=maxit
x=x0-(x1-x0)*fx(x0)/
(fx(x1)-fx(x0))
band=f
si
ciclo
while_do
Si
i=i+1
raiz= x
band=v
mtodo no
converge
retornar
Si
No
|x-x1|<=tol1
band=v
Si
|f(x)|<=tol2
No
band=v
No
x0=x1
x1=x
f uncin fx(x)
retornar
f x=.....
Mtodo de posicin falsa, regula-falsi
Al igual que el mtodo de la secante, aproxima la derivada f(x
i
) de la ecuacin de
Newton Rapson por el cociente
1
1
( ) ( )
i i
i i
f x f x
x x

X
i
y x
i-1
estn en el lado opuesto de la raz buscada, de tal manera que sus valores
funcionales correspondientes tienen signos opuestos: f(x
i
) x f(x
i-1
)<0
x
y
x
M
x
1
x
D
f(x
D
)
f(x
1
)
f(x
M
)<0
x
A

B

a)

x
y
A

B

b)

x
x
1
x
D
f(x
1
)<0
x
M
f(x
D
)>0
f(x
M
)>0
Se denotan x
i
y x
i+1
como x
D
y x
1
respectivamente.
Se tienen 2 valores iniciales x
D
y x
1
y su funcin es continua en (x
1
y x
D
). Se traza una
lnea recta que une los puntos A y B con coordenadas (x
1
,f(x
1
) y (x
D
,f(x
D
). Se reemplaza
f(x) en el intervalo (x
1
,x
D
) con un segmento de recta AB y el punto de interseccin sobre el
eje x, x
M
ser la aprxmacin a x.
Se evala f(x
M
) y se compara su signo con el de f(x
D
), si son =s, x
D
<-x
M
, si los signos son
, x
1
<-x
M

Mtodo de posicin falsa, regula-falsi
1 1 1
1 1
( ) ( ) ( ) ( )
( ) ( ) ( ) ( )
D D D D
M D
D D
x x f x x f x x f x
x x
f x f x f x f x

= =

el objetivo es mantener los valores (x
D
y x
1
) ms cercanos entre s y la raz entre ellos.
Se traza una nueva lnea secante entre los puntos actuales A y B, y se repite el proceso
hasta que el criterio de exactitud |f(x
M
)|<
1
, tomndose como aproximacin a x el valor
ltimo de x
M
. Tambin puede usarse el criterio |x
D
-x
1
|< . En este caso se toma como
aproximacin x la media entre x
D
y x
1
.
Para calcular el valor x
M
se sustituye x
D
por x
i
y x
i-1
en la ecuacin de la secante con lo
que se llega a el algoritmo de posicin falsa.
Obtener la raz f(x)= x
3
+ 2x
2
+ 10x 20, con el mtodo de la posicin falsa
Ejemplo:
TRABAJO EN CLASE
De acuerdo con los otros mtodos realizar el algoritmo
con un ejemplo, hacer su diagrama de flujo, hacerlo en
excel y graficarlo, para la parte de programacin hacer
su codificacin, en Vbasic con excel o el cualquier
lenguaje de programacin.
Mtodo de Biseccin
Puede encontrar una raz si se conoce un intervalo de x
y
x
Y=f(x)
a
c
primero



segundo
tercero
cuarto
quinto



Secuencia de los intervalos y puntos medios
Suponemos un intervalo [a,b] o axc tiene una sla raz, hasta que los signos se y(x)
en los dos extremos sean opuestos o bien que f(a) o f(b) se anulen: f(a)f(b)0.
Algoritmo:
Bisectar el intervalo [a,b] en dos mitades: [a,b] y [b,c] donde b=(a+b)/2
Verificar los signos de f(a)f(b) y f(b)f(c), se localiza la media del intervalo que contiene raz:
f(a)f(b)0 tiene raz si no [b,c] tiene raz.
Se repite los pasos anteriores, se va haciendo ms pequeo el intervalo, en cada paso se
toma el punto medio del intervalo
La iteracin se detiene cuando la media del intervalo esta dentro de una tolerancia .
Mtodo de Biseccin
El tamao del intervalo despus de n pasos de la iteracin es (c-a)
0
/2
n
.
La tolerancia del error est dado por , (c-a)
0
/2
n
< o nlog
2
(c-a)
0
/
Algoritmo:
TRABAJO EN CLASE
De acuerdo con los otros mtodos realizar el algoritmo
con un ejemplo, hacer su diagrama de flujo, hacerlo en
excel y graficarlo, para la parte de programacin hacer
su codificacin, en Vbasic con excel o el cualquier
lenguaje de programacin.
Program funcionnolineal2;
uses crt;
const tab=' ';
var r,a,b,tol:real; i,maxit:integer; bandera:boolean;

function pot(x,n:real):real;
begin pot:=exp(n*ln(x)); end;

{se escribe la funcion a calcular}
function f(x:real):real;
begin
f:=2*pot(x,2)+x-5;
end;

function fnl(a,b,tol:real;maxit:integer):real;
var i:byte;
begin
for i:=1 to maxit do begin
r:=(a*f(b)-b*f(a))/(f(b)-f(a));
if abs(f(r))<=tol then
begin fnl:=r; bandera:=true; exit; end;
if f(a)*f(r)<0 then b:=r else a:=r;
end;
end;

{programa principal}
begin
clrscr; writeln; bandera:=false;
writeln('Este programa calcula una funcion no lineal');
writeln('el usuario debe modificarlo si desea otra funcion');
writeln('');
writeln(tab,'f(x)= 2*x^2+x-5');
writeln('');
write('limite de la funcion a= ');readln(a);
write('limite de la funcion b= ');readln(b);
write('numero max de iteraciones= ');readln(maxit);
write('tolerancia (##e-## o #.#####)= ');readln(tol);
writeln;
if bandera=true then
write('la raiz de la funcion es= ',fnl(a,b,tol,maxit):0:6)
else write('la funcion no converge en ',maxit,' iteraciones');
readkey;
end.
Programacin en Turbo Pascal

También podría gustarte