Вы находитесь на странице: 1из 28

ECUACIONES ALGEBRAICAS - 2 - 29 -

ECUACIONES ALGEBRAICAS - 2

En este tema se estudian métodos para resolver ecuaciones que se encuen-


tran en la forma f(x)=0. Esta forma es más estable y la mayoría de las fun-
ciones se encuentra ya en la misma, por lo que resulta de mayor utilidad
práctica.
Como ya se vio en los anteriores temas, gráficamente la solución se en-
cuentra en la intersección de la curva "f(x)" y la recta "x=0":
f
f(x)

Solución
+
0 x
-

3.1. MÉTODO INCREMENTAL

Dado que a ambos lados de la solución la función tiene signos diferentes,


el método incremental simplemente busca el lugar donde ocurre dicho cambio.
Matemáticamente se sabe que dos valores tienen signo diferentes cuando el
resultado de su multiplicación es negativa (menor que cero).
En el método incremental se asume valor inicial “x1” y un incremento “Δx”,
entonces se calculan valores sucesivos de la función (obtenidos con el in-
cremento: xi+1=xi+Δx), hasta que se produce un cambio de signo:

Segmento
donde ocurre
Incremento el cambio de
signo
x x x x x x
+
- 0 x
x1 x2

Solución

Una vez encontrado el segmento donde ocurre el cambio, se puede volver a


repetir el método empleando un incremento más pequeño, usualmente la décima
parte del incremento original. Este proceso se puede repetir hasta que el
segmento sea casi cero (exactitud) o hasta que los valores de “x” a ambos
lados del segmento sean casi iguales (precisión). Sin embargo, alcanzar una
exactitud o precisión elevada, suele requerir demasiadas iteraciones, razón
por la cual el método incremental generalmente se emplea sólo para encon-
- 30 - Hernán Peñaranda V.

trar el segmento de solución. La solución más exacta se encuentra luego con


otros métodos.
Aunque el proceso es muy simple, para tener una idea más clara se encon-
trará el segmento de solución para la siguiente función, comenzando la bús-
queda en x=0.1 (x1) con un incremento de 0.2 (Δx):
0.36
f (x )=( 52+3 √ x−8x 0.8 ) −x=0
Primero se programa la función:
>> function r=fx(x) r=(52+3*sqrt(x)-8*x^0.8)^0.36-x; end
Se asignan los valores iniciales y se calcula el valor de la función:
>> dx=0.2; x1=0.1, fx(x1)
x1 = 0.1
ans = 4.038075664336324
Entonces se incrementa el valor de “x1” y se vuelve a calcular el valor de
la función hasta que ocurre un cambio de signo:
>> x1+=dx, fx(x1)
x1 = 0.30000000000000004
ans = 3.806411761132061
>> x1+=dx, fx(x1)
x1 = 0.5
ans = 3.575131566593953
>> x1+=dx, fx(x1)
x1 = 0.7
ans = 3.3443975964542174
>> x1+=dx, fx(x1)
x1 = 0.8999999999999999
ans = 3.114077365724064
>> x1+=dx, fx(x1)
x1 = 1.0999999999999999
ans = 2.8840553877884245
>> x1+=dx, fx(x1)
x1 = 1.2999999999999998
ans = 2.6542422965604398
>> x1+=dx, fx(x1)
x1 = 1.4999999999999998
ans = 2.424568232957628
>> x1+=dx, fx(x1)
x1 = 1.6999999999999997
ans = 2.194977090786485
>> x1+=dx, fx(x1)
x1 = 1.8999999999999997
ans = 1.9654225285726123
>> x1+=dx, fx(x1)
x1 = 2.0999999999999996
ans = 1.7358652631442486
>> x1+=dx, fx(x1)
x1 = 2.3
ans = 1.5062712033539745
>> x1+=dx, fx(x1)
x1 = 2.5
ans = 1.2766101309790843
>> x1+=dx, fx(x1)
x1 = 2.7
ans = 1.0468547436884839
ECUACIONES ALGEBRAICAS - 2 - 31 -

>> x1+=dx, fx(x1)


x1 = 2.9000000000000004
ans = 0.8169799426585085
>> x1+=dx, fx(x1)
x1 = 3.1000000000000005
ans = 0.5869622889544353
>> x1+=dx, fx(x1)
x1 = 3.3000000000000007
ans = 0.3567795784978278
>> x1+=dx, fx(x1)
x1 = 3.500000000000001
ans = 0.126410501638206
>> x1+=dx, fx(x1)
x1 = 3.700000000000001
ans = -0.1041656362321075
Como se ve, el cambio de signo ocurre entre x=3.5 y x=3.7, por lo tanto
la solución se encuentra en algún lugar entre estos dos límites.

3.1.1. Algoritmo y código (segmento de solución)

El algoritmo que automatiza el proceso es:


incr1: Segmento de solución -
método Incremental.

recibir f,x1,dx,li f: Función a resolver (f(x)=0).


x1: Valor inicial asumido.
dx: Incremento.
c=1 li: Límite de iteraciones.

f1 = f(x1)

x2 = x1+dx

f2 = f(x2)

[else] [f1*f2<0]

[else] [c=li]

Límite de
c =c+1 mostrar x2 iteraciones devolver x1
alcanzado
x 1 = x2 generar error

El código elaborado en base al mismo (el cual debe ser guardado en un


archivo en Jasymca, conjuntamente los otros métodos) es:
function x1=incr1(f,x1,dx,li)
c=1; f1=f(x1);
while 1
x2=x1+dx;
printf("%f: x= %f\n",c,x2);
f2=f(x2);
if f1*f2<0 break; end
if c++ == li error("error incre1: %f\n",x1); end
x1=x2;
end
end
- 32 - Hernán Peñaranda V.

Llamando al módulo con la función “fx” y los valores iniciales empleados


en el ejemplo manual se obtiene:
1.0: x= 0.30000000000000004
2.0: x= 0.5
3.0: x= 0.7
4.0: x= 0.8999999999999999
5.0: x= 1.0999999999999999
6.0: x= 1.2999999999999998
7.0: x= 1.4999999999999998
8.0: x= 1.6999999999999997
9.0: x= 1.8999999999999997
10.0: x= 2.0999999999999996
11.0: x= 2.3
12.0: x= 2.5
13.0: x= 2.7
14.0: x= 2.9000000000000004
15.0: x= 3.1000000000000005
16.0: x= 3.3000000000000007
17.0: x= 3.500000000000001
18.0: x= 3.700000000000001
x1 = 3.500000000000001
Al igual que en el ejemplo manual se encuentra que la solución está entre
3.5 y 3.5+0.2=3.7 (donde 0.2 es el incremento empleado). Una vez comprobado
el correcto funcionamiento del programa, se puede suprimir la impresión de
los resultados intermedios (anteponiendo un % a la línea con la orden
“printf”).
Como otro ejemplo se empleará el segmento de solución de la ecuación:

f (x )=x 3+2 x 2+3 x+4=0


Empleando un valor inicial igual a 1.1, un incremento igual a 0.5 y un
límite de 50 iteraciones:
>> function r=fx1(x) r=x^3+2*x^2+3*x+4; end
>> incr1($fx1,1.1,0.5,50)
error incre1: 25.6
Como se puede ver en este caso en 50 iteraciones no se encuentra una so-
lución. Probando hacia el lado negativo (incremento -0.5) se obtiene:
>> incr1($fx1,1.1,-0.5,50)
x1 = -1.4
Entonces existe una solución entre -1.4 y -1.9.

3.1.2. Algoritmo y código (raíz de la función)

Como ya se dijo, una vez determinado el segmento de solución, se puede


encontrar un segmento más cercano a la solución reduciendo el incremento a
la décima parte y repitiendo el proceso de búsqueda, tal como se muestra en
la figura de la siguiente página.
Así por ejemplo, una vez encontrado que el segmento de solución para la
función:
0.36
f (x )=( 52+3 √ x−8x 0.8 ) =0
Se encuentra entre 3.5 y 3.7, se puede encontrar un segmento más preciso
reduciendo el incremento a la décima parte (0.2/10=0.02) y comenzando la
búsqueda en 3.5:
ECUACIONES ALGEBRAICAS - 2 - 33 -

x original

Nuevo
incremento Nuevo
segmento de
solución
x x x x x x

0 x1 x2
Solución

>> dx=0.02; x1=3.5; fx(x1)


ans = 0.12641050163820688
>> x1+=dx, fx(x1)
x1 = 3.52
ans = 0.10336254305431858
>> x1+=dx, fx(x1)
x1 = 3.54
ans = 0.08031249311803901
>> x1+=dx, fx(x1)
x1 = 3.56
ans = 0.05726033143242981
>> x1+=dx, fx(x1)
x1 = 3.58
ans = 0.03420603763377272
>> x1+=dx, fx(x1)
x1 = 3.6
ans = 0.01114959138949878
>> x1+=dx, fx(x1)
x1 = 3.62
ans = -0.011909027603867361
Por lo tanto la solución se encuentra entre 3.60 y 3.62. Reduciendo una
vez más el segmento y repitiendo el proceso se obtiene:
>> dx=0.002; x1=3.60; fx(x1)
ans = 0.01114959138949878
>> x1+=dx, fx(x1)
x1 = 3.602
ans = 0.008843827598637777
>> x1+=dx, fx(x1)
x1 = 3.6039999999999996
ans = 0.006538042059975435
>> x1+=dx, fx(x1)
x1 = 3.6059999999999994
ans = 0.004232234753226205
>> x1+=dx, fx(x1)
x1 = 3.607999999999999
ans = 0.001926405658108088
>> x1+=dx, fx(x1)
x1 = 3.609999999999999
- 34 - Hernán Peñaranda V.

ans = -3.794452456604702E-4
En consecuencia la solución se encuentra entre 3.608 y 3.610. Prosiguien-
do de esa manera, se puede ir reduciendo el segmento de solución hasta que
el valor inicial (o final) del segmento pueda ser considerado como la solu-
ciones buscada. Así, en este punto se puede afirmar que la solución es 3.61
(con 3 dígitos de precisión).
El algoritmo que automatiza el proceso es el siguiente:
incr2: Solución de una ecuación algebraica
por el método incremental.

recibir f,x1,dx,err,li f: Función a resolver (f(x)=0).


x1: Valor asumido.
dx: Incremento.
c=1 err: Error permitido.
li: Límite de iteraciones.
x1 = incr1(f,x 1,dx,10)

[else] [|dx|<err]

[else] [c = li]

Límite de
c = c+1 mostrar x1 iteraciones devolver x1
alcanzado
dx = dx/10 generar error

El código respectivo es:


function x1=incr2(f,x1,dx,err,li)
c=1;
while 1
x1=incr1(f,x1,dx,li);
printf("%f: x= %f\n",c,x1);
if abs(dx)<err break; end
if c++ == li error("error incre2: %f\n",x1); end
dx=dx/10;
end
end
Se puede probar el código encontrando la solución del ejemplo manual con
14 dígitos de exactitud, comenzando en 1.1, con un incremento de 0.1 y un
límite de 100 iteraciones:
>> incr2($fx,1.1,0.1,1e-14,100)
1.0: x= 3.6000000000000023
2.0: x= 3.6000000000000023
3.0: x= 3.6090000000000013
4.0: x= 3.6096000000000026
5.0: x= 3.609670000000003
6.0: x= 3.609670000000003
7.0: x= 3.6096708000000017
8.0: x= 3.6096708800000012
9.0: x= 3.6096708860000017
10.0: x= 3.6096708861000018
11.0: x= 3.6096708861400018
12.0: x= 3.6096708861400018
13.0: x= 3.6096708861400018
14.0: x= 3.6096708861400426
15.0: x= 3.6096708861400497
x1 = 3.6096708861400497
ECUACIONES ALGEBRAICAS - 2 - 35 -

Una vez probado el programa se puede suprimir la impresión de los resul-


tados intermedios (como siempre colocando un comentario “%” delante de la
instrucción “printf”).

3.1.3. Ejemplos

1. Encuentre la solución de la siguiente función por el método incremental,


empleando con 10 dígitos de exactitud.
f ( p)=cos (k⋅l )⋅cosh (k⋅l)+1=0
p
k2=
a
2 E⋅I⋅g
a=
A⋅y
6
l=120 ; I =170.6 ; E =3×10
y=0.066 ; A=32 ; g=386 ;
Primero se programa la función:
function r=fx4(p)
l=120; I=170.6; E=3e6; y=0.066; A=32; g=386;
a=sqrt(E*I*g/(A*y));
k=sqrt(p/a);
r=cos(k*l)*cosh(k*l)+1;
end
En este caso se buscará la solución comenzando en 1.1 con un incremento
de 1 y un límite de 100 iteraciones:
>> incr2($fx4,1.1,1,1e-10,100)
x1 = 74.67669629022001
Como la exactitud es igual a 1e-10, el resultado es preciso hasta el dé-
cimo segundo dígito.
2. Encuentre la solución (valor de “x”) del siguiente sistema de ecuaciones
por el método incremental, con 7 dígitos de exactitud.

3 x 2.1 – 5 y=7.0
1.2
y +4 z=14.3
x+ y 2 +z 2=14.0
Primero se coloca el sistema en función de una sola variable:

