Beruflich Dokumente
Kultur Dokumente
CARRERA DE COMPUTACIÓN
FECHA: 06-07-2020
PRÁCTICA N°: 3
1. INTRODUCCIÓN
Los ceros o raíces de una función dada son exactamente los puntos en los que la
resulta complicada por lo general encontrar raíces exactas. En algunos casos las
necesario encontrar las raíces exactas de la ecuación. es por ello que tiene mayor
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.
4. PROCEDIMIENTO O DESARROLLO
Para preceder a encontrar las raices de una funcion se toman diferentes procesos en
Metodo De la Secante
8𝑥 5 + 3𝑥 4 + 2𝑥 2 + 4𝑥 − 6
𝑥+1
8𝑥 5 + 3𝑥 4 + 2𝑥 2 + 4𝑥 − 6
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:
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:
P'(x);
2. Para i= 1,2, …
Hacemos la división:𝑓𝑖 − 1
𝑓𝑖
Se tiene: 𝑓𝑖 − 1 = 𝑓𝑖 ∗ 𝑐𝑖 + 𝑅𝑖
con
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 {|𝒂 𝒊 | : 𝒊 = 𝟎, 𝟏, … , 𝒏 − 𝟏}
𝒏
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:
Vamos ahora a describir paso a paso cómo se desarrolla el método de la regla falsa
(considerando f(x) continua):
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:
*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)
|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.
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.
𝑓(𝑥𝑖 ) − 0
𝑓 ′ (𝑥𝑖 ) =
𝑥𝑖 − 𝑥𝑖+1
𝑓(𝑥𝑖 )
𝑥𝑖+1 = 𝑥𝑖 −
𝑓′(𝑥𝑖 )
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
∆𝑥 = 0.2
∆𝑦 = 0.262963
Así pues
𝑥 = −0.4
𝑦 = 0.8622963
𝑦 = 0.8971509
𝑥 = −0.49999999
𝑦 = 0.866025403
𝑥 = −0.5
𝑦 = −0.866025
0.5 − 0.49999999
𝐸= ∗ 100 = 0.0000002%
0.5
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
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
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.
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
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];
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
que permita realizar las simulaciones de cada método para encontrar las raices.
6. CONCLUSIONES
7. RECOMENDACIONES
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.