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

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 3
    Points : 2
    Points
    2

    Par défaut Bug dans un programme.

    Bonjour à tous,

    Je vous écrit pour savoir si quelqu'un pourrait m'aider concernant un programme:
    L'idée est d'estimer les paramètres d'une courbe par la méthode des moindres carrés.

    Pour expliquer: au début de mon programme je crée moi-même une courbe. Par la suite je considère ne pas connaître les paramètres de cette courbe: je demande donc à l'utilisateur de rentrer des paramètres qu'il pense être les bon et l'ordinateur va s'approcher, par la méthode des moindres carrés, des paramètres réels.

    Je vous met mon programme:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         % Estimation des paramètres par méthode écart type minimum %
         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    clear all;
    close all;
    clc;
     
    N=input('Entrez le nombre de tirages N voulus : ');
    K=3;
     
    % -----------------------------------
    % Creation d'une courbe experimentale
    % -----------------------------------
     
    % Initialisation de la courbe
    a=input('Entrez la valeur du coeff directeur : ');
    b=input('Entrez la valeur de l ordonnee a l origine : ');
     
    % Graphe de la courbe
    for i= 1:N
        f(i)=a*i+b;
        u(i)=0.1*f(i);
        err(i)=u(i).*randn(1,1);
    end
     
    errorbar(f,err)
    hold on
     
    % -------------------------
    % Estimation des parametres
    % -------------------------
     
    Y=zeros(N,1); % Matrice y=f(x) reel
    X=zeros(N,1); % Matrice des x
    UY=zeros(N,1);% Matrice des incertitudes liees a chaque y
    F=zeros(N,1); % Matrice des valeurs mesurees
    P=zeros(K,1); % Matrice des parametres
     
    % Remplissage des matrices
    for i= 1:N
        X(i,1)=i;
        Y(i,1)=f(i);
        UY(i,1)=err(i);
    end
     
    % Paramètres initiales
    for i=1:K
      p(i)=input('Valeur du paramètre (ordre croissant) : ');
      P(i,1)=p(i);
    end
     
    % Premiere estimation des parametre
    [y]=(P,X); %Probleme pour appeler la fonction, bug du programme vient de la
     
    % Ecart-type entre la courbe et les points de mesure
    V=diag(UY.^2);
    S2_init=(1/(N-1))*((F-Y)'/V)*(F-Y);
     
    % Valeur de la variation des parametres
    eps=1e-4;
    iter=0;
    arret=1;
     
    while (iter<1000)&(arret>1e-3)
        iter=iter+1;
        S2(iter)=(1/(N-1))*((F-Y)'/V)*(F-Y);
        dP=P*eps;
        [y]=(P,X);
        dFdP=zeros(N,K);
     
        for i=1:K
          PdP=P;
          PdP(i)=P(i)+dP(i);
          dFdP=(:,i)=(([y]=(PdP,X))-([y]=(P,X)))/dP(i);
        end
     
        U=-0.5*dFdP'*inv(V)*(F-Y);
        H=0.5*dFdP'*inv(V)*dFdP;
     
        Delta_P=inv(H)*U;
        P=P+Delta_P;
        F = [y]=(P,X);
        S2(iter)=1/(N-1)*(F-Y)'/V*(F-Y);
        arret=abs(S2(iter)-S2_init)/S2_init;
     
        disp(iter,arret)
    end
     
     S2_final=S2(iter);
    Dans ce programme, j'utilise une fonction que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function [y] = fct(P,X)
     
    y=P(1,1).*exp(-((x-P(2,1)).^2)./P(3,1));
    Je pense que l'erreur vient de la syntaxe pour appeler la fonction dans le programme...
    Quelqu'un pourrait-il m'aider? Cela fait longtemps que je travaille dessus et je ne parviens pas à voir la solution.

    En vous remerciant d'avance pour toute réponse,
    Cordialement,
    Theafur.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    19 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 19 739
    Points : 53 396
    Points
    53 396
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    Déjà merci beaucoup pour cette réponse rapide.
    Mais le problème reste le même il me semble: lorsque j’exécute le programme, l'erreur s'affiche : " " 'fct' undefined ".

    Pourtant mes deux fichiers sont bien dans le même répertoire sur l'ordinateur. Je ne comprends pas pourquoi le programme principal n'arrive pas à appeler la fonction.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Ingénieur R&D freelance
    Inscrit en
    novembre 2006
    Messages
    19 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur R&D freelance

    Informations forums :
    Inscription : novembre 2006
    Messages : 19 739
    Points : 53 396
    Points
    53 396

    Par défaut

    Le fichier contenant la fonction se nomme-t-il fct.m ?
    Mes compétences :
    • conception mécanique 3D (Autodesk Fusion 360)
    • développement informatique (MATLAB, Python, C, VBA)
    • impression 3D (Ultimaker)
    • programmation de microcontrôleur (Microchip PIC et Arduino)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2018
    Messages : 3
    Points : 2
    Points
    2

    Par défaut

    Ah non en effet.

    C'est bon, le programme marche.

    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Bug dans un programme asynchrone
    Par GENDRAUD dans le forum C#
    Réponses: 2
    Dernier message: 15/09/2018, 23h31
  2. Bug dans mon programme de tirage
    Par jeanmarc41 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/04/2018, 17h02
  3. Un Bug dans mon programme
    Par Mr Ilias dans le forum C
    Réponses: 2
    Dernier message: 18/01/2012, 00h19
  4. bug dans mon programme (message d'erreur)
    Par maxmarie dans le forum Windows Mobile
    Réponses: 10
    Dernier message: 13/09/2007, 11h34
  5. Bug dans un programme sous 13H
    Par tixweb dans le forum Windows
    Réponses: 4
    Dernier message: 09/11/2006, 09h46

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