3 x 2.1−7.0
y=
5
14.3− y 1.2
z=
4
f (x )=x+ y +z 2 −14.0=0
2

Se programa la función
function r=fx5(x)
y=(3*x^2.1-7)/5;
z=(14.3-y^1.2)/4;
r=x+y^2+z^2-14;
end
- 36 - Hernán Peñaranda V.

Comenzando la búsqueda en 1.1, con un incremento de 1 y un límite de 100


iteraciones se obtiene:
>> incr2($fx5,1.1,1,1e-7,100)
error incre1: 100.1
Es decir que el método no encuentra una solución con estos valore inicia-
les, ello se debe a que (como ya se vio en el tema anterior), esta función
tiene dos soluciones entre 1 y 2, como se puede ver en la gráfica:
>> x5=1.5:0.03:2; y5=fx2(x5); plot(x5,y5)

Por lo tanto, en este caso, el incremento inicial es muy grande, al ser


igual a 1, se salta las dos soluciones. Disminuyendo el incremento a 0.1 se
obtiene:
>> incr2($fx5,1.1,0.1,1e-7,100)
x1 = 1.7265261399999994
Que es la primera solución. Para encontrar la segunda partimos de un va-
lor cercano a esta solución:
>> incr2($fx5,1.73,0.1,1e-7,100)
x1 = 1.9437970799999993

3.1.4. Ejercicios

1. Encuentre la o las soluciones de la siguiente función. Estime los valo-


res iniciales mediante la gráfica de la función.

2 x 2+5 x y – 4 x=115
x+ y
e 5
+ x 2 y 2 – 70 y=15
2. Encuentre la o las soluciones de la siguiente función con 9 dígitos de
precisión (o exactitud) y un límite de 50 iteraciones. Estime los valo-
res iniciales mediante la gráfica de la función.
ECUACIONES ALGEBRAICAS - 2 - 37 -

15 y+20 x 2 − x 3=1500
x
2 2
9z−1. 5x +e =300
y 2 −z 3 −5x=166 .81
3.2. MÉTODO DE LA BISECCIÓN (O MÉTODO DE BOLTZANO)

Como ya se dijo, el método incremental requiere demasiadas iteraciones


para encontrar el resultado, por eso normalmente sólo se emplea para encon-
trar el segmento de solución, luego se recurre a otros métodos como el de
la Bisección.
El método de la Bisección simplemente comprueba si la solución se encuen-
tra a la mitad del segmento. De ser así el proceso concluye, caso contrario
continúa la búsqueda en la mitad del segmento donde se encuentra la solu-
ción. Gráficamente el proceso que sigue es el que se muestra en la figura:

segmento original

nuevo segmento

x1 x3 x2 x
0

Valor de prueba

El lugar donde se encuentra la solución se determina comparando los sig-


nos de f(x1) con f(x3): si tienen signos diferentes, la solución se encuen-
tra en la mitad izquierda (entre x1 y x3), caso contrario se encuentra en la
mitad derecha (entre x3 y x2).
La ecuación para el cálculo del nuevo valor de prueba (“x3”) se deduce a
partir de la gráfica:
x2 – x1
x 3= +x 1
2
x 2 – x1 +2 x 1
x 3=
2
x 1+ x 2
x 3= (3.1)
2
Para comprender mejor el proceso se resolverá, una vez más, manualmente
la función:
- 38 - Hernán Peñaranda V.

0.36
f (x )=( 52+3 √ x−8x 0.8 ) − x=0
Primero se programa la función:
>> function r=fx(x) r=(52+3*sqrt(x)-8*x^0.8)^0.36-x; end
Se encuentra el segmento de solución con “incr1”:
>> incr1($fx,1.1,1,100)
x1 = 3.1
Por lo tanto la solución se encuentra entre “x 1=3.1” y “x2=4.1”. Se calcu-
la el valor de la función en “x1” y el nuevo valor de “x”:
>> x1=3.1; x2=4.1; f1=fx(x1), x3=(x1+x2)/2, f3=fx(x3)
f1 = 0.5869622889544366
x3 = 3.5999999999999996
f3 = 0.011149591389499225
Como “f1” y “f3” tienen el mismo signo la solución se encuentra a la de-
recha del segmento:
>> x1=x3; x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.8499999999999996
f3 = -0.27724585235700516
Ahora “f1” (positivo) y “f3” tienen diferente signo, por lo tanto la so-
lución se encuentra a la izquierda del segmento:
>> x2=x3; x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.7249999999999996
f3 = -0.1330032269091932
Se prosigue de esta manera, llevando a cabo uno de los dos cambios de va-
riables mostrados. Para evitar el tener que hacer el cambio manualmente, se
puede emplear la estructura if-then-else:
>> if f1*f3<0 x2=x3; else x1=x3; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6624999999999996
f3 = -0.06091589970912015
Ejecutando esta instrucción algunas veces más se obtiene:
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6312499999999996
f3 = -0.024880463221144566
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6156249999999996
f3 = -0.0068647680102214
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6078124999999996
f3 = 0.002142578061902878
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6117187499999996
f3 = -0.002361053305552474
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6097656249999996
f3 = -1.0922721411521508E-4
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6087890624999996
f3 = 0.0010166780246407825
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6092773437499996
ECUACIONES ALGEBRAICAS - 2 - 39 -

f3 = 4.5372605559768076E-4
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6095214843749996
f3 = 1.722495833433868E-4
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6096435546874996
f3 = 3.151122526690031E-5
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6097045898437496
f3 = -3.885798426050968E-5
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6096740722656246
f3 = -3.6733769555041818E-6
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.609658813476562
f3 = 1.391892479096768E-5
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.6096664428710934
f3 = 5.122774076493641E-6
>> if f1*f3<0 x2=x3; else x1=x3;; end x3=(x1+x2)/2, f3=fx(x3)
x3 = 3.609670257568359
f3 = 7.246986006848033E-7
Como se puede observar el método converge lentamente hacia la solución
(el valor de la función se acerca cada vez más a cero). A pesar de ello,
este método es por lo general más rápido (requiere menos iteraciones) que
el método incremental.

3.2.1. Algoritmo y código

El algoritmo del método es el siguiente:


biseccion : Método de la Bisección.

recibir f,x 1,x2,err,li f: Función a resolver (f(x)=0).


x1,x 2: Valores inicial y final .
err: Error permitido.
c= 1 li: Límite de iteraciones.

f1 = f(x1)

x 3 =(x 1+x2)/2
[|x2/x3-1|<err]

f3 = f(x3)

[else] [|f3|<err]
devolver x 3
[else] [c = li]
Límite de
c = c+1 iteraciones
mostrar x3 alcanzado.
[else] [f1*f3< 0]
generar error
x1 = x3 x2 = x 3

Y el código respectivo es:


- 40 - Hernán Peñaranda V.

function x3=biseccion(f,x1,x2,err,li)
c=1; f1=f(x1);
while 1
x3=(x1+x2)/2;
printf("%f: x=%f\n",c,x3);
if abs(x2/x3-1)<err break; end
f3=f(x3);
if abs(f3)<err break; end
if c++ == li error("error biseccion: %f\n",x3); end
if f1*f3<0 x2=x3; else x1=x3; end
end
end
Llamando al método con la función “fx” y los valores iniciales determina-
dos previamente (x1=3.1, x2=4.1), para un error igual a 1e-14, se obtiene:
>> biseccion($fx,3.1,4.1,1e-14,100)
1.0: x=3.5999999999999996
2.0: x=3.8499999999999996
3.0: x=3.7249999999999996
4.0: x=3.6624999999999996
5.0: x=3.6312499999999996
6.0: x=3.6156249999999996
7.0: x=3.6078124999999996
8.0: x=3.6117187499999996
9.0: x=3.6097656249999996
10.0: x=3.6087890624999996
11.0: x=3.6092773437499996
12.0: x=3.6095214843749996
13.0: x=3.6096435546874996
14.0: x=3.6097045898437496
15.0: x=3.6096740722656246
16.0: x=3.609658813476562
17.0: x=3.6096664428710934
18.0: x=3.609670257568359
19.0: x=3.609672164916992
20.0: x=3.6096712112426754
21.0: x=3.6096707344055172
22.0: x=3.6096709728240963
23.0: x=3.6096708536148068
24.0: x=3.6096709132194515
25.0: x=3.609670883417129
26.0: x=3.6096708983182904
27.0: x=3.6096708908677098
28.0: x=3.6096708871424195
29.0: x=3.6096708852797743
30.0: x=3.609670886211097
31.0: x=3.6096708857454356
32.0: x=3.6096708859782662
33.0: x=3.6096708860946816
34.0: x=3.6096708861528892
35.0: x=3.6096708861237854
36.0: x=3.6096708861383373
37.0: x=3.6096708861456133
38.0: x=3.6096708861419753
39.0: x=3.6096708861401563
40.0: x=3.609670886139247
41.0: x=3.6096708861397016
42.0: x=3.609670886139929
ECUACIONES ALGEBRAICAS - 2 - 41 -

43.0: x=3.6096708861400426
x3 = 3.6096708861400426
Como se puede ver, bisección requiere 43 iteraciones para obtener el re-
sultado con una exactitud o precisión de 14 dígitos, lo que como se dijo
son todavía muchas iteraciones, pero menos que las requeridas por el método
incremental.
Una vez probado el programa la impresión de resultados intermedios puede
ser suprimido (anteponiendo % delante de “printf”).

3.2.2. Ejemplos

3. Encuentre las soluciones de la siguiente función con un error igual a


1x10-10 y un límite de 50 iteraciones.
f ( x 1 )=L1⋅x1 +V 1⋅y 1 – C 0=0
L
L1 = c
1− x1
V 1=M – L1
y 1=1.42 x 1
L c =L0 (1−x 0)
M = L0+V 0
C 0=L 0 x 0+V 0 y 0
L 0=300 ; x 0=0 ;
V 0=100 ; y 0=0.2
Como de costumbre, primero se programa la función:
function r=fx6(x1)
L0=300; x0=0; V0=100; y0=0.2;
C0=L0*x0+V0*y0;
M=L0+V0;
Lc=L0*(1-x0);
y1=1.42*x1;
L1=Lc/(1-x1);
V1=M-L1;
r=L1*x1+V1*y1-C0;
end
Como ya se vio en el tema previo esta función tiene dos solucio-
nes. Se encuentra la primera comenzando a buscar en 0.001 con un in-
cremento igual a 0.001:
>> incr1($fx6,0.01,0.01,50)
x1 = 0.04
Por lo tanto los valores límite son: x1=0.04 y x2=0.05:
>> biseccion($fx6,0.04,0.05,1e-10,50)
x3 = 0.04587771997554227
Para la segunda solución se comienza la búsqueda después de la primera
solución, en este caso con un incremento igual a 0.1:
>> incr1($fx6,0.05,0.1,50)
x1 = 0.7499999999999999
Entonces los valores límite son: x1=0.75 y x2=0.85:
- 42 - Hernán Peñaranda V.

>> biseccion($fx6,0.75,0.85,1e-10,50)
x3 = 0.7675025617238134
Que son las dos soluciones buscadas.
Puesto que el método de la bisección sólo requiere dos valores a ambos
lados de la solución, no es imprescindible el uso del método incremental,
dichos valores pueden ser obtenidos también de la gráfica. Así por ejemplo,
analizando la gráfica de la función:
>> x6=0:0.01:0.8; y6=fx6(x6); plot(x6,y6)

Se ve que la primera solución se encuentra entre 0 y 0.1, mientras que la


segunda entre 0.7 y 0.8. Empleando estos valores como valores iniciales y
finales en el método de la bisección se obtiene:
>> biseccion($fx6,0,0.1,1e-10,50)
x3 = 0.04587771997612436
>> biseccion($fx6,0.7,0.8,1e-10,50)
x3 = 0.7675025617238134
Que son los resultados calculados previamente (con del margen de error
permitido por supuesto).
4. Encuentre la solución de la función del ejemplo 1 por el método de la
bisección con un error igual a 1x10-12. Encuentre los valores inicial y
final con el método incremental.
f ( p)=cos (k⋅l )⋅cosh (k⋅l)+1=0
2 p
k =
a
2 E⋅I⋅g
a=
A⋅y
6
l =120 ; I =170.6 ; E=3×10
ECUACIONES ALGEBRAICAS - 2 - 43 -

y=0.066 ; A=32 ; g=386 ;


El programa de la función es el mismo que el del ejemplo:
function r=fx4(p)
l=120; I=170.6; E=3e6; y=0.066; A=32; g=386;
a=sqrt(E*I*g/(A*y));
k=sqrt(p/a);
r=cos(k*l)*cosh(k*l)+1;
end
Buscando el segmento de solución a partir de p=10, con un incremento de
10 se obtiene:
>> incr1($fx4,10,10,100)
x1 = 70.0
Por lo tanto la solución está entre 70 y 80:
>> biseccion($fx4,70,80,1e-12,100)
x3 = 74.67669629018928
Que es la solución buscada.

3.2.3. Ejercicios

3. Encuentre la o las soluciones de la siguiente función. Estime los valo-


