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 :

Equivalent de trendline power de Excel ?


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut Equivalent de trendline power de Excel ?
    bonjour, je pense que ma reponse se trouve deja sur le forum, mais mes connaissances en maths sont trop mauvaises et je ne connais pas les juste termes a utiliser. soyez indulgents :p

    j'ai un set de données sous forme (t,w) en gros (temps,largeur) et je sais que mon objet evolue en fonction du temps avec une dependance w=a.t^n

    sous excel je fais un trendline power, afficher l'equation et j'ai ce que je cherche
    j'aimerais connaitre la fonction matlab qui me permettrais d'automatiser ca .... 500 trendline excel non merci :-/


    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Une solution avec l'Optimization Toolbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    t = linspace(0,10,100);
    w = (rand*t.^rand)+(2*rand(1,numel(t))-1)/10;
     
    x = lsqnonlin(@(x) myfun(x,w,t),[1;1]);
     
    figure
    plot(t,w,'r+',t,x(1)*t.^x(2),'b-')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function F = myfun(x,w,t)
     
    F = w - x(1)*t.^x(2);

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    wow toujours aussi rapide ici
    merci je vais essayer ca de suite :p

  4. #4
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    Je viens de tester, j'ai une erreur

    ??? Error: File: C:\MATLAB6p5p1\work\test.m Line: 4 Column: 16
    "identifier" expected, "(" found.
    J'ai regardé la syntaxe de la fonction et j'avoue être perdu, quel est l'intérêt du @(x) ici ? noobitude quand tu nous tiens ...

    J'ai aussi oublié de préciser, je suis sous MATLAB 6.5 sp1



    EDIT : je pense avoir compris pour le @(x) mais je seche total sur l'erreur, est-ce un probleme de version ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par psycoma Voir le message
    J'ai regardé la syntaxe de la fonction et j'avoue être perdu, quel est l'intérêt du @(x) ici ? noobitude quand tu nous tiens ...
    Ce sont des fonctions anonymes (anonymous functions).

    Citation Envoyé par psycoma Voir le message
    J'ai aussi oublié de préciser, je suis sous MATLAB 6.5 sp1
    Je ne me rappelle plus si ce type de fonction existait déjà sous cette version...

    Une alternative à tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = lsqnonlin(@myfun,[1;1]);
    et dans MYFUN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function F = myfun(x)
     
    t = linspace(0,10,100);
    w = (rand*t.^rand)+(2*rand(1,numel(t))-1)/10;
     
    F = w - x(1)*t.^x(2);

  6. #6
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    visiblement c'est la fonction lsqnonlin elle-meme qui n'existe pas O.o

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Undefined function or variable 'lsqnonlin'.
     
    Error in ==> C:\MATLAB6p5p1\work\test.m
    On line 1  ==> x = lsqnonlin(@myfun,[1;1]);

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Dut Voir le message
    Une solution avec l'Optimization Toolbox
    => http://www.mathworks.com/products/optimization/

    Tu peux récupérer une version d'essai de 15 jours : http://www.mathworks.com/products/op...ion/tryit.html


  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par psycoma Voir le message
    automatiser ca .... 500 trendline excel non merci :-/
    Sinon sans MATLAB : http://excel.developpez.com/cours/?page=prog

  9. #9
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    merci pour les liens

    a vrai dire j'utilisais excel comme exemple, mais determiner mon n fait partie d'une gros programme sous matlab.

    c'est une etape que je dois intergrer en vue , eventuellement de faire une inversion

  10. #10
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    bon ben j'ai plus qu'a aller pleurer chez mon boss, les trial ne sont pas disponibles pour les etudiants

    merci pour l'aide

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    euh... sinon il est toujours possible de résoudre une équation linéaire... dans l'espace logarithmique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y = a.t^n <=> ln(y) = ln(a) + n.ln(t) <=> Y = A + n.T
    => n = n
    => a = exp(A)


    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
    n = rand+2
    a = rand*5
     
    t = linspace(.1,10,100);
    w = (a*t.^n)+(2*rand(1,numel(t))-1)/100;
    w(w<=0) = eps;
     
    x = [log(t(:)) ones(numel(t),1) ]\log(w(:));
    % ou
    xx = pinv([log(t(:)) ones(numel(t),1) ])*log(w(:));
     
     
    figure
    subplot(2,1,1)
    plot(t,w,'r+',t,exp(x(2))*t.^x(1),'b-')
    title('Backslash \\')
    subplot(2,1,2)
    plot(t,w,'r+',t,exp(xx(2))*t.^xx(1),'b-')
    title('PINV')

  12. #12
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Une fonction toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function [c,res] = trendline(x,y)
     
    % Résolution ln(y) = ln(a) + n.ln(x)
    c = [log(x(:)) ones(numel(x),1)]\log(y(:));
     
    % a = exp(ln(a))
    c(2) = exp(c(2));
     
    % Residus    
    res = y - c(2)*x.^c(1);
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n = 0.1052;
    a = 4.8024;
     
    t = linspace(.1,10,100);
    w = (a*t.^n)+(2*rand(1,numel(t))-1)/10;
     
    [c, res] = trendline(t,w);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    c =
     
        0.1076
        4.7858
    Je ne sais pas si cette méthode est robuste... il faudra certainement penser à étudier les résidus...
    Images attachées Images attachées  

Discussions similaires

  1. Equivalent du normal.dot pour excel
    Par Shiven dans le forum Excel
    Réponses: 4
    Dernier message: 06/04/2014, 21h15
  2. [AC-2007] Equivalent fonction FIN.MOIS d'excel
    Par arouxy dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/12/2010, 21h46
  3. Equivalent à la fonction RECHERCHEV sous excel ?
    Par feboici dans le forum kettle/PDI
    Réponses: 9
    Dernier message: 06/11/2008, 17h39
  4. Equivalent du nb.si d'excel : DCOUNT()
    Par thierry46 dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/01/2008, 00h26
  5. Equivalent de Application.FileSearch sur Excel 2007
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2007, 17h09

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