Práctica 4 Métodos de resolución numérica de ecuaciones

Anuncio
practica6.nb
1
Práctica 4
Métodos de resolución numérica de
ecuaciones
El objetivo de esta práctica es resolver una ecuación del tipo f(x)=0 aplicando un método numérico. Cuando
queramos emplear algún método numérico para aproximar una posible raíz de una ecuación, lo primero que
tenemos que estudiar es si dicha ecuación puede tener soluciones reales y comprobar que se dan las condiciones
necesarias para poder aplicar el método correspondiente.
Siempre será muy interesante expresar la ecuación de la forma f(x) = 0 y representar gráficamente la función f(x)
en un intervalo apropiado.
De esta manera, la ecuación tendrá una interpretación geométrica clara, y nos guiará en la búsqueda de los puntos
de corte de la gráfica de dicha función con el eje OX.
Los métodos que vamos a estudiar generan una sucesión {xn }, nœN, de valores aproximados de la solución.
El método se dice que es convergente si se cumple limnض xn = s, donde s es la solución de la ecuación f(x) = 0.
El error cometido en la n-sima aproximación viene dado por en = » xn - s ».
En algunos métodos numéricos (bisección y punto fijo) se dispone de una cota del error de aproximación.
Si no se dispone de una cota del error de aproximación puede tomarse la cantidad en =
»xn - xn-1 »
.
»xn »
Existencia de solución (Teorema de Bolzano)
Si f es una función continua en [a, b] y f(a) f(b) < 0, entonces existe al menos un s œ (a, b) tal que f(s) = 0.
Unicidad de solución (Corolario del Teorema de Rolle)
Si f' '(x) ∫ 0 para todo x œ (a,b), entonces f se anula a lo sumo una vez en el intervalo [a,b]
1. Método de la Bisección.
Sea f:AØR una función continua en A y supongamos que hemos localizado un intervalo [a,b] en el que tiene una
única raiz.
El método de bisección genera una sucesión de intervalos encajados y en cada iteración la aproximación xn de la
raiz de f(x) = 0 es el punto medio del intervalo,
y viene dada por xn =
an + bn
.
2
Una cota del error cometido en la n-sima iteración viene dada por en = »xn - s … §
b-a
2n+1
Ejemplo 1.1 Aplicar el método de bisección con 10 iteraciones para obtener una
solución aproximada de la ecuación 2 x - sen x - 1 = 0 y dar una cota del error
cometido.
à Definimos la función
f@x_D := 2 x − Sin@xD − 1
practica6.nb
2
Buscamos un intervalo donde haya alternancia de signo
f@0D
−1
f@1D êê N
0.158529
Luego existe solución en el intervalo [0,1].
à Unicidad de la solución
f '@xD
2 − Cos@xD
Al ser la derivada distinta de cero para todo x œ R, la solución es única.
à Aplicamos el algoritmo de la bisección
a0 = 0; b0 = 1; niter = 10;
ForBn = 0, n ≤ niter, n ++,
xn =
an + bn
;
2
If@f@xn D 0, Print@"Solución exacta", xn D; Break@DD;
If@f@xn D f@an D < 0, an+1 = an ; bn+1 = xn , an+1 = xn ; bn+1 = bn DF;
PrintB"Solución aproximada = ", N@xniter , 10D,
" con error menor que " , NB
b0 − a0
, 2FF
2niter+1
Solución aproximada = 0.8881835938 con error menor que 0.00049
Podemos presentar los resultados de todas las iteraciones de la siguiente forma (activando previamente en el menú
CellØDefault Output Format TypeØTraditionalForm):
practica6.nb
3
a0 = 0; b0 = 1;
A = Array@B, 812, 7<, 80, 0<D;
B@0, 0D = "n"; B@0, 1D = "an "; B@0, 2D = "bn "; B@0, 3D = "xn ";
B@0, 4D = "fHan L"; B@0, 5D = "fHbn L"; B@0, 6D = "fHxn L";
ForBn = 0, n ≤ 10, n ++,
xn =
an + bn
;
2
B@n + 1, 0D = n; B@n + 1, 1D = N@an , 10D; B@n + 1, 2D = N@bn , 10D;
B@n + 1, 3D = N@xn , 17D; B@n + 1, 4D = N@f@an DD;
B@n + 1, 5D = N@f@bn DD; B@n + 1, 6D = N@f@xn DD;
If@f@xn D f@an D < 0, an+1 = an ; bn+1 = xn , an+1 = xn ; bn+1 = bn DF;
A
Print@"Solución aproximada = ", N@x10 , 20DD;
Print@"Error ≤ ", N@Hb0 − a0 L ê 2 ^ 11DD
88n, an , bn , xn , fHan L, fHbn L, fHxn L<,
80, 0, 1.000000000, 0.50000000000000000, −1., 0.158529, −0.479426<,
81, 0.5000000000, 1.000000000, 0.75000000000000000, −0.479426,
0.158529, −0.181639<, 82, 0.7500000000, 1.000000000,
0.87500000000000000, −0.181639, 0.158529, −0.0175435<,
83, 0.8750000000, 1.000000000, 0.93750000000000000, −0.0175435,
0.158529, 0.0689189<, 84, 0.8750000000, 0.9375000000,
0.90625000000000000, −0.0175435, 0.0689189, 0.0253034<,
85, 0.8750000000, 0.9062500000, 0.89062500000000000, −0.0175435,
0.0253034, 0.00378502<, 86, 0.8750000000, 0.8906250000,
0.88281250000000000, −0.0175435, 0.00378502, −0.00690282<,
87, 0.8828125000, 0.8906250000, 0.88671875000000000, −0.00690282,
0.00378502, −0.00156481<, 88, 0.8867187500, 0.8906250000,
0.88867187500000000, −0.00156481, 0.00378502, 0.00110863<,
89, 0.8867187500, 0.8886718750, 0.88769531250000000, −0.00156481,
0.00110863, −0.000228462<, 810, 0.8876953125, 0.8886718750,
0.88818359375000000, −0.000228462, 0.00110863, 0.000439989<<
Solución aproximada = 0.88818359375000000000
Error ≤ 0.000488281
Ejemplo 1.2 Aplicar el método de bisección para obtener una solución
aproximada de la ecuación 1+ cos x - x = 0 con una precisión de 5 cifras decimales
exactas.
En primer lugar observemos que si x es una solución de la ecuación x = 1 - cos x, x œ [0, 2], es decir fuera del
intervalo no hay soluciones de la ecuación.
practica6.nb
4
Definimos la función
f@x_D := 1 + Cos @xD − x
à Buscamos un intervalo donde haya alternancia de signo
f@0D
2
f@2D êê N
−1.41615
Luego existe solución en el intervalo [0,2].
à Unicidad de la solución
f '@xD
−1 − Sin@xD
Al ser la derivada distinta de cero para todo x œ [0,2], la solución es única en dicho intervalo y, por tanto, en todo
R (por la observación anterior).
Plot@8f '@xD, 0<, 8x, 0, 2<D
0.5
−0.5
−1.0
−1.5
−2.0
1.0
1.5
2.0
practica6.nb
5
Aplicamos el algoritmo de la bisección: como en este caso no conocemos el número de iteraciones que
hemos de realizar, por lo que utilizaremos una instrucción que nos permita interrumpir el algoritmo
cuando hayamos alcanzado la precisión deseada.
Si el número de cifras decimales exactas que queremos conseguir es ncifras, entonces el error debe ser
menor que 12 10−ncifras .
a0 = 0; b0 = 2; ncifras = 5; ε =
WhileBTrue, xn =
an + bn
1
2
10−ncifras ; n = 0;
;
2
b0 − a0
< ε, Print@" Solución aproximada ", N@xn , 10D,
2n+1
" con una precisión de ", ncifras, " decimales."
IfB
"Se han necesitado ", n, " iteraciones"D; Break@DF;
If@f@xn D 0, Print@" Solución exacta ", xn D; Break@DD;
If@f@xn D f@an D < 0, an+1 = an ; bn+1 = xn , an+1 = xn ; bn+1 = bn D; n = n + 1F;
Solución aproximada 1.283428192 con una precisión de
5 decimales. Se han necesitado 18 iteraciones
2. Método de la cuerda o Regula-Falsi
Este método sigue el mismo esquema que el método de la bisección salvo que en cada iteración la aproximación xn
viene dada por xn = an + f(an )
bn - an
f Hbn L - f Han L
En este método no disponemos de una cota del error cometido en la n-sima iteración, por lo que para estimarlo
utilizaremos el valor en =
»xn -xn-1 »
.
»xn »
Ejemplo 2.1 Aplicar el método de la cuerda con 5 iteraciones para resolver la
ecuación 2 x - sen x -1 = 0. Dar una cota del error cometido.
à Definimos la función
f@x_D := 2 x − Sin@xD − 1
practica6.nb
6
Buscamos un intervalo donde haya alternancia de signo (se ha visto en ejemplo 1.)
f@0D
−1
f@1D êê N
0.158529
Presentamos los resultados de todas las iteraciones:
a0 = 0; b0 = 1; niter = 5;
ForBn = 0, n ≤ niter, n ++,
xn = an − f@an D
bn − an
;
f@bn D − f@an D
If@f@xn D 0, Print@"Solución exacta", xn D; Break@DD;
If@f@xn D f@an D < 0, an+1 = an ; bn+1 = xn , an+1 = xn ; bn+1 = bn DF;
PrintB"Solución aproximada = ", N@xniter , 10D,
" con error menor que " , NBAbsB
xniter − xniter−1
xniter
F, 2FF
Solución aproximada = 0.8878622108 con error menor que 2.7 × 10−8
3. Método del Punto Fijo
Un punto fijo de una función F es un valor x tal que F(x) = x. El problema de encontrar las soluciones de una
ecuación f(x)=0 y el de encontrar los puntos fijos de una función F(x) son equivalentes en el siguiente sentido:
Definiendo F(x)=x-f(x), o F(x) = x + f(x), un punto fijo de F será una raíz de f, o , al contrario, una raíz de f será
un punto fijo de F.
Condiciones de convergencia del método de punto fijo. Las condiciones suficientes para la existencia de punto
fijo de F:[a,b]ØR son las siguientes:
i) FœC1 @a, bD
ii) F(x)œ[a,b], "xœ[a,b]
iii) »F' (x)»§k<1, "xœ[a,b]
en cuyo caso existe una única solución de la ecuación F(x) = x en [a,b]. Además, la sucesión {xn }dada por xn+1 =
F(xn ), n = 0,1,2.... converge a dicha solución, siendo x0 un punto arbitrario del intervalo [a,b].
Acotación del error: en la n-sima iteración viene dado por: en = … xn - s … §
Kn
1-K
» x1 - x0 »
practica6.nb
7
Ejemplo 3.1 Aplicar el método de punto fijo para resolver la ecuación 2 x - sen x 1 = 0 con 20 iteraciones. Dar una cota del error cometido.
En ejemplos anteriores hamos probado que la ecuación tiene solución única en el intervalo [0,
1].
1
Hacemos FHxL = 2 H1 + senHxLL
† Definimos la función F(x)
Φ@x_D :=
1
2
H1 + Sin@xDL
† Comprobamos si se cumplen las condiciones suficientes de convergencia:
i) La función FœC1 @0, 1D
Φ'[x]
Cos@xD
2
ii) F(x)œ[0,1], "xœ[0,1]
Podemos comprobarlo representando la gráfica de la función en el intervalo [0,1] y viendo que su imagen queda
dentro del intervalo [0,1].
Plot[{Φ[x],0,1},{x,0,1}]
1.0
0.8
0.6
0.4
0.2
0.2
0.4
0.6
0.8
1.0
practica6.nb
8
iii) »F' (x)»§k<1, "xœ[0,1]
Representamos la gráfica de »F'(x) » en el intervalo [0,1] y tomamos como K el valor máximo en dicho intervalo
(existe por el teorema de Weierstrass)
Plot[{Abs[Φ'[x]],0,1},{x,0,1}]
1.0
0.8
0.6
0.4
0.2
0.2
0.4
0.6
0.8
1.0
Luego podemos tomar K=1/2.
Como se cumplen las tres condiciones, la sucesión dada por xn+1 =F(xn ), n¥0, converge a la solución de la ecuación
partiendo de cualquier punto x0 del intervalo [0,1].
† Aplicamos el método con 20 iteraciones:
K=
1
; x0 = 1;
2
For@n = 0, n ≤ 19, n ++, xn+1 = Φ@xn DD;
Print@"Solución aproximada = ", N@x20 , 10DD;
PrintB"Error de aproximación = ", NB
Solución aproximada = 0.8878622116
Error de aproximación = 1.5 × 10−7
Kn
1−K
Abs@x1 − x0 D, 2FF
practica6.nb
ü
9
Instrucción FixedPoint
Mathematica dispone de la instrucción FixedPoint que implementa directamente este método de aproximación al
punto fijo de una función, el formato básico es
FixedPoint[función iteradora, valor inicial]
Si utilizamos la instrución FixedPoint se implementa directamente este método de aproximación al punto fijo de la
función F.
FixedPoint@Φ, 1., 20D
0.887862
4. Método de Newton-Raphson (o de las
tangentes).
El método de Newton-Rapshon parte de un valor inicial x0 y también ahora se construye iterativamente una
sucesión de valores xk . Para ello utiliza las rectas tangentes a la gráfica de la función en los puntos ( xk , f Hxk ))
calculando el punto de corte de éstas con el eje OX , de esta forma se aproxima la raíz buscada. Para que este
método funcione correctamente será necesario que la derivada de la función no esté próxima a cero, al menos en
cierto entorno de la raíz, ya que de lo contrario se podría producir una división entre cero o bien la creación de
enormes errores de redondeo al dividir entre cantidades muy pequeñas.
Las condiciones suficientes para la convergencia del método de Newton-Raphson son las siguientes: Sea
f:[a,b]ØR fœC2 [a,b]. Si se cumple:
i) f(a) f(b) <0
ii) f' (x) ∫ 0, "xœ[a,b]
iii) f''(x) no cambia de signo en todo el intervalo,
entonces, si partimos de cualquier punto inicial x0 œ[a,b] con la condición de que f(x0 ) f'' (x0 ) > 0, la sucesión
{xn }dada por
xn+1 = xn -
f Hxn L
,
f ' Hxn L
n = 0, 1, 2...
converge a la solución de la ecuación f(x) = 0.
Acotación del error: No se dispone de cota del error cometido en la n-sima iteración, por lo que utilizamos el
valor en =
»xn -xn-1 »
.
»xn »
Ejemplo 4.1 Aplicar el método de Newton-Raphson para resolver la ecuación
x3 + 4 x - 10 = 0 con 5 iteraciones y estimar el error cometido.
† Definimos la función
practica6.nb
10
f[x_]:=x^3 + 4 x - 10
† Buscamos un intervalo donde se cumplan las hipótesis del teorema de convergencia:
Se cumple i) pues f(1) f(2) < 0.
f[1]
−5
f[2]
6
Se cumple ii) pues f'(x)∫0 para todo xœ[1,2]
f'[x]
4 + 3 x2
Y se cumple iii) pues f''(x)>0 en [1,2].
para generar la sucesión tomamos un valor inicial x0 œ[1,2] tal que f(x0 L f '' Hx0 ) > 0. Generalmente se suele tomar
uno de los extremos del intervalo.
f[1] f''[1]
−30
f[2] f''[2]
72
Luego tomamos x0 = 2.
† Aplicamos el método de newton-Raphson con 5 iteraciones
practica6.nb
11
x0 = 2;
f@xn D
F;
f '@xn D
Print@"Solución aproximada = ", N@x5 , 20DD;
x5 − x4
PrintB"Error estimado = ", NBAbsB
F, 2FF
x5
ForBn = 0, n ≤ 4, n ++, xn+1 = xn −
Solución aproximada =
1.5567732643942114633
Error estimado = 5.7 × 10−13
También podemos resolverla utilizando la instrucción FindRoot [ecuación, {x,x0 }]que encuentra un valor
aproximado de la solución de la ecuación dada (en este caso suponemos que en la variable x) partiendo del valor
inicial x0 y aplicando el método de Newton-Raphson.
FindRoot[x^3+ 4 x - 10, {x,2}]
8x → 1.55677<
5.-Método de la secante
El método de la secante se puede obtener a partir del método de la cuerda o a partir del método de NewtonRaphson. El procedimiento a seguir a partir del método de la cuerda es similar, pero en este caso se construye
iterativamente una sucesión de valores xk+1 = xk -
xk -xk-1
f Hxk L- f Hxk-1 L
f Hxk L , k = 0,1, .. sin realizar la comprobación de
cambio de signo.
Para obtenerlo a partir del método de Newton-Raphson se sustituye en éste la derivada por el cociente de
diferencias, geométricamente equivale a sustituir la tangente por la secante.
Ahora bien, debemos implementar algún criterio de parada . Lo que haremos ahora es fijarnos en la diferencia entre
dos iteraciones consecutivas, al no poder controlar de forma tan clara como en el método de bisección el error
absoluto cometido, pararemos el proceso cuando la diferencia sea inferior a la tolerancia prefijada.
Ejemplo 5.1 Aplicar el método de la cuerda con 5 iteraciones para resolver la
ecuación 2 x - cos x = 0. Dar una cota del error cometido.
à Definimos la función
f@x_D := 2 x − Cos@xD
à Buscamos un intervalo donde haya alternancia de signo
practica6.nb
12
f@0D
−1
f@1D êê N
1.4597
Presentamos los resultados de todas las iteraciones:
a0 = 0; b0 = 1; niter = 10;
ForBn = 0, n ≤ niter, n ++,
xn = an − f@an D
bn − an
;
f@bn D − f@an D
If@f@xn D 0, Print@"Solución exacta", xn D; Break@DD;
If@f@xn D ≠ 0, an+1 = an ; bn+1 = xn , an+1 = xn ; bn+1 = bn DF;
PrintB"Solución aproximada = ", N@xniter , 20D,
" con error menor que " , NBAbsB
xniter − xniter−1
xniter
F, 20FF
Solución aproximada = 0.45018361129185560400
con error menor que 7.6350037629623176581 × 10−11
FindRoot[2 x - Cos[x]==0,{x,0,1}]
8x → 0.450184<
6. Ejercicios propuestos
Ejercicio 1. Probar que la ecuación x + cos x = 3 tiene solución real única y obtener un valor aproximado de la
solución aplicando el método de la secante con 5 iteraciones y el método de Newton-Raphson con 7 iteraciones.
Estimar el error cometido en cada caso.
Ejercicio 2. ¿Cuántas iteraciones del método de la bisección son necesarias para obtener una solución de la
ecuación x ln x = 4 con 5 cifras decimales exactas?. Hallar la solución.
Ejercicio 3. Aplica el método iterativo de punto fijo para resolver la ecuación e-3 x - x =
0. Dar una estimación del error cometido.
Descargar