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 :

Régression particulière MATLAB


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Régression particulière MATLAB
    Bonjour,

    J'ai deux liste de points contenant chacune 77 éléments. La première liste représente un débit thermique D et la seconde des températures T.

    Je voudrais faire passer une courbe de régression d'équation T= alpha+beta/(1-exp(gamma/D)) par ses point et déterminer les meilleurs coefficients alpha,beta,gamma possibles.

    Pour cela, j'avais penser utiliser la méthodes des moindres carrées. Pour minimiser la somme des erreurs au carré, j'ai dérivé celle-ci par rapport à alpha, beta et gamma. En égalant ces 3 équations à 0, j'ai donc trois équations à trois inconnues alpha, beta et gamma. Puis en simplifiant le système d'équations, je tire alpha=fonction1(beta,gamma) et beta=fontion2(gamma) des 2 premières équations. Donc en remplaçant mes alpha et beta dans la 3ème équation, je trouve une équation ne dépendant que de gamma de la forme fonction3(gamma)=0.

    A l'aide d'un solve de la fonction3, il devrait m'être facile de trouver gamma (et déduire alors beta, puis alpha). Seulement ça n'a pas l'air de marcher, probablement parce que le gamma est inclus dans un nombre important de somme dans ma fonction3 et il devient donc difficile à calculer.

    Est-ce bien pour cela que ma méthode ne convient pas ? Dans ce cas, y aurait-il une méthode plus simple déterminer les meilleurs coefficients alpha,beta,gamma possible?

    J'espère ne pas avoir été trop confus dans mes explications ...
    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    function [Y] = fonction3(gamma)
    M=[0.00287472       235
    0.00271502       245
    0.00287472       240
    0.00287472       240
    0.00296184       240
    0.00287472       235
    0.00287472       240
    0.00305439       245
    0.00325802       240
    0.00287472       245
    0.00305439       240
    0.00305439       240
    0.00279729       240
    0.00271502       235
    0.00257212       240
    0.0024081        250
    0.00225759       230
    0.00207699       260
    0.00332318       235
    0.00207699       245
    0.00272839       240
    0.00157347       270
    0.00152579       260
    0.00189896       250
    0.00166159       270
    0.00138466       270
    0.00129812       270
    0.00166159       265
    0.00131872       265
    0.00115388       270
    0.00123081       275
    0.00141412       265
    0.00117843       285
    0.00117843       285
    0.00117843       270
    0.00141412       270
    0.00141412       270
    0.00115388       275
    0.00110773       285
    0.00110773       270
    0.00110773       280
    0.00103849       275
    0.00106512       280
    0.00106512       280
    0.00104502       290
    0.00095002       290
    0.00104502       290
    0.00098904       280
    0.00110773       300
    0.00092311       290
    0.00110773       265
    0.00092311       290
    0.00108957       285
    0.00108957       265
    0.00083749       320
    0.00078674       305
    0.00079123       315
    0.00092311       300
    0.00092311       290
    0.00088618       300
    0.00088618       300
    0.00082054       300
    0.00082054       310
    0.00066464       335
    0.00083079       295
     0.0013628       255
     0.0012382       265
     0.0012382       265
     0.0012382       260
    0.00119058       270
     0.0012382       255
     0.0012382       270
    0.00114648       285
     0.0012382       290
     0.0012382       290
    0.00103183       300
    0.00103183       295];
     
    % Calcul des coefficients servant à trouver alpha et beta
     
        Mant1=M(1,1);
     
        for i=2:77
     
            a1=1/(1-exp(gamma/M(i,1)))+1/(1-exp(gamma/Mant1));
     
            Mant1=M(i,1);
     
        end
     
     
        Mant1=M(1,1);
     
        for i=2:77
     
            a2=1/(1-exp(gamma/M(i,1)))^2+1/(1-exp(gamma/Mant1))^2;
     
            Mant1=M(i,1);
     
        end
     
     
        Mant1=M(1,1);
        Mant2=M(1,2);
     
        for i=2:77
     
            a3=M(i,2)/(1-exp(gamma/M(i,1)))^2+Mant2/(1-exp(gamma/Mant1))^2;
     
            Mant1=M(i,1);
            Mant2=M(i,2);
     
        end
     
     
        Mant2=M(1,2);
     
        for i=2:77
     
            a0=1/77*(M(i,2)+Mant2);
     
            Mant2=M(i,2);
     
        end
     
    % definition de alpha et beta
     
        Beta=(a3/a2-a0*a1/a2)/(1-a1^2/a2);
     
        Alpha=a0-Beta*a1;
     
    % Calcul des coefficients servant à trouver gamma
     
        Mant1=M(1,1);
     
        for i=2:77
     
            b1=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+exp(gamma/Mant1)/(Mant1*(1-exp(gamma/Mant1))^2);
     
            Mant1=M(i,1);
     
        end
     
     
        Mant1=M(1,1);
     
        for i=2:77
     
            b1=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+exp(gamma/Mant1)/(Mant1*(1-exp(gamma/Mant1))^2);
     
            Mant1=M(i,1);
     
        end
     
     
        Mant1=M(1,1);
     
        for i=2:77
     
            b2=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^3)+exp(gamma/Mant1)/(Mant1*(1-exp(gamma/Mant1))^3);
     
            Mant1=M(i,1);
     
        end
     
     
        Mant1=M(1,1);
        Mant2=M(1,2);
     
        for i=2:77
     
            b3=M(i,2)*exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+Mant2*exp(gamma/Mant1)/(Mant1*(1-exp(gamma/Mant1))^2);
     
            Mant1=M(i,1);
            Mant2=M(i,2);
     
        end
     
    % definition de Y
     
        Y=b3-Alpha*b1-Beta*b2;
     
     
    end

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Mant1=M(1,1);
     
        for i=2:77
     
            a1=1/(1-exp(gamma/M(i,1)))+1/(1-exp(gamma/Mant1));
     
            Mant1=M(i,1);
     
        end
    Je ne vois pas l'utilité de cette boucle, ainsi que toutes les autres que tu as faite.
    Déjà pour simplifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a1=1/(1-exp(gamma/M(i,1)))+1/(1-exp(gamma/M(i-1,1)));
    Simplification que tu peux aussi appliquer aux autres...
    Mais le problème c'est qu'au final a1, a2... ne prendront que les valeurs calculées pour i=77, sans se soucier des itérations précédentes.

    Je penserai plutôt à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i=2:77
        a1(i)=1/(1-exp(gamma/M(i,1)))+1/(1-exp(gamma/M(i-1,1)));
    end
    Dernière modification par Invité ; 11/08/2010 à 11h33.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci, c'est vrai que ça simplifie pas mal la fonction !!

    Cependant même avec ça j'ai toujours le même problème quand je veux trouver mon gamma tel que fonction3(gamma)=0. Matlab revoit un message d'erreur renvoyant au script du solve ...

    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
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    function [Y] = fonction3bis(gamma)
    M=[0.00287472       235
    0.00271502       245
    0.00287472       240
    0.00287472       240
    0.00296184       240
    0.00287472       235
    0.00287472       240
    0.00305439       245
    0.00325802       240
    0.00287472       245
    0.00305439       240
    0.00305439       240
    0.00279729       240
    0.00271502       235
    0.00257212       240
    0.0024081        250
    0.00225759       230
    0.00207699       260
    0.00332318       235
    0.00207699       245
    0.00272839       240
    0.00157347       270
    0.00152579       260
    0.00189896       250
    0.00166159       270
    0.00138466       270
    0.00129812       270
    0.00166159       265
    0.00131872       265
    0.00115388       270
    0.00123081       275
    0.00141412       265
    0.00117843       285
    0.00117843       285
    0.00117843       270
    0.00141412       270
    0.00141412       270
    0.00115388       275
    0.00110773       285
    0.00110773       270
    0.00110773       280
    0.00103849       275
    0.00106512       280
    0.00106512       280
    0.00104502       290
    0.00095002       290
    0.00104502       290
    0.00098904       280
    0.00110773       300
    0.00092311       290
    0.00110773       265
    0.00092311       290
    0.00108957       285
    0.00108957       265
    0.00083749       320
    0.00078674       305
    0.00079123       315
    0.00092311       300
    0.00092311       290
    0.00088618       300
    0.00088618       300
    0.00082054       300
    0.00082054       310
    0.00066464       335
    0.00083079       295
     0.0013628       255
     0.0012382       265
     0.0012382       265
     0.0012382       260
    0.00119058       270
     0.0012382       255
     0.0012382       270
    0.00114648       285
     0.0012382       290
     0.0012382       290
    0.00103183       300
    0.00103183       295];
     
    % Calcul des coefficients servant à trouver alpha et beta
     
     
        for i=2:77
     
            a1(i)=1/(1-exp(gamma/M(i,1)))+1/(1-exp(gamma/M(i-1,1)));
     
        end
     
     
     
        for i=2:77
     
            a2(i)=1/(1-exp(gamma/M(i,1)))^2+1/(1-exp(gamma/M(i-1,1)))^2;
     
        end
     
     
     
        for i=2:77
     
            a3(i)=M(i,2)/(1-exp(gamma/M(i,1)))^2+M(i-1,2)/(1-exp(gamma/M(i-1,1)))^2;
     
        end
     
     
        for i=2:77
     
            a0(i)=1/77*(M(i,2)+M(i-1,2));
     
        end
     
    % definition de alpha et beta
     
        Beta=(a3(77)/a2(77)-a0(77)*a1(77)/a2(77))/(1-a1(77)^2/a2(77));
     
        Alpha=a0(77)-Beta*a1(77);
     
    % Calcul des coefficients servant à trouver gamma
     
     
        for i=2:77
     
            b1(i)=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^2);
     
        end
     
     
        for i=2:77
     
            b1(i)=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^2);
     
     
        end
     
     
        for i=2:77
     
            b2(i)=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^3)+exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^3);
     
        end
     
     
        for i=2:77
     
            b3(i)=M(i,2)*exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+M(i-1,2)*exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^2);     
     
        end
     
    % definition de Y
     
        Y=b3(77)-Alpha*b1(77)-Beta*b2(77);
     
     
    end

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ou encore plus simple, tu peux rassembler tes boucles en une seule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for i=2:77
            a1(i)=1/(1-exp(gamma/M(i,1)))+1/(1-exp(gamma/M(i-1,1)));
            a2(i)=1/(1-exp(gamma/M(i,1)))^2+1/(1-exp(gamma/M(i-1,1)))^2;
            a3(i)=M(i,2)/(1-exp(gamma/M(i,1)))^2+M(i-1,2)/(1-exp(gamma/M(i-1,1)))^2;
            a0(i)=1/77*(M(i,2)+M(i-1,2));
            b1(i)=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^2);
            b2(i)=exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^3)+exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^3);
            b3(i)=M(i,2)*exp(gamma/M(i,1))/(M(i,1)*(1-exp(gamma/M(i,1)))^2)+M(i-1,2)*exp(gamma/M(i-1,1))/(M(i-1,1)*(1-exp(gamma/M(i-1,1)))^2);     
    end
    Par contre comme je te l'ai dit au premier post, cette boucle ne sert toujours à rien par rapport à ce que tu fais par la suite: tu prends seulement en considération le dernier point i=77.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2010
    Messages : 58
    Points : 53
    Points
    53
    Par défaut
    j'ai pas regardé ton code et seulement lu en travers le sujet.

    ma question est : pourquoi ne pas passé par un fminsearch ( lsqcurvefit dispo en toolbox je crois) ou encore l'antislah qui fait aussi du moindre carré?

    Créé ton code est une nécessite peut-être? Mais avec fminsearch ou l'antislash tu peux faire tous et n'importe quoi en moindre carré.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oui effectivement le lsqcurvefit dispo semble être pas mal pour ce que je cherche, même si les valeurs de mes coefficients de régression alpha, béta et gamma dépendent quand même beaucoup du vecteurs d'initialisation. Merci !

Discussions similaires

  1. [Débutant] régression simple sous matlab
    Par ghada97 dans le forum MATLAB
    Réponses: 14
    Dernier message: 25/11/2014, 12h31
  2. Réponses: 2
    Dernier message: 23/01/2011, 23h01
  3. [Débutant] matlab matrice particulière
    Par bastonman dans le forum MATLAB
    Réponses: 6
    Dernier message: 15/07/2009, 21h20
  4. régression linéaire stepwise sur matlab 6.1
    Par fd1954 dans le forum MATLAB
    Réponses: 1
    Dernier message: 12/06/2009, 21h04

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