Sie sind auf Seite 1von 24

UNIVERSIDAD POLITÉCNICA ESTATAL DEL CARCHI

CARRERA DE COMPUTACIÓN

LABORATORIO DE MÉTODOS NUMÉRICOS

DOCENTE: Msc. Samuel Lascano Rivera

ESTUDIANTE: Guerrero Byron

PERÍODO ACADÉMICO: Junio - septiembre 2020

NIVEL: Cuarto “A-M”

FECHA: 06-07-2020

PRÁCTICA N°: 3

TEMA: Ceros en funciones algebraicas utilizando diferentes Métodos Numéricos.

1. INTRODUCCIÓN

Los ceros o raíces de una función dada son exactamente los puntos en los que la

gráfica se corta en el eje X. Si una expresión algebraica es relativamente compleja,

resulta complicada por lo general encontrar raíces exactas. En algunos casos las

ecuaciones tienen coeficientes conocidos de manera aproximada por lo que, no sería

necesario encontrar las raíces exactas de la ecuación. es por ello que tiene mayor

importancia los procedimientos de cálculo aproximado de raíces de una ecuación,

como también la estimación de su grado de exactitud mediante métodos para obtener

sus raíces.

2. OBJETIVO

- Determinar los conceptos de los métodos numéricos para hallar los ceros o raíces
- Comprender los métodos para poder encontrar las raíces de una funcion
- Realizar ejercicios en Matlab
3. MATERIALES, EQUIPOS Y SOFTWARE.

Tabla 1 MATERIALES, EQUIPOS Y SOFTWARE

MATERIALES EQUIPOS SOFTWARE

 Suministros de oficina  Computador  Matlab


 Internet
Fuente: Propia.

4. PROCEDIMIENTO O DESARROLLO

Para preceder a encontrar las raices de una funcion se toman diferentes procesos en

diferentes métodos tales como:

 Método de Sucesiones de Sturm

 Metodo de la regla Falsa

 Método de Newton Raphson

 Metodo De la Secante

Supónganos que tenemos la división de polinomios:

8𝑥 5 + 3𝑥 4 + 2𝑥 2 + 4𝑥 − 6
𝑥+1

Si deseamos resolver la división solo aplicando conocimientos de algebra lo que haríamos


seria llevar a cabo una división polinómica, sin embargo es posible realizar la misma tarea
pero de una forma más simple, para casos específicos en los que se tiene la división de
un polinomio entre un monomio resulta conveniente y practico representar ambos
polinomios de una forma resumida, ignorando en la escritura las variables que se
encuentran elevadas a las potencias correspondientes y escribiendo solo los coeficientes
que acompañan a las variable. Así pues, el polinomio

8𝑥 5 + 3𝑥 4 + 2𝑥 2 + 4𝑥 − 6

Se puede representar por solo:

8 3 2 4 −6
y la división quedara representada por:

1 8 3 2 4 −6

Es importante mencionar que al hacer una división de este tipo se obtiene un cociente
que será un polinomio de un grado menor al polinomio original y se obtendrá un residuo
el cual, si toma un valor de cero nos indicara que la función tiene un valor f(x) igual a
cero.

Por ejemplo:

La división:

2𝑥 5 − 9𝑥 4 + 11𝑥 3 − 6𝑥 2 − 6𝑥 + 18
𝑥−3
Se puede representar según lo dicho como:

Ahora el procedimiento seria el siguiente:

1) Se baja el primer coeficiente del polinomio que se encuentra dentro de la línea de


operación:

2) Multiplicar el número que se encuentra fuera de la línea de operación por el número


que se bajó en el paso anterior y colocar el resultado en la columna perteneciente a los
coeficientes de grado n-1

3) Realizar la suma del coeficiente -9 y el numero 6


4) Multiplicar el número que se encuentra fuera de la línea de operación por el número
que se obtuvo de la suma en el paso anterior y colocar el resultado en la columna
perteneciente a los coeficientes de grado n-2

5) Realizar la suma del coeficiente 11 y el número -9

