6.4 Racines des ´ equations alg´ ebriques
235
inclut ´ egalement la phase de raffinement ; l’´ evaluation de f(x
(k−2) ), f(x
(k−1) )
et f(x
(k) ), avec k ≥ 2, est effectu´ ee par le Programme 48. Les param` etres en
entr´ ee et en sortie sont analogues ` a ceux du Programme 49.
Programme 50 - mulldefl : M´ ethode de Muller avec raffinement
function [xn,iter,root,itrefin]=mulldefl(A,n,tol,x0,x1,x2,nmax,iref)
%MULLDEFL M´ ethode de Muller avec raffinement.
% [XN,ITER,ROOT,ITREFIN]=MULLDEFL(A,N,TOL,X0,X1,X2,NMAX,IREF) tente
% de calculer toutes les racines d’un polynˆ ome de degr´ e N et de
% coefficients A(1),...,A(N). TOL est la tol´ erance de la m´ ethode.
% X0 est la donn´ ee initiale. NMAX est le nombre maximum d’it´ erations.
% Si IREF vaut 1, la proc´ edure de raffinement est activ´ ee.
apoly=A;
for i=1:n
xn(1,i)=x0; xn(2,i)=x1; xn(3,i)=x2;
it=0; err=tol+1; k=2; Ndeg=n-i+1;
if Ndeg==1
it=it+1; k=0; xn(it,i)=-A(2)/A(1);
else
while err>tol & it k=k+1; it=it+1;
[f0,B]=horner(A,Ndeg,xn(k-2,i)); [f1,B]=horner(A,Ndeg,xn(k-1,i));
[f2,B]=horner(A,Ndeg,xn(k,i));
f01=(f1-f0)/(xn(k-1,i)-xn(k-2,i)); f12=(f2-f1)/(xn(k,i)-xn(k-1,i));
f012=(f12-f01)/(xn(k,i)-xn(k-2,i));
w=f12+(xn(k,i)-xn(k-1,i))*f012;
arg=wˆ2-4*f2*f012; d1=w-sqrt(arg);
d2=w+sqrt(arg); den=max(d1,d2);
if den˜=0
xn(k+1,i)=xn(k,i)-(2*f2)/den;
err=abs(xn(k+1,i)-xn(k,i));
else
fprintf(’ Annulation du d´ enominateur ’);
return
end
end
end
radix=xn(k+1,i);
if iref==1
alfa=radix; itr=1; err=tol+1;
while err>tol*1e-3 & itr [px,B]=horner(apoly,n,alfa); [pdx,C]=horner(B,n-1,alfa);
if pdx == 0
fprintf(’ Annulation de la d´ eriv´ ee ’); err=0;
end
itr=itr+1;
if pdx˜=0
Précédent

- 245/540

Suivant