Conditions aux limites - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 55 sur 55

Conditions aux limites



  1. #31
    umfred

    Re : Conditions aux limites


    ------

    une boucle qui fait un écrasement, sans que la valeur intermédiaire soit utilisée, ça ne sert à rien (c'est comme si pour aller de la chaine de tv 1 à la chaine de tv 10 tu passais par la chaine 2, 3, 4, 5, 6 7, 8 et 9 sans les regarder, alors qu'en zappant directement sur la chaine 10 tu gagnes du temps).
    Dans ton dernier code, j'ai F(1,: )=h0*ones(1,Nz+1) (qui ne sert que dans un plot) qui devient ensuite F=j*dz, donc un nombre, que l'on réutilise comme matrice dans un plot sur la fin; donc je ne vois pas trop où il y a besoin d'un size de F ??????
    Tu devrais repartir de 0 et réécrire sur feuille ce que ton algo doit faire avant de le réécrire en code.

    -----

  2. #32
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Bonjour,

    J'ai suivi l'évolution de ce fil de loin. Turbulent: je suis d'accord avec Umfred: ton code en l'état n'est pas utilisable. Il contient beaucoup trop d'erreurs pour pouvoir être corrigé. Ces erreurs sont dues à une méconnaissance du langage utilisé* (boucles inutiles, matrices qui deviennent des nombres etc.) Ce n'est pas grave, puisque tu es là pour apprendre. Il vaut mieux donc ici repartir d'une feuille blanche.

    *Ceci en est un exemple:

    Citation Envoyé par turbulent
    Si size(F(t=0)) est différente de size(F(t>0)) le code ne va pas marcher pas, non?
    size(F(t=0)) mène à une erreur: on assigne la valeur 0 à la variable t, ensuite on demande l'accès à l'index 0 de F (alors que les index commencent à 1, d'où l'erreur), et on finit par demander la taille d'une erreur (ce qui ne fat pas sens).

  3. #33
    turbulent

    Re : Conditions aux limites

    Sur ma question précédente: la façon d'écrire size F(t=0) c'est juste une forme d'écriture mathématique afin de poser la question de façon simplifiée. Le temps dans mon est compté suivant deux boucles: la boucle principale qui donne les temps finaux (for i=2:3) et la boucle des pas de temps (for n=1:Ndt) pour atteindre à chaque fois un temps final.

  4. #34
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Citation Envoyé par turbulent Voir le message
    Sur ma question précédente: la façon d'écrire size F(t=0) c'est juste une forme d'écriture mathématique afin de poser la question de façon simplifiée
    .

    Je n'en doutais pas. Cependant, comme le contexte porte sur du code il faut être rigoureux*. Pour moi l'expression "size(F(t=0))" est du code. Je le lis donc comme l'interpréteur Octave/Matlab le lirais.

    *Un ordinateur ne connaît que la logique mathématique. Il ne peut pas deviner ce que l'on a en tête. Si l'on n'est pas rigoureux, il ne faut pas s'étonner de ne jamais obtenir le résultat attendu.

    Ma remarque étais donc plus une boutade vous invitant à faire attention à votre code. Le piège, surtout lorsque l'on débute, est de directement se lancer dans le codage (je sais, c'est amusant à faire), sans passer par la case "algo sur papier" (je sais, c'est pas amusant).

    C'est pourquoi j'ai recommandé de repartir de zéro et de commencer par l'étape "algo sur papier" que vous avez sautée.

  5. #35
    turbulent

    Re : Conditions aux limites

    Bonne nouvelle: le code marche, mais il n'aboutit pas aux résultats escomptés. Pour moi c'est déjà un grand pas. cela a été obtenu par l'agrandissement du pas du temps qui était très très faible (je passais parfois plus de 24h sans aboutir à un résultat), aussi par la suppression des commandes et des boucles inutiles.
    Question: j'obtiens des courbes F superposées à la courbe initiale !!!!! pourquoi? Est-ce que à cause d'une mauvaise instruction, le code revient qu'aux valeurs de F initiale.

  6. #36
    turbulent

    Re : Conditions aux limites

    F=j*dz (une valeur qui deviendra des valeurs à l'intérieur d'une boucle contenant le plot de F) sont les valeurs que l'on cherche sous conditions de h=0.

  7. #37
    turbulent

    Re : Conditions aux limites

    Est-ce qu'il y a une écriture matricielle à travers laquelle on cible les (K,j) pour lesquelles h==0, afin des les affecter à F. Je sais faire ceci:
    Code:
    >> h==0
    ans =
    
      1  0  0  0  0  1
      1  1  1  1  1  0
      1  1  1  1  1  0
      1  1  1  1  1  0
      1  1  1  1  1  0
      1  0  1  1  1  1
    où les 1 sont les points où h est nulle. Ma question est comment peut on extraire les (K, j) (tableau précédent) relatifs aux 1 et les affecter à F. J'espère que ce n'est pas une question bête.

  8. #38
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Pour ce que j'en comprend, vos deux derniers messages se contredisent:

    Dans le message #36, je vois F=j*dz comme un scalaire.

    Dans le message #37 tu souhaites affecter à F les index pour lesquelles la matrice h est nulle. Ce qui ne fait pas sens vis-à-vis du message #36.

    Bref, on ne comprend pas ce que tu souhaites faire. Dès lors, impossible d'aider.

    Je recommande vivement de suivre le conseil d'Umfred dans son message #31: repartir d'une page blanche. Cela sera plus rapide que d'essayer de réparer un code que personne ne comprend.

  9. #39
    turbulent

    Re : Conditions aux limites

    Pardon, je me suis mal exprimé. Dans mon message précédent, j'ai dit "affecter à F les index pour lesquelles la matrice h est nulle". En fait, il s'agit de calculer F aux points (K, j) pour lesquels h(K, j) =0.

  10. #40
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Ce n'est toujours pas clair:

    F est un scalaire oui ou non ?

    Si oui: comment calcules-tu "F aux points (K, j) pour lesquels h(K, j) =0." ? (somme ou moyenne des valeurs aux points ?)

    Si non: pourquoi alors F serait-il égal à un scalaire (F = j*dz) dans ton code ? (A mon avis il y a une erreur ici).

    Bref et encore une (et dernière) fois: repart d'une feuille blanche. Tu perdras moins de temps qu'à essayer de "réparer" ton code actuel.

  11. #41
    turbulent

    Re : Conditions aux limites

    F= j*dz est un vecteur généré par l'indice j qui varie de 2 à Nz.
    D'autant plus, F= j*dz et plot F sont placés dans la même boucle.
    Dernière modification par turbulent ; 28/03/2022 à 18h33.

  12. #42
    umfred

    Re : Conditions aux limites

    non non et non, j est une variable qui change de valeur à chaque itération de la boucle et qui va de 2 à Nz, Nz est une valeur fixe, donc une valeur multipliée par une valeur ne peut pas donner un vecteur.
    en revanche, ces valeurs peuvent être mis dans une position dans un vecteur à chaque tour

  13. #43
    turbulent

    Re : Conditions aux limites

    Rappelez-vous que je ne suis pas numéricien, j'apprends et j'améliore mon code à partir de vos conseils et de vos remarques. Donc, SVP prenez patience avec moi.
    Ok, F=j*dz est un scalaire et F(1, : ) est un vecteur lequel j'en ai besoin pour tracer ma courbe. F=j*dz est tout simplement les z aux points (K, j) qui vérifient la condition h(K,j)=0.

  14. #44
    MissJenny

    Re : Conditions aux limites

    Citation Envoyé par turbulent Voir le message
    Rappelez-vous que je ne suis pas numéricien, j'apprends et j'améliore mon code à partir de vos conseils et de vos remarques. Donc, SVP prenez patience avec moi.
    j'ai l'impression que tu pars d'un code complètement erroné, et que tu le modifies petit à petit, enlevant de-ci de-là les blocs d'instruction inutiles... mais ça n'est pas la bonne façon de procéder. Si tu dois apprendre quelque-chose d'utile, c'est la bonne démarche, et c'est celle que te suggère Paraboloïde : écris ton algorithme sur le papier, de façon synthétique (sans détailler les diverses étapes) puis code chaque étape en une fonction qui ne fait que ça (au lieu d'un long programme incompréhensible) et finalement écris le corps du programme qui appellera les fonctions que tu auras validées auparavant.

  15. #45
    umfred

    Re : Conditions aux limites

    c'est mathématique surtout, rien à voir avec la programmation.
    une variable ne peut pas être 2 choses à la fois (elle est soit l'une soit l'autre); dans certains langages, elle peut changer de type, mais ne peut jamais être à la fois un nombre et une matrice (ou un tableau ou un vecteur)
    donc soit F est toujours un scalaire et f (1,: ) un vecteur de la matrice f(l,c) (de taille l lignes et c colonnes)
    ou soit F est un scalaire, puis une matrice (il oublie le scalaire qu'il était), et si il redevient un scalaire, il perd l'info de la matrice qu'il était.
    F(1,: ) veut dire on prend tous les éléments ( : ) de la 1ère ligne de la matrice F.

  16. #46
    MissJenny

    Re : Conditions aux limites

    Citation Envoyé par umfred Voir le message
    une variable ne peut pas être 2 choses à la fois (elle est soit l'une soit l'autre); dans certains langages, elle peut changer de type, mais ne peut jamais être à la fois un nombre et une matrice (ou un tableau ou un vecteur)
    remarque qu'un scalaire c'est une matrice 1x1. Je ne connais pas Matlab mais par exemple en R tout est vecteur, éventuellement de longueur 1 (et même 0 !)

  17. #47
    MissJenny

    Re : Conditions aux limites

    tiens, par exemple (c'est du R)

    Code:
    > 1[1]
    [1] 1
    le premier élément de la constante 1 est 1

    Code:
    > 1[2]
    [1] NA

    le deuxième élément n'a pas été défini (puisque 1 est de longueur 1) et vaut NA (not available)

    Code:
    > 1[2]<-6
    Error in 1[2] <- 6 : 
      la cible de l'assignation est un objet n'appartenant pas au langage
    si on essaie d'assigner une valeur au deuxième élément de 1 il ne veut pas (ça me paraît normal)

  18. #48
    umfred

    Re : Conditions aux limites

    c'est vrai que scalaire n'est sans doute pas le bon terme, et je l'avais remplacé par nombre dans certains de mes messages précédents.

  19. #49
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Il y a aussi un autre chose dans le code de turbulent qui peut potentiellement poser problème (si cela ne pose déjà pas problème): c'est l'emploi à tort et à travers de la fonction "round" un peu partout. Comme ici:

    Code:
    H(Nx+1, 2:round(h1/dz)+1)=h1*ones(1,round(h1/dz));% FE
    Ce n'est pas une bonne idée car suivant si la partie décimale de h1/dz est plus grande ou plus petite que 0,5 (aux erreurs d'arrondis près), on aura deux résultats différents.
    Cette fonction apparaît aussi dans quelques boucles "for" du code de turbulent. Il devient alors difficile de prédire combien d'itérations seront effectuées en fonction des paramètres de son modèle.

    Cela rend le comportement du code difficilement prévisible: même si celui-ci fournirait d'aventure un résultat correct pour certaines valeurs des paramètres, il pourrait y avoir, au mieux, des "glitchs" pour d'autres valeurs (au pire, les résultats seraient à peu près aléatoires).


    Pour bien faire, il faudrait éliminer partout tous les appels à cette fonction (elle n'est pas nécessaire). Ce qui implique de repenser entièrement le code.

  20. #50
    turbulent

    Re : Conditions aux limites

    La fonction round donne le nombre entier le plus proche. Exemple:
    Code:
    >> round(3.4)
    ans = 3
    >> round(3.6)
    ans = 4
    >>

  21. #51
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Je sais ce que fais la fonction round (avec plusieurs années d'expérience en programmation, ce serait malheureux).

    Je dis que l'utilisation que tu en fais n'est (vraiment) pas recommandée. En reprenant ta notation:

    Mettons que dans ton code , alors .
    Tandis que si , alors .

    est l'epsilon machine.

    La différence entre h1 et h1bis est minime (pour la norme IEEE754 avec des nombres à virgule flottante codés sur 64bits cela vaut en valeur absolue ). Or, ton code aura très probablement un comportement très différent pour ces deux valeurs alors que rien ne le justifie vu leur différence.

    Il vaut mieux définir un paramètre "nombre de pas", calculer dz à partir de ce paramètre et remplacer tous les "round" par quelque chose qui dépend de ce "nombre de pas".

  22. #52
    turbulent

    Re : Conditions aux limites

    J'ai supprimé carrément F=j*dz du programme, je l'ai substitué par la fonction find qui me permet de définir les indices (K, j ) pour lesquels h(K, j )=0, j’ai défini d'autres paramètres (u,w) par ces (K,j). Ensuite, j’ai mis: plot(u*dx,w*dz ..... Le code affiche une figure avec une allure générale des courbes très peu semblable aux courbes qu'il doit fournir. Mais, il s'arrête à cause de cette erreur:
    Code:
    error: k(7,_): out of bound 6 (dimensions are 6x6)
    error: called from
        Cas3 at line 82 column 11
    >>
    Pourquoi le code s'étend jusqu'à 7, les boucles de K et j sont limitées à K=2:Nx et j=2:Nz et les conditions aux limites sont définis à Nx+1=Nz+1=6

  23. #53
    Paraboloide_Hyperbolique

    Re : Conditions aux limites

    Citation Envoyé par turbulent Voir le message
    Le code affiche une figure avec une allure générale des courbes très peu semblable aux courbes qu'il doit fournir.
    Vu la quantité d'erreurs et de choix discutables dans ton code, cela n'est pas surprenant.

    Citation Envoyé par turbulent Voir le message
    Mais, il s'arrête à cause de cette erreur:
    Code:
    error: k(7,_): out of bound 6 (dimensions are 6x6)
    error: called from
        Cas3 at line 82 column 11
    >>
    Pourquoi le code s'étend jusqu'à 7, les boucles de K et j sont limitées à K=2:Nx et j=2:Nz et les conditions aux limites sont définis à Nx+1=Nz+1=6
    Vu que tu souhaites perdre ton temps avec ton code actuel et que tu ne sembles pas vouloir tenir compte des conseils qui ont été donnés, j'abandonne...

  24. #54
    umfred

    Re : Conditions aux limites

    sans aucun code ça va être dur.... ça doit être parce que tu affectes une autre valeur à K ou u , mais il faut regarder ce qu'il se passe avant ta ligne 82 fautive (au bout d'un certain nombre de tour donc)

  25. #55
    umfred

    Re : Conditions aux limites

    turbulent, je te réinvite à remettre ton dernier code ici (au cas où)

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Flambement - Conditions limites
    Par invite2c7aa854 dans le forum Physique
    Réponses: 1
    Dernier message: 13/12/2017, 19h53
  2. appliquer conditions limites EDP
    Par invite9c7554e3 dans le forum Physique
    Réponses: 8
    Dernier message: 24/07/2012, 12h14
  3. conditions aux limites
    Par invite2277bb3d dans le forum Physique
    Réponses: 18
    Dernier message: 03/06/2012, 12h19
  4. conditions aux limites
    Par inviteb7732a8d dans le forum Physique
    Réponses: 2
    Dernier message: 22/04/2012, 21h47
  5. les conditions limites
    Par invite80f37bf4 dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 03/12/2010, 09h33