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 :

nlinfit et modele de fonction


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut nlinfit et modele de fonction
    Bonjour,

    Tout d'abord, merci pour le forum et à ceux qui répondent, tout y est bien pratique.
    Je cherche à utiliser la fonction nlinfit dans le cas suivant :

    J'ai une suite de données dans le domaine fréquentiel, qui ressemble à une fft d'une sinusoïde avec quelques harmoniques : soit, une série de pics, avec des amplitudes différentes.

    Je crée un modèle de cette courbe, par ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    beta=[0.2 50 5]
    fun=zeros(1,length(freq));
    for k=1:beta(3)
    fun(round((beta(2)*k*N/sr)+1))=beta(1)^(k-1);
    end
    func2=@(beta) fun; 
    [betaend]=nlinfit(func2,beta,freq,Sig)
    beta(1) correspond à l'amplitude des harmoniques, beta(2) correspond à la fréquence fondamentale, et beta(3) correspond au nombre d'harmoniques.
    freq correspond à la fréquence, et Sig à mes données. N vaut 4096, c'est le nombre de points dans ma fft, et sr c'est la fréquence d'échantillonnage qui vaut 44100/4. (ça permet d'avoir des fftbin tous les 2.7 Hz).

    Ce que je voudrais, c'est de trouver les paramètres optimaux de beta, pour que le modèle colle au mieux à mes données. Je me suis dit qu'en utilisant les moindres carrés non linéaires et l'algorithme de Gauss-Newton, il y avait moyen de trouver ça... C'est ce que fait la fonction nlinfit.

    J'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    ??? Error using ==> fcnchk at 108
    FUN must be a function, a valid string expression, or an inline function object.
     
    Error in ==> nlinfit at 108
    model = fcnchk(model);
     
    Error in ==> test4 at 70
    [betaend]=nlinfit(func2,beta,freq,Sig)
    Je pense à changer de modele, mais il me faudrait quelque chose en fonction de la fréquence ET du nombre d'harmoniques, et ça me parait un peu obscur pour le moment ... Auriez-vous des suggestions ?


    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    Salut à toi, et bienvenu parmi nous.

    Es-tu sûr d'avoir mis tes paramètres dans l'ordre ?

    beta = nlinfit(X,y,fun,beta0) returns a vector beta of coefficient estimates for a nonlinear regression
    Le manuel semble indiquer que nlinfit a une signature différente de celle que tu tentes d'utiliser.

    [edit] PS: ton message est effectivement plus clair avec les balises [code] [/edit]

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Oui, désolé pour les balises, j'ai lu la "notice" après avoir posté mon message, et je me suis empressé de corriger

    Oui effectivement, il y a un soucis dans l'ordre des parametres, mais c'est suite à divers modifs, et j'ai oublié de changer. La journée fut rude! Alors voici ce à quoi devrait ressembler l'utilisation du nlinfit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [betaend]=nlinfit(freq,Sig,func2,beta)
    Et l'erreur est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ??? Error using ==> nlinfit at 120
    Error evaluating model function '@(beta)fun'.
     
    Error in ==> test4 at 70
    [betaend]=nlinfit(freq,Sig,func2,beta)
     
    Caused by:
        Error using ==> @(beta)fun
        Too many input arguments.
    Je pense que c'est lors de ma création de fonction, car elle ne dépend pas explicitement d'un paramètre comme la fréquence. Le modèle que je devrais implémenter se trouve comme indiqué dans la pièce jointe... Et ça me pose problème! le delta c'est une impulsion de dirac unité. Et je n'arrive pas à implémenter ça... ( J'avoue aussi avoir le cerveau en compote ce soir). le f0 correspond à la fondamentale (soit aussi beta(2)).
    Images attachées Images attachées  

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Points : 148
    Points
    148
    Par défaut
    As-tu trouvé une solution à ton problème ou est-il toujours d'actualité ?

    Bon, je ne suis pas très au fait du calcul fréquentiel, mais au besoin je pourrais peut-être regarder.

Discussions similaires

  1. [ZF 1.11] Génération des fonction set dans classes model
    Par frjover dans le forum Zend Framework
    Réponses: 1
    Dernier message: 18/07/2012, 21h24
  2. Réponses: 3
    Dernier message: 16/05/2012, 14h57
  3. Creer bounding en fonction du Model
    Par Loenix dans le forum XNA/Monogame
    Réponses: 9
    Dernier message: 11/01/2012, 00h14
  4. Fonction C simulation model
    Par johnny6541 dans le forum MATLAB
    Réponses: 0
    Dernier message: 03/03/2011, 14h24
  5. [ZF 1.10] Fonction du model s'exécutant deux fois et routeur
    Par hackiles dans le forum Zend Framework
    Réponses: 7
    Dernier message: 17/12/2010, 23h05

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