IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Fit d'une courbe en loi de puissance et loi linéaire


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Fit d'une courbe en loi de puissance et loi linéaire
    Bonjour à tous,

    J'essaie actuellement de fitter une courbe qui obéit à une loi de puissance pour les petites fréquences et à une loi linéaire pour les fréquences plus élevées (modèle viscoélastique) de la forme: G=G0*f^alpha + k*f, ou G est le module et f la fréquence. Problème: je n'y arrive pas. Pour la partie loi de puissance ca semble marcher avec la fonction lsqnonlin mais c'est tout pour l'instant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    X0=[100 0.1];
    [f1,resnorm] = lsqnonlin(@powerfit,X0,[],[],options,f,G_prime)
    G0_prime =  f1(1);
    alphaprime = f1(2);
    freq = logspace(-2,1,100);
    fitResultG_prime = G0_prime.*freq.^alphaprime;
    Merci pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur en science de l'environnement
    Inscrit en
    Août 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur en science de l'environnement

    Informations forums :
    Inscription : Août 2013
    Messages : 97
    Points : 149
    Points
    149
    Par défaut
    Et qu'est ce qui ne fonctionne pas ?

    Pourquoi est ce que tu ne séparerais pas ton fit en deux ?

    Avec un seuil

    if freq < seuil
    monfit = power_fit
    else
    monfit = linear_fit
    end

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur en science de l'environnement
    Inscrit en
    Août 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur en science de l'environnement

    Informations forums :
    Inscription : Août 2013
    Messages : 97
    Points : 149
    Points
    149
    Par défaut
    Et sinon tu peux utiliser d'autre méthodes non linéaire:

    - Un fit gaussien devrait bien fonctionner dans ton cas

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Petchi merci pour ta réponse,

    Ce n'est pas une mauvaise idée d'introduire une fréquence seuil seulement comme mes données sont experimentales, je ne sais pas exactement à quelle fréquence le module devient linéaire. En fait, je veux juste fitter ma courbe avec une équation du type G= G0*freq^alpha + k*freq. Aurais-tu une idée pour coder ça ? Merci !

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    parfois fitter une fonction composée d'une puissance et d'une partie linéaire pose problème du fait des ordre de grandeur très different entre ces deux parties
    une idée est de fitter le logarithme de cette fonction plutôt -> la partie puissance (exponentielle) devient linéaire

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut le fab et merci de ta réponse. Aurais-tu une idée pour coder ce que tu conseilles ? Je ne suis pas très à l'aise en programmation. Merci beaucoup!

  7. #7
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 882
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 882
    Points : 3 432
    Points
    3 432
    Par défaut
    salut

    il me semble que tu as fait 99% du boulot déjà !
    reprend ce que tu as fait pour la partie puissance et généralise le sur la fonction totale
    en général pour fitter à des mesures expérimentales (si j'ai bien compris c'est ce que tu essayes de faire), j'utilise plutôt lsqcurvfit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    % point de départ de l'optimisation  (G0,alpha,k)
    x0=[100 0.1 1]; 
     
    % fonction à fitter aux mesures xdata(= vecteur fréquences), ydata(= vecteur mesures)
    fcn2fit = @(freq,G0,alpha,k) G0.*freq.^alpha + k.*freq;
     
    % fitting
    x= lsqcurvefit(@(x,xdata) fcn2fit(xdata,x(1),x(2),x(3)),x0,xdata,ydata,[],[],options);
     
    % on récupère la solution
    G0 =  x(1);
    alpha = x(2);
    k = x(3);
     
    % on compare le fitting et les mesures
    fitResultG = fcn2fit(xdata,G0,alpha,k);
    figure
    semilogx(xdata,ydata);hold on
    semilogx(xdata,fitResultG )
    legend('mesures','fitting')

Discussions similaires

  1. Régression (fit) d'une courbe par une fonction puissance
    Par microwatiboy dans le forum MATLAB
    Réponses: 4
    Dernier message: 11/02/2015, 13h38
  2. Problème pour réaliser le fit d'une courbe.
    Par QuenL07 dans le forum ImageJ
    Réponses: 0
    Dernier message: 12/02/2014, 16h42
  3. [XL-2007] Approximation d'une courbe par la fonction puissance (y = A * x^B)
    Par Kimy_Ire dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/11/2012, 10h41
  4. [Débutant] fitting d'une courbe sur curvefitting toolbox
    Par mounabs dans le forum MATLAB
    Réponses: 0
    Dernier message: 23/01/2010, 13h21
  5. Fitting d'une courbe
    Par astragoth dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 21/07/2009, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo