function [I,C,n,p,A]=approximation_pi_archimede(cho,fig) % En entrée : cho=0 par défaut méthode habituelle % cho=1 par méthode modifiée (récurrence entre les périmètres). % fig=1 pour faire figure de l'interpolation par le log, égal 0 % par défaut. % % en sortie : % * I et C : les approximation par défaut et par excès et, pour chacune % d'elle : % * meilleur indice n (minimise |^p_n-pi]) % * p : les valeurs de p_i pour i dans {1,...,n} % * A : réel tel que |pi-p_n|=KA^n, obtenu par interpolation. if nargin==0||isempty(cho) cho=0; end if nargin<=1||isempty(fig) fig=0; end nmax=25; if cho==0 U=zeros(1,nmax); V=U; U(1)=1/2; V(1)=sqrt(3)/3; for i=2:nmax U(i)=(sqrt(2)/2)*sqrt(1-sqrt(1-((U(i-1))^2))); V(i)=(1/V(i-1))*(-1+sqrt(1+(V(i-1))^2)); end X=1:nmax; I=6*2.^(X-1).*U; C=6*2.^(X-1).*V; else I=zeros(1,nmax); C=I; I(1)=3; C(1)=2*sqrt(3); q=6; for i=2:nmax I(i)=sqrt(2*q)*sqrt(q-sqrt(q^2-(I(i-1))^2)); C(i)=((2*q)/(C(i-1)))*(-q+sqrt((C(i-1))^2+q^2)); q=2*q; end end n=zeros(1,2); A=n; p=cell(1,2); a=n; b=n; if fig Nmin=inf; Z=p; end for k=1:2 if k==1 auxi=I; else auxi=C; end [m,N]=min(abs(auxi-pi)); if fig Nmin=min([Nmin,N]); end Q=auxi(1:N); X=0:(N-1); Y=log10(abs(Q-pi)); R=polyfit(X,Y,1); a(k)=R(1); if fig b(k)=R(2); Z{k}=Y; end A(k)=10^a(k); n(k)=N; p{k}=Q; end if fig X=0:(Nmin-1); Z{1}=Z{1}(1:Nmin); Z{2}=Z{2}(1:Nmin); subplot(2,1,1); plot(X,Z{1},X,a(1)*X+b(1),'*'); legend('Exacte','Interpolée'); title('log10 de l''erreur sur I'); subplot(2,1,2); plot(X,Z{2},X,a(2)*X+b(2),'*'); legend('Exacte','Interpolée'); title('log10 de l''erreur sur C'); end