function [ch_pol,ch_elem,coef]=elem_simp(x,N)
% décompose certaines fractions rationnelles en éléments simples
%
% variables d'entrée
% x est le vecteur réel des poles de la fraction rationnelle,
% dont sera issu par la fonction poly, le dénominateur D(x).
% N est le numérateur de la fraction rationnelle,
% passé comme un polynome matlab, c'est-à-dire un vecteur.
%
% variables de sortie
% ch_pol est une chaine représentant la partie polynomiale, quotient
% obtenu dans la division euclidienne de N par D(x)=(x-x1)...(x-xn).
% ch_elem est une chaine représentant les éléments simples
% au sens ordinaire en fonction de coefficients fournis dans coef.
% coef peut etre forcé à une écriture symbolique (ici rationnelle).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%       Fonctions connexes appelées
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Tests d'entrée généraux
if nargin~=2
    error('Nombre de chapms incorrect');
end
if isreal(x)==0
    error('Les poles doivent etre réels pour l''instant');
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mise sous forme conventionnelle de la fraction
% calcul du dénominateur
D=poly(x);
[Q,R]=deconv(N,D);
% désormais on travaille avec R/D qui correspond à l'étude
% proposée au début dans le tp.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% Premier élément du résultat
ch_pol=poly2str(Q,'x');


% recherche de l'existence de poles multiples dans x
% tri de x pour faciliter le repérage des redondances
x=sort(x);
% détection du nombre de poles multiples
pol_mult=sum(diff(x)==0);

% ALGORITHME GENERAL

switch pol_mult
case 0,
    % il s'agit de l'étude demandée dans ce tp.
    
    der=polyder(D);
    coef=polyval(R,x)./polyval(der,x);
    ch_elem=[];
    for i=1:size(x,2)
        switch sign(x(i))
        case 1,
            ch=['/(x-' num2str(x(i)) ')'];
        case -1,
            ch=['/(x+' num2str(-x(i)) ')'];
        case 0,
            ch='/x';
        end
        ch_elem=[ch_elem ' + a' num2str(i) ch];
    end
    % à supprimer éventuellement par transformation en commentaire!
    coef=sym(coef,'r');
    
otherwise
    % étude à compléter par l'utilisateur...
    % Voir indications dans le fichier de documentation.
    disp('Il existe au moins un pole multiple. Développez l''étude générale.')
end






