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

Calcul scientifique Python Discussion :

matrice en python avec boucles imbriquées


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 7
    Points
    7
    Par défaut matrice en python avec boucles imbriquées
    Bonjour à tous, comme je suis débutante sous python, j'ai rencontré de gros problèmes.
    pour construire ma matrice, voici mon code:

    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
    >>>mu0 = 4 * np.pi * 1e-7
    >>>alpha=1.4982*10**(-4)
    >>>c=0.03097619
    >>>k=498.13655
    >>>Ms=3.62970e+05
    >>>delta =1
    >>>H = [0]
    >>>Man = [0]
    >>>dMirrdH = [0]
    >>>Mirr = [0]
    >>>M = [0]
    >>>B= [0]
    >>>for i in range(0,154,1):
                  for j in range ( 0,5000,10):
                           Man.append(Ms * (1 / np.tanh((H[j + 1] + alpha * M[j]) / (((119+650*i)/(1+i)))) - ((119+650*i)/(1+i)) / (H[j + 1] + alpha * M[j])))
                           dMirrdH.append((Man[j+1] - M[j]) / (k * delta[j+1] - alpha * (Man[j + 1] - M[j])))
                           Mirr.append(Mirr[j] + dMirrdH[j + 1] * (H[j+1] - H[j]))
                           M.append(c * Man[j + 1] + (1 - c) * Mirr[j + 1])
                           B.append(mu0 * (H[j+1]) + mu0 * M[j+1])
                           X=np.array([[B for j in range(0,5000,10)] for i in range(0,154,1)])
                           print(X)
    les problèmes:
    1/ je dois avoir une matrice de taille (m,n), alors que en ecrivant X.shape: le résultat est (m,n,n+1)??
    2/pour l'incrément j ça avance normalement, mais pour i le résultat est toujours pour le dernier i=153. c'est à dire pour i colonnes, le calcul se fait pour i=153.


    Avez vous une idée comment résoudre ce problème.

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Quand tu utilises des matrices comme tu dis, il faut utiliser la bibliothèque dédié à cela, à savoir numpy. Tu t'embeteras beaucoup moins.

    Ensuite tu n'auras qu'à écrire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import numpy as np
    A=np.zeros((1500,2000))  ### avec la forme qui te plait
    for i in range(1500):
        for j in range(2000):
             A[i,j]= i+j ### Mettre ici ce qu'il faut dans ton cas

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé avec ce code, mais toujours des erreurs!
    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
     
    from math import*
    import numpy as np
    from matplotlib import pyplot as plt
     
    a=[]
    Nep=10
    for j in range(0,Nep):
            a.append((119+650*j)/(1+j))
    a=np.array(a)
     
    Nfirst = 11 
    Ndown =21
    Nup=21
     
    c=0.03097619
    k=498.13655
    Ms=3.62970e+05
    mu0 = 4 * np.pi * 1e-7 
    alpha=1.4982*10**(-4)
    DeltaH = 10
     
    delta = [0]
    Man = np.zeros((54,10))
    dMirrdH = []
    Mirr = np.zeros((10,54))
    M = [0]
    B=np.zeros((54,10))
     
    H = [0]
     
    for j in range(Nfirst):
        H.append(H[j] + DeltaH)
    for j in range(Ndown):
        H.append(H[-1] - DeltaH)
    for j in range(Nup):
        H.append(H[-1] + DeltaH)
     
    H=np.array(H)
     
    delta = [0]
    for j in range(len(H) - 1):
        if H[j + 1] > H[j]:
            delta.append(1)
        else:
            delta.append(-1)
     
     
    for j in range (Nfirst + Ndown + Nup) :
            for i in range (0,Nep):
     
                    Man[j,i]= (Ms * (1 / np.tanh((H[j + 1] + alpha * H[j]) / a[i]) - a[i] / (H[j + 1] + alpha * M[j])))
                    dMirrdH[j]=((Man[j+1,i] - M[j]) / (k * delta[j+1] - alpha * (Man[j + 1] - M[j])))
                    Mirr[j]=(Mirr[j] + dMirrdH[j + 1] * (H[j+1] - H[j]))
                    M[j+1]=(c * Man[j + 1,i] + (1 - c) * Mirr[j + 1])
                    B[j+1,i]=(mu0 * (H[j+1]) + mu0 * M[j+1])

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Tu ne construit pas tes tableaux comme il est bon de le faire.

    Ce que tu fais : Tu créer une liste, que tu fais grossir petit à petit (avec la fonction append). Enfin tu termines par convertir la grosse liste obtenu en un array.

    Ce qu'il faut faire : Oublier que les listes existent, et ne pas utiliser la fonction append. Dès le début déclarer des arrays, qui ont la bonne dimension et que l'on rempli de zéros par défaut. Un fois que tu as ces tableaux, là tu les parcours pour les remplir.

    Réécrit ton code sans liste et sans append. Ensuite essaie avec des matrices toutes petites (du genre 5 par 5) pour pouvoir en faire des print, et voir ce qui se passe sur un petit cas. Quand le petit cas fonctionneras, tu pourras essayer avec des dimensions plus grandes.

    Ensuite plonge toi un peu dans un cours ou un tuto, car visiblement, quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X=np.array([[B for j in range(0,5000,10)] for i in range(0,154,1)])
    tu ne comprends pas ce que tu fais...

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2017
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    merci.

Discussions similaires

  1. VBA, Création d'une Matrice avec boucles imbriquées.
    Par EdouardNourtar dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2020, 17h57
  2. Fonction avec boucles imbriquées de if
    Par EvaMa dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/06/2017, 17h09
  3. Accélération de macro avec boucles imbriquées
    Par Mathias_L dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/10/2012, 11h39
  4. Selectionner toutes les CheckBoxs avec boucle imbriquée.
    Par Azaxx dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/07/2011, 15h51
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 15h19

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