Maple additionner les éléments de 2 listes entres-eux.....?
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Maple additionner les éléments de 2 listes entres-eux.....?



  1. #1
    Guimzo

    Maple additionner les éléments de 2 listes entres-eux.....?


    ------

    Bonjour,



    Soit les 2 listes suivantes :


    l1:=[1,3,5,7]
    l2:=[2,4,6,8]


    Comment avoir une autre liste qui soit la somme de chaque élément de l1 et de l2 c'est à dire une liste :

    s:= [3,5,7,9,5,7,9,11,7,9,11,13,9,1 1,13,15]


    En essayant avec

    restart;
    Digits:=15;
    l1:=[1,3,5,7];
    l2:=[2,4,6,8];
    s:=l1+l2;
    Digits := 15
    l1 := [1, 3, 5, 7]
    l2 := [2, 4, 6, 8]
    s := [3, 7, 11, 15]


    Il n'est envoyé que la somme de 1+2 ; 3+4 ; 5+6 ; 7+8 ;

    -----

  2. #2
    Tryss

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Dans ce cas il n'y a pas 36 solutions : il faut utiliser des boucles. Je n'utilise pas maple, mais ça revient à faire (en scilab) :

    Code:
    l=list();
    
    for i=1:size(l1) do
        for j=1:size(l2) do
             l($+1) = l1(i)+l2(j);
       end
    end
    
    l

  3. #3
    Guimzo

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par Tryss Voir le message
    Dans ce cas il n'y a pas 36 solutions : il faut utiliser des boucles. Je n'utilise pas maple, mais ça revient à faire (en scilab) :
    Code:
    l=list();
    for i=1:size(l1) do
        for j=1:size(l2) do
             l($+1) = l1(i)+l2(j);
       end
    end
    l

    Bonjour Tryss,



    Merci pour ton aide.
    Mais comment l'adapter à Maple..?
    Sinon en essayant avec la fonction " do " le seul probléme c'est que il y à plusieurs séries de " s " qui sont envoyées.....comment faire qu'il n'y ait qu'une seule
    séquence "s" avec tous les résultats voulus....??




    >restart;
    > Digits:=15;
    > l1:=[1,3,5,7];
    > l2:=[2,4,6,8];
    > for x in l1 do s:=seq(x+n,n=l2);od;
    >
    >


    <RÉSULTATS RENVOYÉS>


    Digits := 15
    l1 := [1, 3, 5, 7]
    l2 := [2, 4, 6, 8]
    s := 3, 5, 7, 9

    s := 5, 7, 9, 11

    s := 7, 9, 11, 13

    s := 9, 11, 13, 15

    Comment faire que le résultat soit une seule séquence "s"

    s:= 3,5,7,9,5,7,9,11,7,9,11,13,9,1 1,13,15

  4. #4
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Salut, une autre solution si on n'aime pas les boucles (en fait, les boucles sont cachées dans les fonctions de Maple, donc je pense que mon algorithme est moins efficace que celui de Tryss ).

    L'idée est de remarquer que si l1 est un vecteur colonne et l2 un vecteur ligne, et si on veut des produits au lieu de somme, alors le produit l1.l2 donne directement le résultat (sous forme de matrice) . Il suffit d'utiliser la fonction map de Maple avec des exponentielles et des logarithmes pour obtenir le résultat désiré:

    Code:
    somme:=proc(l1,l2)
    local e1,e2;
    
    e1:=convert(map(exp,l1),ColumnVector);
    e2:=convert(map(exp,l2),RowVector);
    
    return convert(map(log, e1.e2),list);
    end proc;
    Dernière modification par taladris ; 26/07/2012 à 23h39.

  5. A voir en vidéo sur Futura
  6. #5
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Salut,

    Citation Envoyé par Guimzo Voir le message
    Digits:=15;
    La fonction Digits permet de changer les nombres de décimales affichées pour les nombres réels. Cela n'a rien à voir avec le problème en question ^^.

    s:=l1+l2;
    Il n'est envoyé que la somme de 1+2 ; 3+4 ; 5+6 ; 7+8 ;
    Quand tu appliques une opération algébrique simple (somme, produit,...) à deux listes, Maple applique l'opérateur aux éléments de la liste de même indice. Il faut pour cela que les deux listes aient la même longueur bien sûr. Ce qui expliques le résultat.

  7. #6
    Guimzo

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par taladris Voir le message
    Salut,
    La fonction Digits permet de changer les nombres de décimales affichées pour les nombres réels. Cela n'a rien à voir avec le problème en question ^^.
    Quand tu appliques une opération algébrique simple (somme, produit,...) à deux listes, Maple applique l'opérateur aux éléments de la liste de même indice. Il faut pour cela que les deux listes aient la même longueur bien sûr. Ce qui expliques le résultat.


    Bonjour Taladris,


    Merci pour ton aide.
    Et merci pour le rappel... à quoi servent les fonctions "restart" ou "Digits" ou etc etc....^^
    Alors on demande des melons et toi tu proposes des pastèques..."....?? ^^
    As-tu une solution qui répond au probléme avec des ADDITIONS......?

    Et si possible simple.
    Car cette chaîne est quand même très simple :


    >restart;
    > Digits:=15;
    > l1:=[1,3,5,7];
    > l2:=[2,4,6,8];
    > for x in l1 do s:=seq(x+n,n=l2);od;


    <RÉSULTATS RENVOYÉS>


    Digits := 15
    l1 := [1, 3, 5, 7]
    l2 := [2, 4, 6, 8]
    s := 3, 5, 7, 9
    s := 5, 7, 9, 11
    s := 7, 9, 11, 13
    s := 9, 11, 13, 15


    Mais le seul probléme c'est que comme on peut voir dans les résultats au lieu d'avoir une seule
    séquence s:= 3,5,7,9,5,7,9,11,7,9,11,13,9,1 1,13,15

    On a 4 séquences " s:= "...
    Dernière modification par Guimzo ; 27/07/2012 à 02h12.

  8. #7
    Guimzo

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Bonjour,




    Sinon y'à cette solution qui consiste à réunir les 2 séquences en une seule liste ensuite de faire une autre liste avec le signe d'opération
    voulu, en l'occurence " + " et de construire une séquence qui prend à chaque fois 2 nombres et les additionne.....
    ( Cette solution provient d'un prof c'est un gars exceptionnel pour sa gentillesse sa modestie et une maîtrise comme nul n'est permis de Maple... : )
    Il a un site qui vraisemblablement est momentanément indisponible pour la partie forum mais allez y faire un tour pour toutes vos questions en rapport avec Maple il a toujours une solution.... : )
    " http://alamanya.free.fr/index.html "



    restart;
    Digits:=15
    l1:=[1,3,5,7];
    l2:=[2,4,6,8];
    l3:=seq(i,i=l1);
    l4:=seq(j,j=l2);
    l5:=[l3,l4];
    ops:=[`+`];
    res:=NULL:
    for a in l5 do
    for b in l5 do
    for op1 in ops do
    try
    x:=op1(a,b):
    if evalf(x)>1 then
    res:=res,[a,b,op1,x=evalf(x)]: print([a,b,op1,x=evalf(x)]);
    end if
    catch:
    end try
    od
    od
    od:
    [res];



    Voilà voilà...
    Le "if" est donc facultatif mais ça peut être très utile quand on recherche un résultat bien précis....
    Mais si vous avez une autre solution vous pouvez toujours la proposer merci.

  9. #8
    Tryss

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par taladris Voir le message
    Salut, une autre solution si on n'aime pas les boucles (en fait, les boucles sont cachées dans les fonctions de Maple, donc je pense que mon algorithme est moins efficace que celui de Tryss ).

    L'idée est de remarquer que si l1 est un vecteur colonne et l2 un vecteur ligne, et si on veut des produits au lieu de somme, alors le produit l1.l2 donne directement le résultat (sous forme de matrice) . Il suffit d'utiliser la fonction map de Maple avec des exponentielles et des logarithmes pour obtenir le résultat désiré:

    Code:
    somme:=proc(l1,l2)
    local e1,e2;
    
    e1:=convert(map(exp,l1),ColumnVector);
    e2:=convert(map(exp,l2),RowVector);
    
    return convert(map(log, e1.e2),list);
    end proc;
    C'est affreusement plus lent, mais c'est astucieux. J'aime beaucoup

  10. #9
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par Tryss Voir le message
    C'est affreusement plus lent, mais c'est astucieux. J'aime beaucoup


    Et ce n'est pas beaucoup plus court à écrire à cause des multiples conversions de type.

  11. #10
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Salut!

    Citation Envoyé par Guimzo Voir le message
    Bonjour,
    ( Cette solution provient d'un prof c'est un gars exceptionnel pour sa gentillesse sa modestie et une maîtrise comme nul n'est permis de Maple... : )
    Qu'on le mette en prison pour "excès de maîtrise en Maple" (je blague. J'ai trouvé l'expression très jolie)




    l1:=[1,3,5,7];
    l2:=[2,4,6,8];
    l3:=seq(i,i=l1);
    l4:=seq(j,j=l2);
    l5:=[l3,l4];
    Tu peux faire plus court:
    Code:
    l5:=[op(l1),op(l2)]
    La fonction op appliquée à une liste (de type "list") renvoie la suite (de type "set") de ces éléments.

    Par ailleurs, si tu concatènes l1 et l2 pour obtenir l5 et que tu fais ensuite une double boucle portant sur l5, tu risques d'obtenir des sommes non désirées. Si j'ai bien compris ton problème, si l1 a pour longueur n1 et l2 a pour longueur n2, le résultat final doit avoir longueur n1*n2. Avec ta méthode, tu obtiendras quelque chose de longueur (n1+n2)2.

    Par exemple, si l1=[1,2] et l2=[3,4], quel résultat obtiens-tu? Et quel est le résultat souhaité? Si je ne me trompes pas, tu souhaites obtenir [4,5,5,6] (i.e. [1+3,1+4,2+3,2+4]). Si je comprend bien ton algorithme, puisque ici, l5=[1,2,3,4], tu obtiendras [2,3,4,5,3,4,5,6,4,5,6,7,5,6,7, 8] (i.e. [1+1,1+2,1+3,1+4,2+1,2+2,2+3,2+ 4,3+1,3+2,3+3,3+4,4+1,4+2,4+3, 4+4]).




    try
    x:=op1(a,b):
    if evalf(x)>1 then
    Je ne comprend pas bien (en fait, je ne connais pas l'instruction try ni l'instruction catch). x:=op1(a,b) est la somme de a et b. A quoi bon tester s'il est plus grand que 1? Ne peut-on pas appliquer la procédure à des nombres réels petits, ou négatifs?




    res:=res,[a,b,op1,x=evalf(x)]:
    Es-tu sûr de toi? A la fin, tu devrais obtenir une liste de liste en écrivant cela,non?




    Quoi qu'il en soit, l'algorithme de Tryss est beaucoup plus rapide à exécuter (moins de boucles), à écrire et (à mon avis) infiniment plus naturel.
    Dernière modification par taladris ; 27/07/2012 à 12h04. Motif: correction de typo

  12. #11
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Désolé pour les posts multiples ^^

    Citation Envoyé par Guimzo Voir le message
    Bonjour Taladris,

    Merci pour ton aide.
    Et merci pour le rappel... à quoi servent les fonctions "restart" ou "Digits" ou etc etc....^^
    Je ne sais pas si c'est une question ou pas. Donc je vais y répondre quand même . restart permet de réinitialiser toutes les variables de Maple (à la valeur NULL je pense).


    Alors on demande des melons et toi tu proposes des pastèques..."....?? ^^
    As-tu une solution qui répond au probléme avec des ADDITIONS......?
    Mon algorithme répond à la question! Sais-tu que exponentielle et logarithme permettent de transformer additions en sommes et vice versa? (à la rigueur, si mon algo te déplait ou si tu ne le comprends pas, ce n'est pas grave. Du moment que tu maîtrise celui de Tryss).

  13. #12
    Guimzo

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Bonjour,




    La question était tellement simple....
    et finallement la personne en question a donné une réponse encore plus simple :




    retsart;
    Digits:=15;
    l1:=[1,3,5,7,9];
    l2:=[2,4,6,8];
    l3:=[seq(seq(i+j,j=l2),i=l1)];





    P.S.:Taladris, trop compliqué.....
    mais merci quand même pour ta réponse
    Dernière modification par Guimzo ; 28/07/2012 à 03h44.

  14. #13
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par Guimzo Voir le message
    l1:=[1,3,5,7,9];
    l2:=[2,4,6,8];
    l3:=[seq(seq(i+j,j=l2),i=l1)];
    En fait, c'est exactement le même algorithme que Tryss dans une écriture plus condensée. seq est un raccourci pour les boucles for.



    P.S.:Taladris, trop compliqué.....
    mais merci quand même pour ta réponse
    Ma réponse n'était qu'un complément à celle de Tryss. Et bien sûr que ce n'était pas la plus simple!

  15. #14
    Guimzo

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par taladris Voir le message
    En fait, c'est exactement le même algorithme que Tryss dans une écriture plus condensée. seq est un raccourci pour les boucles for.
    Bonjour,


    "Exactement le même algorithme"....mais sauf que ..." ^^
    Au départ il est question de Maple...




    Citation Envoyé par taladris Voir le message
    Ma réponse n'était qu'un complément à celle de Tryss. Et bien sûr que ce n'était pas la plus simple!
    Dans ce cas peut-être qu'il fallait mieux lire la question de départ au lieu de se focaliser sur des commentaires sur ce que c'est "restart" ou "Digits"... ^^
    D'autres parts peut-être qu'il faut apprendre à apporter des réponses simples à des problémes simples quand cela est possible....
    car qu'en sera t-il quand il s'agira de problémes plus compliqués.....?
    Mais merci tout d'même pour ta contribution.

  16. #15
    taladris

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Bonjour,

    Citation Envoyé par Guimzo Voir le message
    "Exactement le même algorithme"....mais sauf que ..." ^^
    Au départ il est question de Maple...
    L'algorithme ne dépend pas du langage qu'on utilise. Seul l'implémentation (l'écriture dans un langage donné) change. Certes, Tryss a donné une réponse implémenté en Matlab, mais la transposition à Maple était transparente.




    Dans ce cas peut-être qu'il fallait mieux lire la question de départ
    Soit les 2 listes suivantes :
    l1:=[1,3,5,7]
    l2:=[2,4,6,8]

    Comment avoir une autre liste qui soit la somme de chaque élément de l1 et de l2 c'est à dire une liste :
    s:= [3,5,7,9,5,7,9,11,7,9,11,13,9,1 1,13,15]
    Ma réponse répond exactement à la question ci-dessus pourtant.

    au lieu de se focaliser sur des commentaires sur ce que c'est "restart" ou "Digits"... ^^
    Mes commentaires sont venus ensuite!


    D'autres parts peut-être qu'il faut apprendre à apporter des réponses simples à des problémes simples quand cela est possible....
    Ne t'inquiète pas pour moi, l'algorithme avec la double boucle, je le connaissais.

    J'ai donné mon algorithme parce que:
    1) j'y avais pensé et cela pouvait peut-être intéressé quelqu'un (au moins une en l'occurrence).
    2) Tryss parlait de Scilab qui est optimisé pour le calcul matriciel. Pour Scilab, mon algorithme a peut-être un intérêt.
    3) Si je devais donner une justification "pédagogique", je dirais que l'idée de mon algorithme n'est pas totalement idiote mais son implémentation montre que Maple est très rigide concernant les types des objets manipulés.

  17. #16
    Guimzo

    Re : Maple additionner les éléments de 2 listes entres-eux.....?

    Citation Envoyé par taladris Voir le message
    Bonjour,
    L'algorithme ne dépend pas du langage qu'on utilise. Seul l'implémentation (l'écriture dans un langage donné) change. Certes, Tryss a donné une réponse implémenté en Matlab, mais la transposition à Maple était transparente.

    Si elle était si transparente que ça pourquoi ne pas l'avoir donné.......?


    Citation Envoyé par taladris Voir le message
    Ma réponse répond exactement à la question ci-dessus pourtant.
    a). "ta réponse" oui merci.... un clic droit avec la souris sur un élément d'une chaîne de réponse de choisir conversions et Maple propose plusieurs options entres autres de transcrire l'élément en : produit, somme, tableau, ensemble, vecteur colonne.....
    Après chacun appréciera ....

    Citation Envoyé par taladris Voir le message
    Mes commentaires sont venus ensuite!
    b).Peut-être qu'on attendait autre chose mais merci encore pour ton côté "pédagogique".


    Citation Envoyé par taladris Voir le message
    Ne t'inquiète pas pour moi, l'algorithme avec la double boucle, je le connaissais.
    J'ai donné mon algorithme parce que:
    1) j'y avais pensé et cela pouvait peut-être intéressé quelqu'un (au moins une en l'occurrence).
    I).Tu avais la réponse " l3:=[seq(seq(i+j,j=l2),i=l1)]; "................?
    On aurait dû demander une réponse avec "vecteur colonne" et peut-être que là t'aurais donné l'autre réponse...?


    Citation Envoyé par taladris Voir le message
    2) Tryss parlait de Scilab qui est optimisé pour le calcul matriciel. Pour Scilab, mon algorithme a peut-être un intérêt.
    II).Peut-être qu'il fallait plus chercher à répondre à la question de départ avec Maple qu'à des questions sur Scilab...


    Citation Envoyé par taladris Voir le message
    3) Si je devais donner une justification "pédagogique", je dirais que l'idée de mon algorithme n'est pas totalement idiote mais son implémentation montre que Maple est très rigide concernant les types des objets manipulés.
    III). Clic droit Cf réponse " a).".
    Merci en tout cas.

Discussions similaires

  1. Additionner les orbitales moléculaires?
    Par john616 dans le forum Chimie
    Réponses: 18
    Dernier message: 14/12/2010, 09h37
  2. methode des elements finis sur maple
    Par invite15aece8a dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 15/05/2010, 10h40
  3. les limites entres entrainements et dopage
    Par invite9d373ca4 dans le forum TPE / TIPE et autres travaux
    Réponses: 1
    Dernier message: 18/12/2009, 13h14
  4. Additionner les concentrations ?
    Par invitec7a4aa8d dans le forum Chimie
    Réponses: 4
    Dernier message: 28/02/2008, 10h27
  5. Différences entres les spectres
    Par inviteaab64320 dans le forum Physique
    Réponses: 0
    Dernier message: 16/11/2007, 09h52