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 :

Ecrire une suite dans Matlab


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut Ecrire une suite dans Matlab
    Bonjour,

    je dois écrire deux suites différentes sous Matlab dont les valeurs seront mémorisées dans deux vecteurs respectifs. Puis je dois dire ce que je constate.
    Je n'arrête pas de faire des effets mais impossible de trouver la bonne formulation pour les suites ! Matlab me renvoie à chaque fois un message d'erreur...

    Les suites :

    On considère les deux suites x(n) et y(n) définies par :

    x(n) = 1 si n compris entre 0 et 1, et
    x(n) = x(n-1)+x(n-2) si n est supérieur ou égal à 2



    y(n)= [5+ racine de 5]/10.[1+ racine de 5]/2 le tout puissance n + [5- racine de 5]/10.[1- racine de 5]/2 le tout puissance n



    Deux de mes essais pour la première suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    x(n) = [ ];
    for n = 0:25
    if n == 0
    x(n) = 1
    elseif n == 1
    x(n)= 1
    else
    x(n)= x(n-1) + x(n-2)
    end
    end
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n = 0:25
        x(n) = [ ];
       if 0 <= n <= 1
          x(n) = 1
       elseif n >= 2
           x(n)= x(n-1) + x(n-2)
       end

    En fait il refuse à chaque fois x(n) = [ ]; et je ne vois pas pourquoi??
    Qu'en pensez-vous? Pouvez-vous m'éclairer SVP? Merci !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 45
    Points : 50
    Points
    50
    Par défaut
    salut

    Premiere remarque:
    Dans matlab les indices des tableaux commence a 1
    donc x(0) n'existe pas

    deuxieme remarque:
    pour declare un tableau utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x=[];
    ou
    x=zeros(26,1);
    et pas x(n)=[]


  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par Alixam Voir le message

    On considère les deux suites x(n) et y(n) définies par :
    [B]
    x(n) = 1 si n compris entre 0 et 1, et
    attention, ici n est ton indice du vecteur x . n ne peut être qu'un entier positif non nul !!

    tout ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >> A(1.25)
    ??? Subscript indices must either be real positive integers or logicals.
     
    >> A(-5)
    ??? Subscript indices must either be real positive integers or logicals.
     
    >> A(0)
    ??? Subscript indices must either be real positive integers or logicals.
    puisque ton vecteur est une suite de nombre, tu comprends donc que l'indice (c'est à dire la position des valeurs dans le vecteur) ne peut pas être nul, décimal ou négative !
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 45
    Points : 50
    Points
    50
    Par défaut
    Utilise plutot:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    x = zeros(26,1);
    for n = 1:26
        if ((n == 1) || (n == 2))
            x(n) = 1;
        else
            x(n)= x(n-1) + x(n-2);
        end
    end
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    x = zeros(26,1);
    for n = 0:25
        if ((n == 0) || (n == 1))
            x(n+1) = 1;
        else
            x(n+1)= x(n) + x(n-1);
        end
    end
    Le but est de comprendre donc n'hesite pas a poser question.
    Enjoy.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Merci à nouveau...

    Je ne sais même pas ce qu'est un tableau...

    Il faut alors que je dise que n compris entre 1 et 26 au lieu de 0 et 25?

    Et le reste qu'en pensez-vous?

    Allez, je vais essayer !

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Citation Envoyé par Alixam Voir le message
    Allez, je vais essayer !
    C'est la meilleur des choses à faire... te mâcher tout le travail ne serait pas le meilleur service à te rendre au final
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, 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)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Je trouve alors que x est un vecteur de 1... C'est peut-etre ce que je dois en effet constater puisqu'on me pose la question...

    Je vais essayer d'écrire la seconde suite et vous demanderai peut-être une nouvelle fois de l'aide

  8. #8
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par Alixam Voir le message
    Je trouve alors que x est un vecteur de 1... C'est peut-etre ce que je dois en effet constater puisqu'on me pose la question...
    Non, c'est la suite de Fibonacci si mes souvenirs sont bons.
    Il doit y avoir un souci dans ton code.
    Si tu n'as que des 1 c'est qu'il ne passe jamais dans le ELSE ce qui n'est pas normal.
    Peux-tu nous montrer ton code ? (pourtant ton code de ton 1er code mis à part l'initialisation et le problème d'indexation à 0 me paraissait bien)
    Règles du Forum

    Adepte de la maïeutique

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Voilà ce que j'ai tapé Caro-Line :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n = 1:26
        x = [ ];
       if 0 <= n <= 1
          x(n) = 1
       elseif n >= 2
           x(n)= x(n-1) + x(n-2)
       end
    okaido je ne connais pas les signes "||" ?

  10. #10
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Tu n'aurais pas un peu oublié la boucle FOR ?
    De plus sur ton 1er IF la condition >= 0 ne sert à rien puisque tu as défini n à partir de 1.
    Et on ne peut mettre la double condition ainsi, il faut utiliser les opérateurs conditionnels (&& ET, || OU).
    Mais tu n'en as pas forcément besoin (surtout si on ne te les a pas encore appris).

    Il te suffit de reprendre le 1er code de ton 1er post et de modifier les 2 premières lignes avec les différents conseils qui t'ont été donnés.
    Règles du Forum

    Adepte de la maïeutique

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Et avec le premier code je trouve en effet une suite de nombres particulière...

    Pour la seconde suite j'ai suivi vos conseils mais il y a apparemment encore un problème..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n = 1:26
    y = [ ];
    for n>=1
        y(n) = ((5+sqrt(5))/10)*(((1-sqrt(5))/2)^n)+((5-sqrt(5))/10)*(((1-sqrt(5))/2)^n)
    end
    Est-ce que je mets quand même " n>=1" qui était à l'origine n supérieur ou égal à zéro mais que j'ai remplacé vu qu'on commence à 1 et fini à 26?

  12. #12
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Relis bien l'aide de FOR dans MATLAB, ce n'est pas ainsi qu'on l'utilise.
    Règles du Forum

    Adepte de la maïeutique

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Merci Caro-Line et en effet je ne connais pas ces opérateurs...

    Voici alors mon code pour la 1e suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    x(n) = [ ];
    for n = 1:26
    if n == 1
    x(n) = 1
    elseif n == 2
    x(n)= 1
    else
    x(n)= x(n-1) + x(n-2)
    end
    end
    mais j'ai remplacé le 0 et le 1 par 1 et 2.

    Est-ce bien juste? Et c'est donc la suite de Fibonacci?

    J'attends vos avis pour la 2e suite SVP.

    Merci pour tout !!

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par Alixam Voir le message
    Et avec le premier code je trouve en effet une suite de nombres particulière...

    Pour la seconde suite j'ai suivi vos conseils mais il y a apparemment encore un problème..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n = 1:26
    y = [ ];
    for n>=1
        y(n) = ((5+sqrt(5))/10)*(((1-sqrt(5))/2)^n)+((5-sqrt(5))/10)*(((1-sqrt(5))/2)^n)
    end
    Est-ce que je mets quand même " n>=1" qui était à l'origine n supérieur ou égal à zéro mais que j'ai remplacé vu qu'on commence à 1 et fini à 26?
    la fenêtre principal de matlab doit et sera toujours ton meilleur ami pour vérifier ton code.
    Dans un premier temps tu défini n comme suis :
    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
    >> n = 1:26
     
    n =
     
      Columns 1 through 12 
     
         1     2     3     4     5     6     7     8     9    10    11    12
     
      Columns 13 through 24 
     
        13    14    15    16    17    18    19    20    21    22    23    24
     
      Columns 25 through 26 
     
        25    26
    donc très bien, mais ensuite tu défini ta boucle comme suis :

    ce qui donne si tu tapes ça dans la fenêtre principale :
    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
     
    >> n>=1
     
    ans =
     
      Columns 1 through 12 
     
         1     1     1     1     1     1     1     1     1     1     1     1
     
      Columns 13 through 24 
     
         1     1     1     1     1     1     1     1     1     1     1     1
     
      Columns 25 through 26 
     
         1     1
    Donc ici tu commets deux erreurs, la première est syntaxique : la boucle for doit être de la forme comme l'exemple ci dessous (venant de l'aide matlab) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             FOR I = 1:N,
                 FOR J = 1:N,
                     A(I,J) = 1/(I+J-1);
                 END
             END
    La deuxième erreur est mathématique, comme tu peux le voir ta commande ne donne que des 1, donc pas de boucle possible, enfin si mais il t'écrase donc la valeur de l'indice 1 (x(1)) à chaque passage...

    bon courage
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 45
    Points : 50
    Points
    50
    Par défaut
    C'est la meilleur des choses à faire... te mâcher tout le travail ne serait pas le meilleur service à te rendre au final
    Je me sens vise
    Okydoky. J'ai compris, je ne recommencerai plus.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    ok merci Newenda. Je pense avoir mieux compris à présent l'utilisation de for et mes erreurs... J'y retourne

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Et là qu'en pensez-vous ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    y = [ ];
    for n = 1:26
    if n>=1
        y(n) = ((5+sqrt(5))/10)*(((1-sqrt(5))/2)^n)+((5-sqrt(5))/10)*(((1-sqrt(5))/2)^n)
    end
    end
    En plus j'obtiens un résultat mais par contre je ne sais pas ce qu'il peut signifier...

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par Alixam Voir le message
    Merci Caro-Line et oen effet je ne connais pas ces opérateurs...

    Voici alors mon code pour la 1e suite :

    x(n) = [ ];
    for n = 1:26
    if n == 1
    x(n) = 1
    elseif n == 2
    x(n)= 1
    else
    x(n)= x(n-1) + x(n-2)
    end
    end

    mais j'ai remplacé le 0 et le 1 par 1 et 2.

    Est-ce bien juste? Et c'est donc la suite de Fibonacci?

    J'attends vos avis pour la 2e suite SVP.

    Merci pour tout !!
    Prends un crayon et un papier et suis ton code très simplement :

    Tu dis :

    pour n comprit entre 1 et 26 avec un pas de 1 (n = 1,2,3,4 etc..)
    si n = 1
    alors x(1) = 1
    si n = 2
    alors x(2) = 1
    sinon
    x(3) = x(3-1)+x(3-2) = x(2) + x(1)
    x(4) = x(4-1)+x(4-2) = x(3) + x(2)
    ETC...



    Après c'est une question de maths.. et je pense qu'il y a une erreur car dans une suite il est impossible que deux valeurs soient les mêmes et dans ton code x(1) = x(2), ceci ne me parait pas raisonnable : )


    Citation Envoyé par Alixam Voir le message
    Et là qu'en pensez-vous ???

    y = [ ];
    for n = 1:26
    if n>=1
    y(n) = ((5+sqrt(5))/10)*(((1-sqrt(5))/2)^n)+((5-sqrt(5))/10)*(((1-sqrt(5))/2)^n)
    end
    end

    En plus j'obtiens un résultat mais par contre je ne sais pas ce qu'il peut signifier...
    Ici ta condition IF ne sert a rien car n est toujours >=1 puisque tu l'as défini comme ça... : )
    OS : taff > Window 7 32bit - Home > Windows 7 64bit
    Matlab : taff > v2013b - Home > r2009a

  19. #19
    Expert éminent sénior
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Points : 14 830
    Points
    14 830
    Par défaut
    Citation Envoyé par Newenda Voir le message
    Après c'est une question de maths.. et je pense qu'il y a une erreur car dans une suite il est impossible que deux valeurs soient les mêmes et dans ton code x(1) = x(2), ceci ne me parait pas raisonnable : )
    Mes maths sont loin derrière moi mais sisi c'est possible : c'est la suite de Fibonacci (il manque juste le 0 de départ)
    Règles du Forum

    Adepte de la maïeutique

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Points : 22
    Points
    22
    Par défaut
    Ok cela me paraissait bizarre

    Donc mon code pour le 1e suite est juste? J'ai en effet vu que cela correspond à la suite de Fibonacci.

    Voici ma correction pour la seconde suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    y = [ ];
    for n = 1:26
        y(n) = ((5+sqrt(5))/10)*(((1-sqrt(5))/2)^n)+((5-sqrt(5))/10)*(((1-sqrt(5))/2)^n)
    end
    et je trouve donc le même résultat. Par contre si vous avez une idée de quelle suite il s'agit cette fois???

    Merci.

Discussions similaires

  1. Ecrire à la suite dans une cellule
    Par jack51106 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/01/2008, 13h24
  2. [VB6]Ecrire une fonction dans ma feuille Excel
    Par ToxiK dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/06/2006, 20h04
  3. ecrire une chaine dans un fichier [prob]
    Par rogerio dans le forum C++
    Réponses: 5
    Dernier message: 31/05/2006, 02h20
  4. Ecrire une variable dans un fichier
    Par slam dans le forum Général Python
    Réponses: 2
    Dernier message: 14/04/2006, 18h58
  5. Ecrire une variable dans un txt
    Par zelgolhal dans le forum MFC
    Réponses: 1
    Dernier message: 16/08/2005, 09h17

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