0% encontró este documento útil (0 votos)
84 vistas14 páginas

Método PROYECTO

Este documento describe el método de Bairstow para encontrar las raíces de un polinomio. El método involucra dividir el polinomio entre un factor cuadrático para reducir su orden de forma iterativa hasta encontrar las raíces. Se provee una deducción de la fórmula de Bairstow y un ejemplo de implementación en MATLAB.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
84 vistas14 páginas

Método PROYECTO

Este documento describe el método de Bairstow para encontrar las raíces de un polinomio. El método involucra dividir el polinomio entre un factor cuadrático para reducir su orden de forma iterativa hasta encontrar las raíces. Se provee una deducción de la fórmula de Bairstow y un ejemplo de implementación en MATLAB.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd

MÉTODO

DE BAIRSTOW
INTEGRANTES:

DANIELA OROZCO MARTÍNEZ


MATÍAS CORTEZ CORTEZ

RENNY ANTONIO CHOQUE RODRIGUEZ


KATHERINE MICALSALGUERO AJHUACHO

RISTER YASIR ARCE CUELLAR


INTRODUCCION:
• El método de Bairstow es un algoritmo eficiente de búsqueda de las raíces de un polinomio real de
grado arbitrario; es un método iterativo relacionado con los métodos de Muller y Newton Raphson.

• En qué consiste?
El método de Bairstow consiste en un
proceso iterativo en que primero, la
función dada se le da un valor inicial, el
cual se introduce a un factor que se usará
para dividir el polinomio entre él.

Leonard Bairstow
(1880-1963)
REQUISITOS PREVIOS DEL MÉTODO

• Función declarada.
-Se requieren de valores r y s para la creación de un factor
- Un error / tolerancia
DIFERENCIA ENTRE EL MÉTODO BAIRSTOW Y
OTROS MÉTODOS.
-El método de Bairstow es un algoritmo eficiente de búsqueda de las raíces de
un polinomio real de grado arbitrario. Es un método iterativo, basado en el método de
Müller y de Newton Raphson.
-Para poder encontrar raíces con este método necesitamos conocer el grado del polinomio a resolver,
cuáles son sus coeficientes y dos factores, r y s, los cuales son necesarios para efectuar la división
sintética.
La principal diferencia de este método, respecto a otros, es que permite calcular todas las raíces de
un polinomio (reales e imaginarias), utilizando únicamente aritmética real.
DEDUCCION DE LA FORMULA DE BAIRSTOW

Requisitos para realizar el método de Bairstow:


• Función declarada
• Valores iniciales del divisor (r y s)
• Error
DEDUCCIÓN
Divide el polinomio:
Pn(x)= a0+a1x+a2x2+…+anxn,a0≠0

Entre el factor cuadrático:


X2-rx-s

Obteniendo:
Pn-2(x)= b2+b3x+…+bn-1xn-3+bnxn-2

Con un residuo:
R=b1(x-r)+b0
DEDUCCIÓN

El factor cuadrático se introduce para permitir la determinación de las


raíces complejas, si los coeficientes del polinomio original son reales,
las raíces se presentan en pares conjugados, asi si x2-rx-s es un divisor
exacto, las raíces complejas pueden determinarse mediante la formula
cuadrática:
R= b1(x-r)+b0=0 b1 y b0 =0
Como b1 y b0 son función de r y s se pueden expandir usando una serie
de Taylor, así:
DEDUCCIÓN

Igualando a cero:

Que es el sistema de ecuaciones a resolver


DEDUCCIÓN

Para hacerlo, Bairstow demostró que las derivadas parciales se pueden


obtener haciendo un procedimiento similar a la división sintética. Así:
DEDUCCIÓN
Por lo tanto se obtienen las siguientes igualdades:

Y el sistema de ecuaciones a resolver se puede reescribir de la


siguiente manera:
DEDUCCIÓN

Para calcular errores:


EJEMPLO Y IMPLEMENTACIÓN DEL MÉTODO
BIRSTOW EN UN LENGUAJE DE PROGRAMACIÓN
IMPLEMENTACION
a=input('Ingrese punto a: '); %pide ingresar puntos (r,s) y tolerancia
IMPLEMENTACION EN EL SOFTWARE MATLABb=input('Ingrese punto b: ');
tool=input('\nIngrese la tolerancia: ');
y(1)=1;% asegura que el primer termino de cada division sea 1
clear all; %limpio variables
z(1)=1;
clc; %Limpio pantalla while t(1)~=1 %Este ciclo obliga a que el termino que acompa�a la variable de mayor grado deba ser igual a 1
fprintf('\n\nerror el primer termino deber ser de valor 1, vuelva a ingresar polinomio...' )
syms x % declaro variables simbolicas clear all; %limpio variables
syms x % declaro variables simbolicas
t =[]; %declaro variables a usar t =[]; %declaro variables a usar
y =[];
y =[]; %guarda primer division sintetica
e=[];
e=[]; %permite reducir orden del polinomio u=0;
z=[]; %guarda segunda division sintetica n=2;
u=0; %permite edentificar cada caso g=0;
n=2; %permite asegurar el orden del polinomio se reduzca de dos en dos h=[];
g=0; o=[];
errora=1; %inicializo error
h=[]; %guarda salidas raices
errorb=1;
o=[]; %guarda salidas raices tool=0; %inicializo tolerancia
errora=1; %inicializo error f=input('\nIngrese la funcion: '); %pide ingresar la funcion
errorb=1; coeffs(f); %calcula coeficientes polinomio
tool=0; %inicializo tolerancia t=sym2poly(f); %reorganiza polinomio
f=input('\nIngrese la funcion: '); %pide ingresar la funcion k=length(t); %calcula grado del polinomio
u=length(t); %variable por conveniencia, permite diferenciar si polinomio es mayor a grado 3
p=length(t); % variable por conveniencia, se usa como contador
coeffs(f); %calcula coeficientes polinomio x=k; % variable por conveniencia, permite imprimir cada caso
t=sym2poly(f); %reorganiza polinomio a=input('Ingrese punto a: '); %pide ingresar puntos y tolerancia
k=length(t); %calcula grado del polinomio b=input('Ingrese punto b: ');
u=length(t); %variable por conveniencia, permite diferenciar si polinomio es mayor a grado tool=input('\nIngrese la tolerancia: ');
3 y(1)=1;
z(1)=1;
p=length(t); % variable por conveniencia, se usa como contador
end
x=k; % variable por conveniencia, permite imprimir cada caso
if tool>abs(errora) | tool>abs(errorb) & u>=3 %si polinomio del cociente es de grado
if u==2 %si el polinomio a resolver es de grado 1 la raiz sale y=fliplr(y);%reorganiza polinomios resultantes de las 3 o mayor
directamente divisiones respectivas r1=(a+(a^2+4*b)^(1/2))/2;
r1=-t(2); z=fliplr(z); r2=(a-(a^2+4*b)^(1/2))/2;
tool=1; da=(y(1)*z(3)-y(2)*z(2))/((z(2))^2-z(1)*z(3));%calculo g=g+1;
end pasos del metodo o(g)=r1; %guarda las raices
if u==3 %Si el polinomio es de grado 2 se realiza el siguiente ciclo db=(y(2)*z(1)-y(1)*z(2))/((z(2))^2-z(1)*z(3)); h(g)=r2; %guarda las raices
r1=(-t(2)+((t(2))^2-4*t(3))^(1/2))/2; %calcula raices y=fliplr(y); %reorganiza polinomios resultantes de las for j=1:p-n %permite reducir orden del polinomio resultante
r2=(-t(2)-((t(2))^2-4*t(3))^(1/2))/2; divisiones respectivas e(j)=y(j);
end z=fliplr(z); end
while u>3 %si el polinomio ingresado es de grado 3 o mayor se realiza errora=da/a;%recalcula errores y=e; %se asignan nuevos valores a variables necesarias
el siguiente ciclo errorb=db/b; z=[];
for i=1:k-1 a=a+da; %calcula nuevos valores de a y b z(1)=1;
if i<2 b=b+db; t=e;
y(i+1)=a*t(i)+t(i+1);%permite calcular primer division sintetica u=length(y);%calcula el grado del polinomio obtenido k=length(y);
else como cociente u=length(y);
y(i+1)=a*y(i)+b*y(i-1)+t(i+1); if tool>abs(errora) | tool>abs(errorb) & u==1 %si n=n+2; % asegura que el grado del polinomio se disminuya de 2 en 2
end polinomio del cociente es de grado 1 errora=1; %reinicia errores
end r5=(-a/b); errorb=1;
for i=1:k-2 %permite calcular segunda division sintetica end e=[];
if i<2 if tool>abs(errora) | tool>abs(errorb) & u==2 %si end
z(i+1)=a*y(i)+y(i+1); polinomio del cociente es de grado 2 end
else r3=(a+(a^2+4*b)^(1/2))/2;
z(i+1)=a*z(i)+b*z(i-1)+y(i+1); r4=(a-(a^2+4*b)^(1/2))/2; fprintf('Las raices son: \n\n');
end end
end if x==2
r1
end

También podría gustarte