res iniciales mediante la gráfica de la función.
x
f (x )=2x+1 – e =0
4. Encuentre la solución de la siguiente ecuación, con 7 dígitos de preci-
sión, empleando el método de Wegstein. Estime el valor inicial elabo-
rando la gráfica de la función.
P⋅V V Ω b
f (V )= – + a F
R⋅T V – b Ωb V +b
Ωa RT c
b=
Pc
1 2
F=
Tr [1+( 0.480+1.574 ω−0.176 ω 2 ) (1−T 0.5
r )]
T
T r=
Tc
−1
Ωa=[ 9 ( 2 1/ 3−1 ) ]
2 1/ 3−1
Ωb=
3
T =400 ; P=20 ; T c =190.6 ;
P c =45.4 ; ω=0.008 ; R=0.08206

3.3. MÉTODO DE REGULA-FALSI (INTERPOLACIÓN LINEAL)

Al igual que el método de la Bisección, este método comienza con un


segmento de solución conocido, sin embargo, en este caso el nuevo valor de
prueba (x3) se calcula por interpolación lineal, tal como se muestra en la
figura de la siguiente página.
En esencia difiere del método de la Bisección simplemente por la forma en
que se encuentra en nuevo valor de prueba.
- 44 - Hernán Peñaranda V.

segmento original

nuevo segmento

0 x1 x3 x2
x

Nuevo valor en la
siguiente iteración
Nuevo valor
de prueba

La ecuación para el cálculo del valor de prueba “x3”, se deduce de la in-


tersección entre la línea que pasa por los puntos (x1,f1), (x2,f2) y la recta
x=0. En dichos puntos se tiene:
f 1=a+bx1
f 2=a+bx 2
Restando ambas expresiones y efectuando algunas operaciones se tiene:
f 1 – f 2=b( x 1 – x 2)
f 1− f 2 (3.2)
b=
x1 – x 2
Sustituyendo esta expresión en la primera ecuación y haciendo algunas
operaciones resulta:
f 1– f 2
f 1=a+ x
x1 – x2 1
f 1 x1 – f 1 x 2− f 1 x1 + f 2 x1
a=
x 1−x 2
f 2 x1 – f 1 x2
a= (3.3)
x1 – x 2
Reemplazando (3.2) y (3.3) en la ecuación general de la línea recta
(f=a+bx), se tiene:
f 2 x1 − f 1 x 2 f 1− f 2
f= + x
x 1− x 2 x 1−x 2
ECUACIONES ALGEBRAICAS - 2 - 45 -

En la intersección f=0, por lo tanto:


f 2 x1 – f 1 x2
x 3= (3.4)
f 2− f 1
Que es la ecuación del método de Regula Falsi.
Una vez más, para comprender el proceso que sigue el método, se encontra-
rá una solución aproximada a la ecuación:
0.36
f (x )=( 52+3 √ x−8x 0.8 ) − x=0
Cuyo programa es:
>> function r=fx(x) r=(52+3*sqrt(x)-8*x^0.8)^0.36-x; end
Buscando el segmento de solución desde 1.1 con un incremento de 0.1, se
obtiene:
>> incr1($fx,1.1,0.1,100)
x1 = 3.6000000000000023
Por lo tanto la solución está entre 3.6 y 3.7:
>> x1=3.6;x2=3.7;f1=fx(x1),f2=fx(x2);x3=(f2*x1-f1*x2)/(f2-f1),f3=fx(x3)
f1 = 0.01114959138949878
x3 = 3.609668793635898
f3 = 2.4125089410631517E-6
Puesto que “f1” y “f3” tienen el mismo signo la solución se encuentra en
el segmento derecho. Determinando el segmento con la estructura if-then-el-
se y repitiendo algunas veces el proceso se obtiene:
>> if f1*f3<0 x2=x3;f2=f3; else x1=x3;f1=f3; end x3=(f2*x1-f1*x2)/(f2-
f1), f3=fx(x3)
x3 = 3.6096708856866337
f3 = 5.227569488397421E-10
>> if f1*f3<0 x2=x3;f2=f3; else x1=x3;f1=f3; end x3=(f2*x1-f1*x2)/(f2-
f1), f3=fx(x3)
x3 = 3.6096708861399516
f3 = 1.127986593019159E-13
>> if f1*f3<0 x2=x3;f2=f3; else x1=x3;f1=f3; end x3=(f2*x1-f1*x2)/(f2-
f1), f3=fx(x3)
x3 = 3.6096708861400493
f3 = 8.881784197001252E-16
>> if f1*f3<0 x2=x3;f2=f3; else x1=x3;f1=f3; end x3=(f2*x1-f1*x2)/(f2-
f1), f3=fx(x3)
x3 = 3.6096708861400497
f3 = 4.440892098500626E-16
>> if f1*f3<0 x2=x3;f2=f3; else x1=x3;f1=f3; end x3=(f2*x1-f1*x2)/(f2-
f1), f3=fx(x3)
x3 = 3.60967088614005
f3 = 0.0
Como de puede ver, el método de Regula Falsi encuentra la solución exacta
en tan solo 6 iteraciones (mientras que la bisección requiere más de 40).
Aunque no siempre existe tanta diferencia entre los dos métodos (depende de
la forma de la curva), en general el método de Regula-Falsi requiere menos
iteraciones que el método de la Bisección.

3.3.1. Algoritmo y código

El algoritmo del método se muestra en la siguiente página.


- 46 - Hernán Peñaranda V.

regulaFalsi: Método de Regula Falsi.

recibir f, x1, x2, err, li f: Función a resolver (f(x) = 0)


x1,x2: Límites inicial y final .
err: Error permitido.
c=1 li: Límite de iteraciones.

x p = x1

f1 = f(x1)

f2 = f(x2)

x 3 =(f2*x1-f1*x2)/(f2-f1)
[else] [|xp/x3-1|<err]

f3 = f(x3)
[|f3|<err]
devolver x3
[else]
[else] [c = li]

c = c+1 Límite de
iteraciones
[else] [f1*f3<0] mostrar x3
alcanzado

x1 = x 3 x2 = x3
generar error

f1 = f3 f2 = f3

xp = x 3

Siendo el código respectivo:


function x3=refa(f,x1,x2,err,li)
c=1; xp=x1; f1=f(x1); f2=f(x2);
while 1
x3=(f2*x1-f1*x2)/(f2-f1);
printf("%f: x= %f\n",c,x3);
if abs(x3/xp-1)<err break; end
f3=f(x3);
if abs(f3)<err break; end
if c++ == li error("error refa: %f\n",x3); end
if f1*f2<0 x2=x3;f2=f3; else x1=x3;f1=f3; end
xp=x3;
end
end
Llamando a la función con “fx”, los límites 3.6 y 3.7, un error igual a
1e-14 y un límite de 50 iteraciones, se obtiene:
>> refa($fx,3.6,3.7,1e-14,100)
1.0: x= 3.609668793635898
2.0: x= 3.609670886187865
3.0: x= 3.6096708861400506
x3 = 3.6096708861400506
Una vez comprobado el programa se puede anular la impresión de resultados
intermedios (escribiendo un % delante de “printf”).
ECUACIONES ALGEBRAICAS - 2 - 47 -