6) Repetir el procedimiento de forma similar

El cociente entonces será un polinomio de grado menor:

2𝑥 4 − 3𝑥 3 + 2𝑥 2 + 0𝑥 − 6

Y el residuo es cero, con lo cual concluimos que el número “3” satisface que f(x)=0 con
lo que se dice que se ha encontrado un cero de la función; Gráficamente esto se representa
como un cruce de la gráfica por el eje de las x:
Para encontrar con exactitud las raíces de una funcion algebraica existen varios métodos
para lo cual vamos a mencionar algunos y estos de igual manera usados en programas
como Matlab

 SECUENCIAS DE STURN

Las ecuaciones polinómicas presentan un interés especial y para ellas existe la posibilidad
de conocer el número de raíces reales y su localización con ayuda de la teoría de Sturm.
Además, es bien conocido que una ecuación polinómica de grado n posee n raíces entre
reales y complejas (contadas sus multiplicidades).

Así, el problema de calcular las raíces de P(x) = 0 pasa por varias etapas diferenciadas; a
saber:

1. Número de raíces reales


2. Localización y separación en intervalos disjuntos
3. Estimación precisa de cada raíz mediante un método numérico adecuado
Para obtener una sucesión de Sturm para el caso de una ecuación polinómica P(x)=0
aplicamos el procedimiento siguiente (basado en el algoritmo de Euclides para el cálculo
del M.C.D. (n, m):
1. Tomamos f0 = P(x) => f1 =

P'(x);

2. Para i= 1,2, …

Hacemos la división:𝑓𝑖 − 1
𝑓𝑖

Se tiene: 𝑓𝑖 − 1 = 𝑓𝑖 ∗ 𝑐𝑖 + 𝑅𝑖

donde Ri = resto de la división

Si Ri = 0, entonces el proceso finaliza 𝑓𝑖

con

Si Ri ≠0, entonces tomamos fi+1 = −Ri

3. Escribimos la sucesión calculada: {f0, f1, …, fm} (se supone que Rm ≡ 0)

Pues bien, realizado el procedimiento anterior, se verifica:

1. Si fm no se anula en R, entonces {f0, f1, …, fm} es una Sucesión de Sturm para

la ecuación polinómica: f0 = P(x) = 0 en R.

2. Una ecuación polinómica P(x) = 0 tiene todas sus raíces reales en el intervalo:
[−1− M, 1+ M] donde:

𝒂
M=Max {|𝒂 𝒊 | : 𝒊 = 𝟎, 𝟏, … , 𝒏 − 𝟏}
𝒏

donde ai son los coeficientes de P(x) (con an el principal).

Con las dos propiedades anteriores se puede, aplicando el teorema de Sturm,


obtener el número de raíces reales de la ecuación.

 Ejercicio implementado en MATLAB


[1 -3.5 2.75 2.125 -3.875 1.25]
function c=sturmsep(a,b)

prec=10^(-8);
p0=input('Vector de coeficientes del polinomio (de mayor a menor
grado) ');
n=length(p0);
if nargin < 2
b=1+norm(p0(2:n)/p0(1),inf);
a=1/(1+norm(p0(1:n-1)/p0(n),inf));
end
p(1,1:n)=p0;
g(1)=n;
p1=p0(1:n-1).*(n-1:-1:1);
p(2,1:n-1)=p1;
g(2)=n-1;
r=1;
cont=1;
while any(r)
[q,r]=deconv(p(cont,1:g(cont)),p(cont+1,1:g(cont+1)));
aux=find(abs(r)<prec);
m=length(aux);
r(aux)=zeros(1,m);
ind=1;
while abs(r(ind))==0 & ind<length(r)
ind=ind+1;
end
g(cont+2)=length(r)-ind+1;
p(cont+2,1:g(cont+2))=-r(ind:length(r));
cont=cont+1;
end
p=p(1:cont,:);
g=g(1:cont);
for i=1:cont
sa(i)=polyval(p(i,1:g(i)),a);
sb(i)=polyval(p(i,1:g(i)),b);
end
sa=sa(find(sa));
sb=sb(find(sb));
ca=0;
cb=0;
for i=1:length(sa)-1
if sa(i)*sa(i+1)<-eps
ca=ca+1;
end
end
for i=1:length(sb)-1
if sb(i)*sb(i+1)<-eps
cb=cb+1;
end
end
c=ca-cb;
 MÉTODO DE REGLA FALSA O FALSA POSICIÓN

El método de la regla falsa, o «falsa posición», es otro de los muchos métodos iterativos
para la resolución de problemas con ecuaciones no lineales. La peculiaridad de éste, es que
combina dos métodos: el método de bisección y el de la secante
Se basa en trazar una recta que una los extremos de un intervalo dado, considerando
que la solución está cerca de uno de éstos extremos.

Hemos agregado por tanto, esa línea recta que une el intervalo [a,b]. La idea principal
es que si tomamos el punto donde la recta corta el eje x, estaremos más cerca de hallar
la raíz.

Entonces, supongamos que tenemos una función f(x), que es continua en el intervalo [xa,
xb], y que además f(xa) y f(ba) tienen signos opuestos

Ahora, necesitamos saber la ecuación de la línea recta que une esos dos puntos. Para ello
nos ayudamos de la ecuación punto-pendiente, por eso, hallamos la pendiente:

Ahora vamos a sustituir eso en la ecuación de la recta:


Pero recordamos que la recta en cuestión corta el eje x, así que hacemos y=0:

Simplificamos multiplicando todo por xb-xa, para quitar el denominador:

Como paso final, despejamos la incógnita x:

Vamos ahora a describir paso a paso cómo se desarrolla el método de la regla falsa
(considerando f(x) continua):

1) Primero debemos encontrar unos valores iniciales xa y xb tales que:

2) Aproximamos a la raíz, para ello usamos:

3) Evaluamos f(xr). Se pueden dar hasta tres casos:

A)
Como f(xa) y f(xr) tienen signos opuestos, por la condición mencionada anteriormente
deducimos que, la raíz se encuentra en el intervalo [xa, xr]

B)

f(xa) y f(xr) tienen el mismo signo. Así que xb y xr han de tener signos distintos, pues:

Por tanto, la raíz se encuentra en el intervalo [xr, xa].

*Pista: Como consideramos que la ecuación tiene que ser continua (si o si), al darse este
caso, no cumpliría con la condición de continuidad, al menos que tomemos como
referencia un tercer punto (xr) cuya imagen (f(xr)) será de signo opuesto.

C)

En este caso, como f(xr)=0 ya tenemos localizada la raíz.

Debemos repetir estos 3 pasos señalados anteriormente hasta que:

|Ea|<Eb
Ejercicio implementado en MATLAB
clc
clear
fprintf('METODO REGLA FALSA BYRON GUERRERO\n\n\n');
format long;
Xi=input ('Ingrese el limite inferior del intervalo\n');
Xs=input ('\nIngrese el limite superior del intervalo\n');
Tol=input ('\nIngrese la tolerancia deseada\n');
Iter=input ('\nIngrese el número de iteraciones\n');
Fun=input ('\nIngrese la función entre comillas simples\n');

f=inline (Fun);
Yi=f(Xi);
Ys=f(Xs);

if Yi==0
fprintf('\n\nSOLUCION:\n')
fprintf('Xi es raiz\n\n');
else
if Ys==0
fprintf('\n\nSOLUCION:\n')
fprintf('Xs es raiz\n\n');
else
if Yi*Ys<0
Xm=(Xi)-((f(Xi)*(Xi-Xs))/(f(Xi)-f(Xs)));
Ym=f(Xm);
Error=Tol+1;
Cont=1;
Z=[Cont,Xi,Xs,Xm,Ym,Error];
while Ym~=0 & Error>Tol & Cont<Iter
if Yi*Ym<0
Xs=Xm;
Ys=Ym;
else
Xi=Xm;
Yi=Ym;
end
Xaux=Xm;
Xm=(Xi)-((f(Xi)*(Xi-Xs))/(f(Xi)-f(Xs)));
Ym=f(Xm);
Error=abs(Xm-Xaux)/Xm;
Cont=Cont+1;
Z(Cont,1)=Cont;
Z(Cont,2)=Xi;
Z(Cont,3)=Xs;
Z(Cont,4)=Xm;
Z(Cont,5)=Ym;
Z(Cont,6)=Error;
end
if Ym==0
fprintf('\n\nSOLUCION:\n')
fprintf('%g es raíz\n\n',Xm);
else
if Error<Tol
fprintf('\n\nSOLUCION:\n')
fprintf( '%g es una aproximacion a una raìz con una tolerancia %g \n\n',Xm,Tol);
else
fprintf('\n\nSOLUCION:\n')
fprintf('Fracaso en %g iteraciones\n\n',Iter);
end
end
else
fprintf('\n\nSOLUCION:\n')
fprintf('El intervalo es inadecuado\n\n');
end
end
end
fprintf('TABLA\n\nIteraciones Xi Xs
Xm Ym Error Absoluto\n\n');
disp(Z);
ezplot(f);
grid on
 Método de Newton Raphson

Entre los métodos de aproximaciones sucesivas para encontrar algunas de las raíces
de una ecuación algebraica o trascendente, el de Newton-Raphson es el que presenta
mejores características de eficiencia, debido a que casi siempre converge a la solución y
lo hace en un número reducido de iteraciones.

Este método es aplicable tanto en ecuaciones algebraicas como trascendentes y con él


es posible obtener raíces complejas.

Tal vez, de las fórmulas para localizar raíces, la fórmula de Newton-Raphson sea la
más ampliamente utilizada. Si el valor inicial para la raíz es xi, entonces se puede trazar
una tangente desde el punto [xi, f(xi)] de la curva. Por lo común, el punto donde esta
tangente cruza el eje x representa una aproximación mejorada de la raíz.

El método de Newton-Raphson, como todos los de aproximaciones sucesivas, parte


de una primera aproximación y mediante la aplicación de una fórmula de recurrencia se
acercará a la raíz buscada, de tal manera que la nueva aproximación se localiza en la
intersección de la tangente a la curva de la función en el punto y el eje de las abscisas.

De la figura se tiene que la primera derivada en x es equivalente a la pendiente:

𝑓(𝑥𝑖 ) − 0
𝑓 ′ (𝑥𝑖 ) =
𝑥𝑖 − 𝑥𝑖+1

que se reordena para obtener:

𝑓(𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓′(𝑥𝑖 )

Para emplear este método

1) Se sustituye datos
2) Igualar a Cero la ecuación para obtener f(x) = 0
3) Graficar o tabular para obtener una 1ra aproximación a la raíz buscando, Xo (valor
cercano a la raíz)
4) Se deriva la función f(x) para obtener f '(x)
5) Se aplica la ecuación de recurrencia que utiliza el método

