Está en la página 1de 4

MÉTODOS NUMÉRICOS

Método de Newton para la aproximación de raíz Xn+1 = Xn - ( f ( Xn ) / f ‘ ( Xn ) )


%Aproximación de una raíz de una función polinomial p (x) El punto (x2, 0) : Supone Xn+1 será RAIZ…>>
%No olvide incluir los coeficientes entre paréntesis [ ]
p=[1 -10 35 -50 24]; Introduzca el valor inicial:1.3
%p=input('Introduzca los coeficientes de p (x) en orden descendente: '); La siguiente aproximación es: 0.243092
q=polyder(p); % Calcula la derivada de p (x) Vuelva a ejecutar el programa utilizando
x0=input('Introduzca el valor inicial:'); este valor como su próximo ....
cont=1;%**** x0 = 0.2431 cont = 2
while (cont<10); %**** La siguiente aproximación es: 0.640036
x1=x0-polyval(p,x0)/polyval(q,x0); Vuelva …x0 = 0.6400 cont = 3
fprintf('\n'); % Inserta línea % muestra el valor x1 en formato decimal La siguiente aproximación es: 0.876179
como indica el especificador% 9.6f,% con 9 dígitos 6 de esto a la derecha Vuelva ...x0 = 0.8762 cont = 4
% del punto decimal omo xxx.xxxxxx, y \ n línea en blancoantes de x1 La siguiente aproximación es: 0.978670
fprintf('La siguiente aproximación es:% 9.6f \ n', x1) Vuelva.... x0 = 0.9787 cont = 5
fprintf('\n'); % Inserta otra línea en blanco% La siguiente aproximación es: 0.999209
fprintf('Vuelva a ejecutar utilizando este valor como su próximo .... \n'); Vuelva ....x0 = 0.9992 cont = 6
x0=x1;cont=cont+1; %**** La siguiente aproximación es: 0.999999
End; %**** Vuelva .... x0 = 1.0000 cont = 7

MÉTODOS NUMÉRICOS
Método de Newton para la aproximación de raíz
x0 = 1.1000: 0.975 N = 2: 0.9989 N = 3: 0.999 N = 4: 1.000
p=[1 -10 35 -50 24]; x0 = 1.2000: 0.84 N = 2: 0.969 N = 3: 0.998 N = 4: 0.999N = 5: 1.000
x0 = 1.3000: 0.243 N = 2: 0.64 N =3: 0.876 N = 4 0.978 N = 5: 0.999N
q=polyder(p); % Calcula la derivada de p (x) x0 = 1.4000: 7.0N = 2: 6.0N = 3: 5.2N = 4: 4.67N = 5: 4.30N = 6: 4.09
cont2=1;%**** x0 = 1.5000: 2.4N = 2: 0.66N = 3: 0.888N = 4: 0.98N = 5 : 0.999
x0 = 1.6000: 2.109091 N = 2: 1.990284 N = 3: 1.999 N = 4: 2.0
while (cont2<30); %**** x0 = 1.7000: 2.02N = 2: 1.999N =3: 2.00
x0 = 1.8000: 1.99N = 2: 1.999N = 3: 2.00 N = 4: 2.0 6
cont=1;%**** x0 = 1.9000: 1.99N = 2: 1.9999N = 3: 2.0
x0 = 2: 2.00 N = 2: 2.000
x0=1+cont2/10; %**** x0 = 2.1000: 1.992144 N = 2: 1.9999
x0 = 2.2000 1.951724 N = 2: 1.999105
while (cont<10); %**** x0 = 2.3000: 1.820558 N = 2: 1.997 N = 3: 1.999996
if (polyval(q,x0)^2<0.0000001); %**** x0 = 2.4000: 1.32 N =2: -0.04 N = 3: 0.449 N =4: 0.768 N = 5: 0.93N =6:0.993
x0 = 2.5000: -5622.N =2: -4216N =3: -3161.4: -2370. N = 5: -1777N = 6 N = 7: -
x1=x0-polyval(p,x0)/0.0001; %**** 998.N = 8 -748.N = 9: -560.
x0 = 2.6000: 3.683 N = 2: 5.04 N = 3: 4.55 N = 4: 4.23N =5: 4.06
else %**** x0 = 2.7000: 3.179442 N = 2: 3.002
x0 = 2.8000: 3.048276 N = 2: 3.0008
x1=x0-polyval(p,x0)/polyval(q,x0); %**** x0 = 2.9000: 3.007856 N = 2: 3.0000
x0 = 3: 3.000000 N = 2: 3.000000
end %**** x0 = 3.1000: 3.002669 N = 2: 3.00000
x1=x0-polyval(p,x0)/polyval(q,x0); x0 = 3.2000: 3.001504 N = 2: 3.00000
x0 = 3.3000: 2.978330 N = 2: 3.000261
fprintf('\n');fprintf('La siguiente aproximación es:% 9.6f \ n', x1) x0 = 3.4000: 2.890909 N = 2: 3.009716 N = 3: 3.0000
x0 = 3.5000: 2.562N =2: 4.336 N =3: 4.111N = 4: 4.01 N = 5: 4.000
x0=x1;cont=cont+1; %**** x0 = 3.6000: -2.072 N = 2: -1.000 N = 3: -0.22 N =4 0.329N = 5: 0.69N = 6
: 0.90 N =7: 0.986N = 8: 0.999 N =9: 1.0000
End; %**** x0 = 3.7000: 4.756 N =2: 4.359 N =3: 4.12 N =4: 4.02 N = 5: 4.000
x0 = 3.8000: 4.152N =2: 4.030 N = 3: 4.001 N =4: 4.000
cont2=cont2+1; %**** x0 = 3.9000: 4.0247 N =2: 4.001N =3: 4.000
end%****
MÉTODOS NUMÉRICOS
Método de bisección
El método Bisección es un algoritmo para localizar las raíces reales de una función.
El objetivo es encontrar dos valores x, para que f (x1) y f (x2) tengan signos opuestos.
Si se cumple, podemos calcular el punto medio xm =(x1+x2)/2 para x1< x <x2.

