function [mu,Q,err]=binarydec3(p,eta) % [mu,Q]=binarydec3(p) ou [mu,Q]=binarydec3(p,eta) % % P.Comon, 25 Sept 1997 % % D'apres Comon-Mourrain, Signal processing'96 % % Decomposition de quantiques binaires reelles ou complexes % % Difference avec binarydec2: prise en compte des racines DISTINCTES, % % et prise de Re quand elles sont COMPLEXES. De plus, err est RELATIVE. % % eta est un parametre de precision. Il vaut 1.e-4 par defaut % % binarydec3 choisit le premier r tel que la decomposition % % soit approchee a eta pres (dans la svd). % % Exemple: % format('compact'); % path(path,'/homes/comon/Matlab/Fonctions') % p1=[2,1];p2=[1 -4];p3=[1 1]*1.e-7; % p=conv4(p1)+conv4(p2)+conv4(p3); % [mu,Q,err]=binarydec3(p); err % % On a alors: p = sum_k mu(k) conv4(q(k,:)). Soit: % % err affichee donne l'erreur normalisee de reconstruction % % Les formes lineaires estimees sont donnees par SOL. % % Autres exemples (erreur de reconstruction doit tjs etre faible): % % ORDRES PAIRS (non unicite des formes): % p=conv4([2 1])+conv4([1 -3])+conv4([0.1 -.1]); % p=conv4([2 1])+conv4([1 -3])+ones(1,5)*0.01; % p=convd([2,1],6)+convd([3,-5],6)+convd([-2,1],6)+convd([1,1],6); % % ORDRES IMPAIRS (unicite des formes a 1 facteur multiplicatif pres): % p=convd([2,1],5)+convd([3,1],5)+convd([-2,1],5); % p=convd([2,1],5)+convd([3,-5],5)+convd([-2,1],5); % % EXECUTION ET AFFICHAGE DU RESULTAT % [mu,Q]=binarydec3(p) % % NB: La reconstruction de p est donnee par: % % d=length(p)-1;sol=(mu'*convd(Q,d)); % % On peut donc aussi comparer en regardant [sol' p'] cr=isreal(p); % decompositions reelles ou complexes s=1;r=0;d=length(p)-1; if nargin==1,eta=1.e-4;end; fd=facto(d);c=ones(1,d+1); for i=1:d-1,c(i+1)=fd/facto(i)/facto(d-i);end; p0=p;p=p./c;v=[]; while s>eta&r0,s=S(J,J);J=J(length(J)); elseif r+1>d-r+1,J=r+1; end; if length(J)>0, % sortie de boucle si racines distinctes v=V(:,J); if cr==1,q=real(roots(v));else q=roots(v);end; Lq=length(q);tt=q(1:Lq-1)-q(2:Lq);It=find(abs(tt)