𝑓(𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓′(𝑥𝑖 )
Ejemplo:

𝑓(𝑥, 𝑦) = 𝑥 3 − 3𝑥𝑦 2 − 1

𝑓′(𝑥, 𝑦) = 3𝑥 2 𝑦 − 𝑦 3

−0.6
Con los valores iniciales:
0.6
3𝑥 2 − 3𝑦 2 −6𝑥𝑦 ∆𝑥 𝑥 3 − 3𝑥𝑦 2 − 1
( ) ( ) = − ( )
6𝑥𝑦 3𝑥 2 − 3𝑦 2 ∆𝑦 3𝑥 2 𝑦 − 𝑦 3

0 2.16 ∆𝑥 −0.568
( )( ) = −( )
−2.16 0 ∆𝑦 0.432

Que representa el sistema de ecuaciones:

0∆𝑥 + 2.16∆𝑦 = 0.568

−2.16∆𝑥 + 0∆𝑦 = −0.432

Una vez resueltas estas ecuaciones se obtiene los valores:

∆𝑥 = 0.2
∆𝑦 = 0.262963

Así pues

𝑥 = 0.2 + (−0.6) = −0.4

𝑦 = 0.2622963 + (0.6) = 0.8622963

En la segunda iteración se tendrá:

𝑥 = −0.4

𝑦 = 0.8622963

−1.75066473 −2.06951112 ∆𝑥 −0.17173411


( )( ) = −( )
−2.06951112 −1.75066473 ∆𝑦 −0.22726242
∆𝑥 = −0.139299
∆𝑦 = 0.0348546

Que generan los valores


𝑥 = −0.539299

𝑦 = 0.8971509

Después de 5 iteraciones se obtiene:

𝑥 = −0.49999999

𝑦 = 0.866025403

El valor obtenido es:

𝑥 = −0.5

𝑦 = −0.866025

Con esto calcularemos el error existente:

0.5 − 0.49999999
𝐸= ∗ 100 = 0.0000002%
0.5

 Ejercicio implementado en MATLAB

clc
clear

fprintf('METODO DE NEWTON\n\n\n');
format long;
Xo=input ('ingrese el valor inicial\n');
Iter=input ('\ningrese el número de iteraciones\n');
Tol=input ('\ningrese la tolerancia que desea\n');
F=input ('\ningrese la función en comillas simples\n');

f=inline(F);

Y1=f(Xo);
Derivada=diff(F)
Der=char(Derivada);

D=inline(Der);
De=D(Xo);

Error=Tol+1;
Cont=0;
Z1= [Cont, Xo, Y1, De, Error];
Z= [Cont, Xo, Y1, De, Error];
while Y1~=0 & Error>Tol & Cont<Iter & De~=0

X1=Xo-(Y1/De);
Y1=f(X1);
De=D(X1);
Error=abs((X1-Xo)/X1);
Cont=Cont+1;
Z(Cont,1)=Cont;
Z(Cont,2)=Xo;
Z(Cont,3)=Y1;
Z(Cont,4)=De;
Z(Cont,5)=Error;
Xo=X1;
end

if Y1==0
fprintf('\n\nSOLUCION:\n')
fprintf('%g es raíz\n\n',Xo);
else
if Error<Tol
fprintf('\n\nSOLUCION:\n')
fprintf( '%g es una aproximacion a una raìz con una tolerancia %g \n\n',Xo,Tol)
else
if De==0
fprintf('\n\nSOLUCION:\n')
fprintf('Se esta haciendo división por cero y Xo posiblemente es una raiz
multiple\n\n')
else
fprintf('\n\nSOLUCION:\n')
fprintf('Fracaso en %g iteraciones\n\n',Iter);
end
end
end

fprintf('TABLA\n\n Cont Xn f(Xn)


f´(Xn) Error relativo\n\n');
disp(Z1);
disp(Z);
ezplot(f);

grid on
 Método de la Secante

Este método es una variante del método de Newton para el caso en que no sea posible
calcular la derivada de f(x) de una forma analítica.

En este caso, se sustituye el valor f’(𝑥𝑛 ) en el algoritmo, por el valor que corresponde a
una aproximación de f’(𝑥𝑛 ) . Para iniciar el algoritmo, son necesarias dos aproximaciones
iniciales x0 y x1.

𝑓(𝑥𝑛 ) − 𝑓(𝑥𝑛−1 )
𝑥𝑛− 𝑥𝑛−1

El método de la secante es un método para encontrar los ceros de una función de forma
iterativa. Uno de los objetivos de este método es eliminar el problema de la derivada de
la función ya que el método de la secante es muy similar al método de Newton-Raphson,
con la diferencia principal de que el método de la secante no requiere de las derivadas de
la función. Por ello es más útil emplear el método de la secante.

Él método se basa en obtener la ecuación de la recta que pasa por los puntos

[𝑥𝑛−1 , 𝑓(𝑥𝑛−1 )] 𝑦 [𝑥𝑛, 𝑓(𝑥𝑛 )]

A dicha recta se le llama secante por cortar la gráfica de la función.


Para aplicar el método de la secante se parte de Xo y X1 y se calcula, iterativamente para
cada n ≥ 1.

Y cuando no se nos da Xo y X1, se empieza tabulando la función para saber cuáles tomar
y donde se encuentren cambios en los signos del resultado se toman para meterlos en la
formula como Xo y X1.

Posteriormente ya que se hace la primera iteración

 Se toma X n-1 como Xn para de la próxima iteración


 Y se toma la Xn de la iteración anterior como X n-1 para la siguiente iteración.

El método de la secante consiste en considerar la siguiente Formula que es para este


método:
𝑓(𝑥𝑛 )(𝑥𝑛 − 𝑥𝑛−1 )
𝑥𝑛+1 = 𝑥𝑛 −
𝑓(𝑥𝑛 ) − 𝑓(𝑥𝑛−1 )

Después de cada iteración debe sacarse el error aproximado de esa iteración con la
siguiente formula

𝑥𝑛 − 𝑥𝑛−1
𝐸= ∗ 100%
𝑥𝑛
Ejercicio implementado en MATLAB

clc
clear

fprintf('METODO DE LA SECANTE BYRON GUERRERO\n\n\n');


format long;

Xo=input('ingrese xo\n');
X1=input('\ningrese x1\n');
Tol=input('\ningrese la tolerancia\n');
Iter=input('\ningrese el número de iteraciones\n');
e=input('\ningrese la función entre comillas simples\n');

f= inline(e);
yo=f(Xo);

if yo==0
fprintf('\n\nSOLUCION:\n')
fprintf('xo es raiz\n');

else
y1=f(X1);
d=(y1-yo);
e=Tol+1;
cont=0;
Z1= [cont,X1, y1, e];
Z= [cont,X1, y1, e];

while y1~=0 & e>Tol & cont<Iter & d~=0

X2= X1-((y1*(X1-Xo))/(d));
e=abs((X2-X1)/X2);

Xo=X1;
yo=y1;
y1=f(X2);
X1=X2;
d=(y1-yo);
cont=cont+1;
Z(cont,1)=cont;
Z(cont,2)=X1;
Z(cont,3)=y1;
Z(cont,4)=e;
end
if y1==0
fprintf('\n\nSOLUCION:\n')
fprintf('%g es raíz\n\n',X1);
else
if e<Tol
fprintf('\n\nSOLUCION:\n')
fprintf( '%g es una aproximación a una raíz con una tolerancia %g \n\n',X1,Tol)
else
if d==0
fprintf('\n\nSOLUCION:\n')
fprintf('el denominador es cero, FRACASO\n\n');
else
fprintf('\n\nSOLUCION:\n')
fprintf('Fracaso en %g iteraciones\n\n',Iter);
end
end
end
end
fprintf('TABLA\n\ninteraciones Xn y1 Error relativo\n\n');
disp(Z1);
disp(Z);

ezplot(f);
ezplot(f,[-1 5]);

grid on
5. RESULTADOS

 Permitir al estudiante consolidar los conocimientos de la asignatura en un software

que permita realizar las simulaciones de cada método para encontrar las raices.

 Conocer nuevo lenguaje de programación en el área de las matemáticas.

 Comprender los conceptos de las raices de una funcion

6. CONCLUSIONES

La utilización de nuevos algoritmos permitirá resolver ejercicios de modo gráfico y

simulaciones para la obtención de las raices en funciones algebraicas.

7. RECOMENDACIONES

 Declara según la sintaxis las variables, funciones y ciclos de repetición para no

generar errores en el momento de la compilación.

8. BIBLIOGRAFÍA

Mathews, J. H., Fink, K. D., Carrión, A. F., & Márquez, M. C. (2000). Métodos numéricos con
Matlab (Vol. 2, pp. 463-548). Prentice Hall
Villar Santos, J. L., & Morillo Bosch, M. P. (2003). Métodos numéricos con MATLAB: aplicación
a las telecomunicaciones. Edicions UPC.

Das könnte Ihnen auch gefallen