problème de fitage
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

problème de fitage



  1. #1
    inviteedc4fd3f

    problème de fitage


    ------

    Bonjour,
    J'ai un fichier texte avec deux colonnes et je cherche a fiter une fonction y=f(x). Pour cela kj'utilise scilab. Il me faudrais une fonction qui me demande les deux vecteurs et le degré du polynome et qui me sort les coefficients. J'ai plus de 100 points et je veux un polynome de degré 3 a 6. Pouvez-vous m'aider ?

    -----

  2. #2
    KerLannais

    Re : problème de fitage

    Salut,

    Si tu regarde le manuel de scilab au chapitre interpolation ( chapitre XXX) tu auras toutes les fonctions d'interpolation de scilab, en général c'est de l'interpolation par des splines (degré 3) autant dans matlab il y a l'instruction polyfit pour interpoler avec des polynômes de degré arbitraire autant dans scilab j'ai pas trouvé l'équivalent. Le manuel est disponible à l'adresse
    http://www.scilab.org/download/5.1.1....1.1_fr_FR.pdf
    mais ce n'est rien de plus que l'aide qui est déjà dans scilab.
    Les mathématiques ne s'apprennent pas elles se comprennent.

  3. #3
    inviteedc4fd3f

    Re : problème de fitage

    Re,
    Oui j'avais vu l'interpolation par les spin mais je tiens a mes polynomes !

    J'ai trouvé sur le Web la fonction suivante :
    function p = polyfit(x,y,n)
    //POLYFIT Fit polynomial to data.
    // POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
    // degree N that fits the data, P(X(I))~=Y(I), in a least-squares sense.
    //
    // For a cubic P(X), the output vector p=[p1 p2 p3 p4] satisfies
    // 3 2
    // P(X) = p1 x + p2 x + p3 x + p4 .

    if length(x) ~= length(y)
    error('X and Y vectors must be the same size.')
    end

    x = x(;
    y = y(;

    // Construct Vandermonde matrix.
    V = ones(length(x),n+1);
    for j = n:-1:1
    V(:,j) = x.*V(:,j+1);
    end

    // Solve least squares problem.
    [Q,R] = qr(V);
    QTy = Q'*y;
    p = R(1:n+1,1:n+1)\QTy(1:n+1); // Same as p = V\y;
    p = p.'; // Polynomial coefficients are row vectors by convention.
    endfunction

    Le problème est que quand je l'utilise scilab renvoie le message suivant :
    warning
    matrix is close to singular or badly scaled. rcond = 6.6257D-19
    computing least squares solution. (see lsq)

    Ou est le problème ?

    Merci

  4. #4
    KerLannais

    Re : problème de fitage

    Salut

    Ca veut dire que la matrice V que le programme tente d'inverser est pas vraiment inversible (très mal conditionnée). Cela peux venir du fait que dans x tu as des valeurs très proches ou égales. Regarde d'abord si dans x tu n'as pas des doublons ou des valeurs très proches, tu peux éventuellement centrer et réduire x, c-à-d si m est la moyenne de x et est l'écart type de x tu pose

    le programme donne alors

    (c'est toi qui détermine le polynôme q bien sûr mais c'est pas difficile de faire un programme)
    Si tout ça ne marche pas il faut essayer avec un degré plus petit pour le polynôme.

    Le programme que tu as trouvé sur internet est une copie en légèrement simplifié du programme de la fonction polyfit de Matlab.
    Le message d'erreur de matlab dans ce cas est
    Polynomial is badly conditioned. Add points with distinct X values, reduce the degree of the polynomial, or try centering and scaling as described in HELP POLYFIT.
    Les mathématiques ne s'apprennent pas elles se comprennent.

  5. A voir en vidéo sur Futura
  6. #5
    inviteedc4fd3f

    Re : problème de fitage

    Merci pour cette reponse, je comprend mieux pourquoi les resultats ne sont pas terrible !
    Maintenand j'ai un autre problème : J'utilise la même fonction que polyfit dans Matlab mais je voudrais imposer que mon polynome passe par la première et la dernière valeur de mes vecteurs x et y! EN faisant

    function [p]= polyfitunevar (x,y,n)
    x = x(; y = y(;
    m = length(x)
    v = ones(m,n+1)
    for i=2:n+1, v(:,i) = x.*v(:,i-1), end
    p = (v\y)'
    endfunction

    on cherche la meilleur combinaison mais je n'impose pas que le premier points et le dernier points passent par une valeur exacte !
    Comment puis-je faire ?

    Merci

  7. #6
    KerLannais

    Re : problème de fitage

    Salut,

    Tu peux essayer ce programme, a priori il n'est pas optimal en terme de complexité mais il devrait donner le bon résultat:

    Code:
    function [p]=polyfitunevar(x,y,n)
    x=x(:);y=y(:);
    m=length(x);
    V=ones(m,n+1);
    for i=2:n+1
       V(:,i)=x.*V(:,i-1);
    end
    W=[V'*V,V(1,:)',V(m,:)';V(1,:),0,0;V(m,:),0,0];
    z=[V'*y;y(1);y(m)];
    q=W\z;
    p=q(1:n+1)';
    endfunction
    j'espère que je n'ai pas fait de faute de frappe. J'ai testé et ca avait l'air de fonctionner
    Les mathématiques ne s'apprennent pas elles se comprennent.

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/05/2011, 12h27
  2. Un petit problème qui me pause problème lol
    Par invitef2853e5d dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 31/03/2009, 15h28
  3. problème avec un lecteur mp4(le problème vient de l'ordinateur)
    Par mat_the_bad_boy dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 29/10/2007, 16h53
  4. TPE : le problème de la problématique... pose problème
    Par invitedea46a4f dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 21/09/2006, 18h45