2.1.-Resol.ec. no lineales.nb

Anuncio
2.1.-Resol.ec. no lineales.nb
126
OPERADORES LÓGICOS Y RELACIONALES.
CICLOS Y ESTRUCTURAS DE CONTROL.
MÉTODOS DE RESOLUCIÓN DE UNA ECUACIÓN
NO LINEAL.
Operadores lógicos y relacionales
Los operadores lógicos son:
! p : Contrario de p. Resulta verdadero si p es falso y al reves.
p && q : ( And lógico ) Es verdadero si p y q son verdaderos y falso en caso contrario.
p fifi q : (Or lógico ) Es verdadero si p o q o ambos son verdaderos.
Los operadores relacionales son :
x == y ( x igual a y)
x != y ( x distinto de y)
x > y ; x < y; x >= y; x <= y.
El resultado de una operación lógica o relacional es un valor lógico verdadero o falso.
à El comando If
Mediante este comando se evalua una expresión u otra según que una determinada condición sea verdadera o falsa.
Su forma es :
If[condición, t, f]
Si la condición es verdadera se evalúa la expresión t, y si es falsa la f.
x = 7; y = 10; If@x ≥ y, x ^ 2, y ^ 3D
1000
2.1.-Resol.ec. no lineales.nb
127
Ciclos y estructuras de Control
La ejecución de un programas de Mathematica implica la evaluación de una sucesión de expresiones de Mathematica. En programas sencillos las expresiones a evaluar se suelen encontrar separadas por ; y se evalúan una tras otra.
A menudo, sin embargo, puede ser necesario evaluar un mismo grupo de expresiones varias veces, en una especie
de "ciclo". Esto es lo que ocurre en muchos métodos iterativos.
Entre otros, Mathematica dispone de los siguientes comandos para implementar ciclos: Do, For y While. El
comando más sencillo es el Do que se parece mucho al comando Table.
La sintaxis de estos comandos es la siguiente:
1º.- Do
Do[expr,{i,imax}]
Do[expr,{i,imin,imax,di}]
Do[expr,{n}].
Este comando es muy parecido al comando Table con la diferencia de que no se gnera una lista, simplemente se evalúa expr tantas veces como indique el contador i.
2º.- For
For[start,test,incr,body]
El comando For tiene cuatro partes:
- start : se inicializan con el valor deseado las variables que intervienen en el ciclo. Irán separadas por ;.
- test : condición lógica que será evaluada cada vez que se recorra el ciclo. Cuando test es falso se sale del
ciclo.
- incr : sirve para incrementar el contador utilizado.
- body : está constituído por el conjunto de acciones, separadas por ; , que se ejecutan cada vez que se
recorre el ciclo.
3º.- While
While[test,body]
Se evalúan las acciones que forman body mientras la expresión lógica contenida en test sea verdadera.
Como ejemplo de utilización de estos comandos se presentan algunos métodos de resolución de una ecuación no
lineal.
Método de la bisección
Ejemplo .
Obtener, mediante el método de la bisección , una solución aproximada de la ecuación :
è!!!!!!!!
!!!!!
x2 + 1 = tanHxL, 0 < x < p ê 2
En cada iteración se calcula también la longitud del intervalo. El proceso finalizará cuando la longitud del intervalo
sea menor que 0.001 o el valor de la función en el resultado de la última iteración sea menor que 0.001.
Solución:
En primer lugar realizamos la representación gráfica para obtener un intervalo [a,b] en el que la función cambie de
signo
2.1.-Resol.ec. no lineales.nb
f@x_D = −
128
è!!!!!!!!
!!!!!
x2 + 1 + Tan@xD;
Plot@f@xD, 8x, 0, π ê 2<, PlotRange → 8−1, 1<D
1
0.75
0.5
0.25
0.25
0.5
0.75
1
1.25
1.5
-0.25
-0.5
-0.75
-1
Graphics
Tomamos el intervalo [0.8,1]
a = 0.8; b = 1; c = Ha + bL ê 2; lon = Abs@b − aD;
While@lon > 0.001 fl Abs@ f@cDD > .001, If@f@cD ∗ f@aD < 0, b = c, a = cD;
c = Ha + bL ê 2; lon = Abs@b − aD; Print@c, " ", lon, " ", f@cDDD
0.95
0.1
0.925
0.0190712
0.05
0.9375
−0.0352361
0.025
0.94375
−0.00866004
0.0125
0.00505648
−0.00183845
0.940625
0.00625
0.942188
0.003125
0.941406
0.0015625
0.00159977
−0.000121639
2.1.-Resol.ec. no lineales.nb
129
Método de Newton-Raphson
Ejemplo
Hallar mediante el método de Newton y con un error menor que 10-4 las raices positivas de la ec.:
0.5 exê3 - sen(x) = 0.
Solución
En primer lugar representamos gráficamente la función para determinar una buena aproximación inicial.
f@x_D = 0.5 ∗ Exp@x ê 3D − Sin@xD; Plot@f@xD, 8x, 0, 4<D
1.5
1.25
1
0.75
0.5
0.25
1
2
3
4
Graphics
A la vista de la gráfica, dos buenas aproximaciones son : 0.6 y 2. Utilizamos esta vez el comando While para
realizar las iteraciones del método de Newton-Raphson. Se utiliza como condición que la diferencia en valor
absoluto entre las dos últimas iteraciones sea menor que eps y que el nº de iteraciones sea inferior a nmax.
xv = 0.6; error = 1; eps = 10−15 ; nmax = 50; n = 1;
2.1.-Resol.ec. no lineales.nb
130
While@error > eps && n < nmax,
xn = SetPrecision@xv − f@xvD ê f '@xvD, 15D; error = Abs@xn − xvD;
Print@"En la iter. ", n, " la sol.aprox.es ", xnD; xv = xn; n ++D
En la iter. 1
la sol.aprox.es
0.674077259515817
En la iter. 2
la sol.aprox.es
0.677206926997974
En la iter. 3
la sol.aprox.es
0.677212889956926
En la iter. 4
la sol.aprox.es
0.677212889978624
En la iter. 5
la sol.aprox.es
0.677212889978625
Método de la secante
Ejemplo
Hallar mediante el método de la secante y con un error relativo inferior al 0.001% el valor aproximado de la raiz
de la ec.:
e-x - x = 0
partiendo de x0 =0 y x1 =1, y sabiendo que la solución exacta es r=0.56714329. El número máximo de iteraciones a
realizar es 30.
Solución
En primer lugar representamos gráficamente la función
2.1.-Resol.ec. no lineales.nb
131
f@x_D = Exp@−xD − x; Plot@f@xD, 8x, 0, 2<D
1
0.5
0.5
1
1.5
2
-0.5
-1
-1.5
Graphics
Utilizamos el comando While para realizar las iteraciones del método de la secante. Se utiliza como condición que
la diferencia en valor absoluto entre el valor exacto y el valor aproximado obtenido en la iteración dividida por el
valor exacto sea menor que 0.00001 y que el nº de iteraciones sea inferior a nmax.
x0 = 0.; x1 = 1; error = 1; eps = 10−5 ; nmax = 30; n = 1; r = 0.56714329;
While@error > eps && n < nmax,
x2 = SetPrecision@x1 − f@x1D ∗ Hx1 − x0L ê Hf@x1D − f@x0DL, 9D;
error = Abs@r − x2D ê r; Print@"En la iter. ", n,
" la sol.aprox.es ", x2D; x0 = x1; x1 = x2; n ++D
En la iter. 1
la sol.aprox.es
0.612699837
En la iter. 2
la sol.aprox.es
0.563838389
En la iter. 3
la sol.aprox.es
0.567170358
En la iter. 4
la sol.aprox.es
0.567143307
Los comandos Solve y FindRoot
Una expresión como x^2 + 2 x - 7 ã 0 representa en Mathematica una ecuación.Podemos utilizar el comando
Solve para obtener los valores de x que verifican la ecuación:
2.1.-Resol.ec. no lineales.nb
132
Solve[x^2 + 2x - 7 == 0, x]
99x → −1 − 2
è!!!
è!!!
2 =, 9x → −1 + 2 2 ==
Si se quiere el valor aproximado :
NSolve[x^2 + 2x - 7 == 0, x]
88x → −3.82843<, 8x → 1.82843<<
El resultado es una lista de reglas en las que se asigna a x los valores de las raices. Para extraer de la solución el
resultado :
sol=NSolve[x^2 + 2x - 7 == 0, x];a=x/.sol[[1]]
−3.82843
El comando Solve siempre intenta dar como resultado fórmulas explícitas para la solución de una ecuación. Sin
embargo, si la ecuación es un poco compleja esto resultará imposible. Para ecuaciones algebráicas de grado menor
o igual que 4 Mathematica proporciona el reusltado exacto, pero puede que esto sea imposible para grados mayores.
Mathematica también puede resolver ecuaciones con funciones trascendentes . En muchos de estos casos da un
mensaje indicando que en el resultado no están todas las soluciones,
Solve[ Sin[x] == 1.5 , x ]
—
Solve::ifun : Inverse functions are being used by Solve, so some solutions
may not be found; use Reduce for complete solution information. More…
88x → 1.5708 − 0.962424 <<
Se puede obtener una solución numérica de la ecuación mediante el comando FindRoot. Este comando implementa
una versión del método de Newton-Raphson y necesita una aproximación inicial. En la práctica esta aproximación
se obtiene a partir de la representación gráfica.
FindRoot[ Cos[x] == x, {x, 1} ]
8x → 0.739085<
2.1.-Resol.ec. no lineales.nb
133
Ejercicios
1º.- Comprobar gráficamente que la función f(x) = x- 0.2 sen(x) - 0,5 tiene una única raiz real en el intervalo [0.5 ,
1]. Aplicar los métodos de la bisección y Newton-Raphson, contando en cada caso el número de iteraciones que se
han realizado , para determinar la raiz con una precisión de 10-4 . Establecer un nº máximo de iteraciones a realizar
igual a 50.
2º.- Representar en una misma gráfica las funciones f(x) = 2 cos(x) y g(x) = ex para obtener aproximaciones
iniciales de las raices de 2cos(x) - ex = 0. ¿Cuántas raíces tiene?. ¿Cuántas son positivas?. Determinar las raices
positivas con una precisión de 10-8 utilizando el método de Newton-Raphson .
3º.- Comprobar de forma gráfica que la ecuación .
4 sen(x) = 1+x
tiene tres raices reales : r1 <r2 <r3 . A continuación determinar con una precisión de 10-6 ,
a) r1 utilizando el mdo de la secante.
"
" " " " bisección.
b) r2
"
" " " Newton.
c) r3
4º.- Encontrar una raiz aproximada de la ecuación :
x3 - x - 1 = 0
en el intervalo [1 , 2] con una precisión de 10-10 primero por el método de Newton y luego por el de la secante.
Contar el nº de iteraciones que se han realizado en ambos casos para comprobar cuál de los dos métodos tiene una
convergencia más rápida.
5º.-Utilizando Do, representar sucesivamente las gráficas de sen(nx) para n desde 1 hasta 5
6º.-Siendo Sn la suma de los n primeros números naturales. ¿Cúal es el mayor valor de n tal que Sn<11?. En este
caso, ¿Cuanto es exactamente la suma Sn?.
Repetir el ejercicio de forma que Sn<10^4.
2.1.-Resol.ec. no lineales.nb
134
2
3
x
x
7º.-Sabiendo que ex = 1 + x + ÅÅÅÅ
ÅÅ + ÅÅÅÅ
ÅÅ +.... . Encontrar el polinomio que nos da, para x=5, una valor aproximado de
2!
3!
-4
5
e con un error menor que 10 . Utilizar como criterio de parada que el valor absoluto del sumando a añadir sea
menor que 10-4 . El nº de operaciones se puede optimizar teniendo en cuenta que el nuevo sumando que hay que
x3
x2
ÅÅ = ( ÅÅÅÅ
ÅÅ )* ÅÅÅÅ3x , es decir , term = term/n y
añadir es igual al último que se ha añadido dividido por n. Por ejemplo : ÅÅÅÅ
3!
2!
a continuación : suma = suma +term.
8º.- La sucesión 8an } de los números de Fibonacci verifica que an = an-1 +an-2 , siendo a0 = a1 = 1. Crear una
lista que contenga a los 20 primeros términos de la sucesión. Calcular los términos de la sucesión que sean menores que 1000.
Descargar