f (x1) y f (xm) son ambos positivos/negativos, su producto es positivo. x1=xm.

f (x2) y f (xm) son ambos positivos/negativos, su producto es positivo. x2=xm.

MÉTODOS NUMÉRICOS
Método de bisección
Después de hacer la sustitución apropiada, el proceso se repite hasta que la raíz tiene la tolerancia especificada.

0’ol¿
MÉTODOS NUMÉRICOS
Método de bisección

Comentarios método de bisección:


Hay que dar dos valores iniciales, uno a cada lado de la raiz que
se está buscando. Esto es un problema, especialmente si no se
tiene ninguna idea del comportamiento de la función o si esta
presenta raices muy similares o múltiples.

Errores de redondeo o de cuantificación pueden causar problemas


cuando el intervalo de búsqueda se vuelve pequeño

Al evaluar la función cerca de la raiz, f (x) ≈ 0, para el cálculo del


cambio de signo, los errores por operar con números muy
pequeños pueden hacerse presentes

MÉTODOS NUMÉRICOS
Método de bisección
Método de bisección: Aproximación de raíz >> pbisec
function y= fbisec(x); %No olvide los coeficientes del polinomio xm fm-------------------------
y = x .^ 4 - 10 .* x .^ 3+ 35 .* x .^ 2 + -50.* x +24; 0.650000 3.719756
% guarde la función arriba como .m “fbisec()” 0.925000 0.514438
1.062500 -0.333481
% La función abajo como .m es programa principal” 0.993750 0.037931
x1=.1; x2=1.2; 1.028125 -0.160182
disp(' xm fm') ] % xm es la media de x1 y x2, fm es f (xm) 1.010938 -0.064317
disp('-------------------------') % inserte linea 1.002344 -0.014002
for k=1:26; 0.998047 0.011761
f1=fbisec(x1); f2=fbisec(x2); 1.000195 -0.001171
xm=(x1+x2) / 2; fm=fbisec(xm); 0.999121 0.005282
fprintf('%9.6f %13.6f \n', xm,fm) % xm fm alineados; 0.999658 0.002052
if (f1*fm<0) 0.999927 0.000440
x2=xm; 1.000061 -0.000366
else 0.999994 0.000037
x1=xm; 1.000027 -0.000165
end 1.000011 -0.000064
end
MÉTODOS NUMÉRICOS
Método de bisección
Método de bisección: Aproximación de raíz >> pbisectint
x1=.1; xm fm
disp(' xm fm') % xm es la media de x1 y x2, fm es f (xm) -------------------------
1.000000 -0.000000
disp('-------------------------') % inserte linea
1.000000 -0.000000
for k2=1:80; 1.000000 -0.000000
x2=1+k2/10; 1.000000 -0.000000
if (fm^2 <.000001) 1.000000 -0.000000
fprintf('%9.6f %13.6f \n', xm,fm) % xm fm alineados; 1.000000 -0.000000
end 1.000000 -0.000000
for k=1:26; 1.000000 -0.000000
2.000000 -0.000000
f1=fbisec(x1); f2=fbisec(x2);
3.000000 0.000000
xm=(x1+x2) / 2; fm=fbisec(xm); 3.000000 -0.000000
if (f1*f2<0) 3.000000 -0.000000
if (f1*fm<0) 3.000000 -0.000000
x2=xm; 3.000000 -0.000000
else 3.000000 -0.000000
x1=xm; 3.000000 -0.000000
3.000000 -0.000000
end
3.000000 -0.000000
end 4.000000 -0.000000
end
end

También podría gustarte