3.3.2. Ejemplos

5. Encuentre la solución de la siguiente función empleando el método de Re-


gula Falsi con un error de 12 dígitos. Encuentre los valores iniciales
con el método incremental.
−1
f ( x )=cos (x )+( 1+ x 2) =0
Como de costumbre, primero se programa la función:
function r=e1rf(x) r=cos(x)+1/(1+x^2); end
Se encuentra el segmento de solución:
>> incr1($e1rf,0.1,0.1,100)
x1 = 1.8000000000000005
Y se encuentra la solución con Regula Falsi:
>> refa($e1rf,1.8,1.9,1e-12,50)
x3 = 1.8073753791829055
6. Encuentra la solución de la siguiente función, con un error de 15 dígi-
tos, empleando el método de Regula Falsi. Encuentre los valores inicia-
les con el método incremental.
f ( y a1)= Ln+V 1 – M =0
y b1=2 y a1+ y 2a1+3.44 y 3a1
2.2
x bn=2.2+5.1 x an – 7.2 x an
C y – C b0 y a1
L n= a0 b1
x an y b1 – x bn y a1
C – L n x an
V 1= a0
y a1
x an=0.12 ; M =32.1 ;
C a0 =20.2 ; C b0=3.42 ;
Como de costumbre, primero se programa la función:
function r=e2rf(ya1)
xan=0.12; M=32.1; Ca0=20.2; Cb0=3.42;
xbn=2.2+5.1*xan-7.2*xan^2.2;
yb1=2*ya1+ya1^2+3.44*ya1^3;
Ln=(Ca0*yb1-Cb0*ya1)/(xan*yb1-xbn*ya1);
V1=(Ca0-Ln*xan)/ya1;
r=Ln+V1-M;
end
Se encuentra el segmento de solución con el método incremental:
>> incr1($e2rf,0.1,0.1,100)
x1 = 0.4
Y se calcula la solución con Regula Falsi:
>> refa($e2rf,0.4,0.5,1e-15,50)
x3 = 0.411748600835696

3.3.3. Ejercicios

5. Encuentre la solución de la siguiente función por el método de Regula


- 48 - Hernán Peñaranda V.

Falsi. Estime los valores iniciales empleando el método incremental.


z+3 3.1
f ( z )=ln ( z )+e −z −42=0
6. Encuentre la o las soluciones de la siguiente función con 9 dígitos de
precisión (o exactitud) y un límite de 50 iteraciones. Estime los valo-
res iniciales empleando el método incremental.

15 y + 20 x 2 − x 3 = 1500
x
9 z − 1.5 x 2 + e 2 = 300
y 2 − z 3 − 5 x = 166.81

3.4. MÉTODO DE LA SECANTE

En este método se asumen dos valores iniciales, los cuales por lo general
son dos valores consecutivos y con los mismos se calcula un nuevo valor de
prueba "x3" por interpolación o extrapolación lineal, tal como se muestra en
la figura:

Puntos iniciales

Nuevo valor
de prueba

x6 x4
0 x1 x 2 x5 x3
Valores iniciales
x

Solución

Nuevo punto

Entonces se comprueba si el nuevo valor de prueba corresponde a la solu-


ción y de ser así el proceso concluye, caso contrario se repite empleando
siempre los dos últimos puntos (tal como se ve en la figura).
La ecuación para el cálculo del nuevo valor de prueba "x 3" es la misma que
de Regula Falsi:
f 2 x1 – f 1 x2
x 3= (3.4)
f 2– f 1
Sin embargo, el proceso es más sencillo, pues siempre se trabaja con los
dos últimos valores (no se busca el segmento de solución). Para comprender
mejor el proceso se resolverá (una vez más) la ecuación:
ECUACIONES ALGEBRAICAS - 2 - 49 -

0.36
f (x )=( 52+3 √ x−8x 0.8 ) − x=0
Cuyo programa es:
>> function r=fx(x) r=(52+3*sqrt(x)-8*x^0.8)^0.36-x; end
Se asumirán como valores iniciales dos valores consecutivos: x 1=1.1 y
x2=1.2 (si se conocen los valores a ambos lados de la solución, entonces de-
berían emplearse dichos valores):
>> x1=1.1; x2=1.2; f1=fx(x1); f2=fx(x2); x3=(f2*x1-f1*x2)/(f2-f1),
f3=fx(x3)
x3 = 3.609447345727945
f3 = 2.577261123910546E-4
Ahora se hace el cambio de variables y se calcula un nuevo valor de “x”:
>> x1=x2;x2=x3;f1=f2;f2=f3;f2=fx(x2); x3=(f2*x1-f1*x2)/(f2-f1),f3=fx(x3)
x3 = 3.609671616839671
f3 = -8.424448663113537E-7
Como se ve, con una sola repetición la función ya se acerca a cero. Repi-
tiendo el proceso unas cuantas veces más, se obtiene:
>> x1=x2;x2=x3;f1=f2;f2=f3;f2=fx(x2); x3=(f2*x1-f1*x2)/(f2-f1),f3=fx(x3)
x3 = 3.609670886139664
f3 = 4.454214774796128E-13
>> x1=x2;x2=x3;f1=f2;f2=f3;f2=fx(x2); x3=(f2*x1-f1*x2)/(f2-f1),f3=fx(x3)
x3 = 3.6096708861400497
f3 = 4.440892098500626E-16
>> x1=x2;x2=x3;f1=f2;f2=f3;f2=fx(x2); x3=(f2*x1-f1*x2)/(f2-f1),f3=fx(x3)
x3 = 3.60967088614005
f3 = 0.0
Que es el resultado exacto (encontrado en tan solo 4 iteraciones).

3.4.1. Algoritmo y código

El algoritmo del método se muestra en la siguiente página y el código


respectivo es:
function x3=secante(f,x1,x2,err,li)
c=1; f1=f(x1); f2=f(x2);
while 1
x3=(f2*x1-f1*x2)/(f2-f1);
printf("%f: x= %f\n",c,x3);
if abs(x2/x3-1)<err break; end
f3=f(x3);
if abs(f3)<err break; end
if c++ == li error("error secante: %f\n",x3); end
x1=x2; f1=f2; x2=x3; f2=f3;
end
end
Llamando a “secante” con la función “fx” se obtiene:
>> secante($fx,1.1,1.2,1e-15,50)
1.0: x= 3.609447345727945
2.0: x= 3.609671616839671
3.0: x= 3.609670886139664
4.0: x= 3.6096708861400497
x3 = 3.6096708861400497
- 50 - Hernán Peñaranda V.

secante: Método de la Secante.

f: Función a resolver f(x)=0).


recibir f,x1,x2,err,li x 1,x 2: Valores iniciales asumidos .
err: Error permitido.
li: Límite de iteraciones.
c=1

f1 = f(x1)

f2 = f(x2)

x3 = (f2*x 1-f1*x2)/(f2-f1)

[|x2/x3-1|<err]
[else]
f3 = f(x3)

[else] [|f3|<err]
devolver x3
[else] [c = li]

c = c+1

mostrar x3
x1 = x 2

f1 = f2 generar error

x2 = x 3

f2 = f3

Como de costumbre, una vez probada la lógica se puede suprimir la impre-


sión de resultados intermedios (escribiendo % delante de “printf”).

3.4.2. Ejemplos

7. Encuentre la solución, de la ecuación que se presenta al pie de la pre-


gunta, empleando el método de la secante con un error de 12 dígitos.
f (x )=sin( x) – 2cos (x )=0
Se programa la función:
function r=e1ms(x)
r=sin(x)-2*cos(x);
end
Y se llama al método de la secante, obteniéndose así la solución:
>> secante($e1ms,1.1,1.2,1e-12,50)
x3 = 1.1071487177940906
8. Encuentre la solución, de la función que se presenta al pie de la pre-
gunta, empleando el método de la secante con un error de 10 dígitos.
f ( x 1 )=L1⋅x1 +V 1⋅y 1 – C 0=0
Lc
L1 =
1− x1
V 1=M – L1
ECUACIONES ALGEBRAICAS - 2 - 51 -

y1 =1.42 x1
Lc =L0 (1−x 0 )
M = L0+V 0
C 0= L0 x 0+V 0 y 0
L0=300 ; x 0 =0 ;
V 0 =100 ; y 0 =0.2
Esta función ya fue resuelta por el método de la bisección siendo su pro-
grama:
function r=fx6(x1)
L0=300; x0=0; V0=100; y0=0.2;
C0=L0*x0+V0*y0;
M=L0+V0;
Lc=L0*(1-x0);
y1=1.42*x1;
L1=Lc/(1-x1);
V1=M-L1;
r=L1*x1+V1*y1-C0;
end
Como se vio en dicho método existen 2 soluciones, para encontrar la pri-
mera se dan valores cercanos a 0.1:
>> secante($fx6,0.1,0.12,1e-10,50)
x3 = 0.04587771997385179
Y para la segunda, cercanos a 0.7:
>> secante($fx6,0.7,0.71,1e-10,50)
x3 = 0.7675025617162897

3.4.3. Ejercicios

7. Encuentre la solución de la siguiente función por el método de la secan-


te con un error de 10 dígitos. Estime los valores iniciales mediante la
gráfica de la función.

f ( x) = x3 − 1.95 x 2 − 6.77 x + 9.44 = 0


8. Encuentre la solución de la siguiente función por el método de la secan-
te con un error de 14 dígitos. Estime los valores iniciales mediante la
gráfica de la función.

2 x 2+5 x y – 4 x=115
x+ y
e 5
+ x 2 y 2 – 70 y=15
3.5. MÉTODO DE NEWTON – RAPHSON

El método de Newton – Raphson es probablemente el método más empleado en


la práctica para resolver ecuaciones algebraicas con una incógnita. En este
método se asume un valor inicial (x1) y con el mismo se calcula la derivada
de la función, que como se ve en la figura, es la tangente a la curva. En-
tonces, en la intersección de la tangente con la recta f=0, se encuentra
el nuevo valor de prueba (x2). Si dicho valor corresponde a la solución el
proceso concluye, caso contrario se repite.
- 52 - Hernán Peñaranda V.

f(x1)

f(x2)

Solución

α
x
0 x2 x1

La ecuación para el cálculo del nuevo valor de prueba (x2) puede ser dedu-
cida del triángulo que forman la tangente con los segmentos:
f ( x 1)−0
tan (α)= f '( x1 )=
x1 – x 2
f ( x 1)
x 1 – x 2=
f '(x 1)
f ( x 1)
x 2= x 1− (3.5)
f '( x 1 )
Que es la ecuación del método de Newton – Raphson. Como se puede ver
implica el cálculo de la derivada de la función.
Si bien en ocasiones el cálculo de la derivada analítica puede ser
simple, en otros es muy complejo e incluso imposible (en funciones
compuestas por ejemplo), por lo que la mejor alternativa radica en el
cálculo numérico de la derivada.
Para ello, se empleará la fórmula de diferencia central de segundo orden
(cuya deducción se verá en un tema posterior):
f ( x+h)− f ( x−h)
f ' ( x)= (3.6)
2h
Donde “h” es el incremento de “x”. En teoría mientras más pequeño sea el
valor de “h” más exacto será el resultado calculado con la ecuación. En la
práctica, sin embargo, no es así (debido a los errores de redondeo). Un va-
lor que resulta adecuado para “h” en la mayoría de los casos es:
h=x 1×10−6 .
Para comprender mejor como opera el método, se resolverá (una vez más) la
ecuación:
0.36
f (x )=( 52+3 √ x−8x 0.8 ) − x=0
Cuyo programa es:
>> function r=fx(x) r=(52+3*sqrt(x)-8*x^0.8)^0.36-x; end
Para calcular la derivada se programa la ecuación (3.6):
ECUACIONES ALGEBRAICAS - 2 - 53 -

>> function r=df(f,x) h=x*1e-6; r=(f(x+h)-f(x-h))/(2*h); end


Entonces comenzando con un valor inicial igual a 1.1, se calcula el valor
de la función (f1) y el nuevo valor de “x” (x2):
>> x1=1.1; f1=fx(x1), df1=df($fx,x1); x2=x1-f1/df1
f1 = 2.884055387788424
x2 = 3.608916104150614
Entonces se repite el proceso empleando el valor calculado (“x 2”) como
nuevo valor asumido (“x1”):
>> x1=x2; f1=fx(x1), df1=df($fx,x1); x2=x1-f1/df1
f1 = 8.702085744038968E-4
x2 = 3.6096708874877925
Repitiendo el proceso unas cuantas veces más:
>> x1=x2; f1=fx(x1), df1=df($fx,x1); x2=x1-f1/df1
f1 = -1.5538517139646046E-9
x2 = 3.6096708861400497
>> x1=x2; f1=fx(x1), df1=df($fx,x1); x2=x1-f1/df1
f1 = 4.440892098500626E-16
x2 = 3.60967088614005
>> x1=x2; f1=fx(x1), df1=df($fx,x1); x2=x1-f1/df1
f1 = 0.0
x2 = 3.60967088614005
Se obtiene la solución exacta (en tres iteraciones).
El método de Newton – Raphson es, de los métodos estudiados, el que menos
iteraciones requiere y es por esa razón el método que más se emplea en la
práctica.

3.5.1. Algoritmo y código

El algoritmo del método es el siguiente:


newton: método de Newton - Raphson

f: Función a resolver (f(x)=0).


recibir f, x1, err, li
x1: Valor asumido.
err: Error permitido.
c =1 li: Límite de iteraciones.

f1 = f(x 1)

[|f1|<err]

h = x 1*10-6

df =(f(x1+h)-f(x1-h))/(2h)

x2 =x 1-f1/df devolver x 1

[else] [|x1/x 2-1|<err]


Límite de
[else] [ c = li]
iteraciones
alcanzado.
c = c+1 mostrar x2
devolver x2
x1 = x2 generar error
- 54 - Hernán Peñaranda V.

Siendo el código respectivo:


function x2=newton(f,x1,err,li)
c=1;
while 1
f1=f(x1);
if abs(f1)<err break; end
h=x1*1e-6;
df=(f(x1+h)-f(x1-h))/(2*h);
x2=x1-f1/df;
printf("%f: x= %f\n",c,x2);
if abs(x1/x2-1)<err break; end
if c++ == 100 error("error newton: %f\n",x2); end
x1=x2;
end
end
Llamando al método con la función “fx”, se obtiene:
>> newton($fx,1.1,1e-16,30)
1.0: x= 3.608916104150614
2.0: x= 3.6096708874877925
3.0: x= 3.6096708861400497
4.0: x= 3.60967088614005
x2 = 3.60967088614005
Como de costumbre, una vez probado el programa se puede suprimir la
impresión de resultados intermedios (escribiendo % delante de “printf”).

3.5.2. Ejemplos

9. Calcule empleando el método de Newton - Raphson, con un error de 9 dígi-


tos, la altura “h” a la que se encuentra sumergida la esfera de densidad
“d” = 0.4, 0.6, 0.9, 0.97, que se muestra en la figura, como una función
de su radio “r”.

El peso de la esfera es 4/3(πr3d) y el volumen del segmento sumergido es


(π/3)(3rh2-h3). Por el principio del empuje se sabe que el peso de la esfera
debe ser igual al volumen de agua desplazado, entonces, asumiendo que la
densidad del agua es 1, se tiene:
4 3
π d = π ( 3⋅r⋅h – h )
2 3

3 3
Si “x” es la fracción del radio que está sumergida, se cumple que:
x⋅r=h
Reemplazando esta relación en la anterior ecuación se tiene:
4 3
π r d = π ( 3⋅r⋅x 2 r 2 – x 3 r 3 )
3 3
ECUACIONES ALGEBRAICAS - 2 - 55 -

4 3
π r d = π r ( 3⋅x – x )
3 2 3
3 3
f (x )=x 3 – 3 x 2+4d=0
Por lo tanto, esta es la ecuación que debe ser resuelta para dar
respuesta al problema.
Dado que en este caso se trata de un problema físico, no sólo matemático,
es necesario tomar en cuenta que la densidad “d” de la esfera no puede ser
mayor a 1, pues de ser así la esfera se sumergiría completamente llegando
hasta el fondo del recipiente.
La imposibilidad de crear variables globales y sub-funciones en Jasymca,
obliga a crear una función, donde sea necesario modificar manualmente el
valor de la densidad “d”. Así para d=0.4 la función es:
>> function r=e1nr(x) d=0.4; r=x^3-3*x^2+4*d; end
Llamando a “newton” con esta función se obtiene:
>> newton($e1nr,1.1,1e-9,30)
x2 = 0.8658621542954691
Cambiando el valor de “d” a 0.6 y volviendo a llamar a “newton” se obtie-
ne:
>> function r=e1nr(x) d=0.6; r=x^3-3*x^2+4*d; end
>> newton($e1nr,1.1,1e-9,30)
x2 = 1.1341378457045366
De la misma forma se obtienen las otras dos soluciones:
>> function r=e1nr(x) d=0.9; r=x^3-3*x^2+4*d; end
>> newton($e1nr,1.1,1e-9,30)
x2 = 1.6083997884757761

>> function r=e1nr(x) d=0.97; r=x^3-3*x^2+4*d; end


>> newton($e1nr,1.1,1e-9,30)
x2 = 1.7927103214383104
Como era de esperar, la altura sumergida incrementa con la densidad apro-
ximándose a 2 veces el radio a medida que la densidad se aproxima a 1.
10. Resuelva, empleando el método de Newton - Raphson con un error de 14 dí-
gitos, el valor de “p” de la siguiente función:
f ( p)=cos (k⋅l )⋅cosh (k⋅l)+1=0
2 p
k =
a
E⋅I⋅g
a 2=
A⋅y
l=120 ; I =170.6 ; E =3×10 6
y=0.066 ; A=32 ; g=386 ;
Esta función ya fue resuelta con el método incremental, siendo su progra-
ma:
function r=fx4(p)
l=120; I=170.6; E=3e6; y=0.066; A=32; g=386;
a=sqrt(E*I*g/(A*y));
k=sqrt(p/a);
r=cos(k*l)*cosh(k*l)+1;
- 56 - Hernán Peñaranda V.

end
Llamando a “newton” con esta función se obtiene:
>> newton($fx4,55.1,1e-14,30)
x2 = 74.67669629022704
Si se emplea un valor inicial alejado de la solución conocida, se obtie-
ne:
>> newton($fx4,1.1,1e-14,30)
x2 = 2567.837445653622
Que es otra de las soluciones de la función.

3.5.3. Ejercicios

9. Encuentre la o las soluciones de la siguiente función con 9 dígitos de


precisión (o exactitud) y un límite de 50 iteraciones. Estime los valo-
res iniciales mediante la gráfica de la función.

15 y + 20 x 2 − x 3 = 1500
x
9 z − 1.5 x 2 + e 2 = 300
y 2 − z 3 − 5 x = 166.81
10. Encuentre la solución de la siguiente ecuación, con 7 dígitos de preci-
sión, empleando el método de Wegstein. Estime el valor inicial elabo-
rando la gráfica de la función.
P⋅V V Ω b
f (V )= – + a F
R⋅T V – b Ωb V +b
Ωa RT c
b=
Pc
1 2
F=
Tr [1+( 0.480+1.574 ω−0.176 ω 2 ) (1−T 0.5
r )]
T
T r=
Tc
−1
Ωa=[ 9 ( 2 1/ 3−1 ) ]
2 1/ 3−1
Ωb=
3
T =400 ; P=20 ; T c =190.6 ;
P c =45.4 ; ω=0.008 ; R=0.08206

Вам также может понравиться