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

Octave Discussion :

Modélisation des lignes de potentiel dans un fil carré de section infinie


Sujet :

Octave

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut Modélisation des lignes de potentiel dans un fil carré de section infinie
    Bonjour à tous,

    Je suis nouveau et c'est mon premier message, autant dire que ce sera surement bien moins que parfait comme description d'un problème à résoudre. J'ajoute que je débute en programation matlab/octave et que donc je ne comprends pas tout !

    Je suis en fac et je me casse la tête sans trouver la solution sur un exercice que notre prof nous a donné.

    Il s'agit de modéliser en 3 dimensions les lignes de champ électriques dans un fil carré infini de type cœur/gaine. Le cœur étant a un potentiel de 1 V, on cherche donc la "forme" des lignes de champ entre le cœur et la gaine où le potentiel est non défini. A l’extérieur du fil, le potentiel est de 0. Le coeur mesure 1/10 du coté du fil et est situé en son centre.


    Je vais inclure ce que j'ai deja fait (je précise que c'est sous Octave et non Matlab, mais on m'a dit que c'était la même chose à quelques détails près), et peut être que vous pourrez me donner des pistes pour résoudre cette question !

    Le programme me retourne l'erreur:
    "Index exceeds matrix dimension".
    Merci d'avance.
    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
    figure; hold on;
     
    %initialisation
     
    i=linspace(0,101,100);
     
    j=linspace(0,101,100);
     
     
    for i=(2:99)
        for j=(2:99)
            v=0;
        endfor
    endfor
     
     
     
    for i=(45:55)
        for j=(45:55)
            v=1;
        endfor
    endfor
     
     
     
    %calcul
    ;
     
    for n=(1:10)
        for i=(2:99)
     
            v2(1,1)=1;
     
            for j=(2:99)
                v2(i,j)=0.25*(v(i+1,j)+v(i-1,j)+v(i,j+1)+v(i,j-1));
            endfor
     
            v2(100,100)=0;
        endfor
     
        v=v2
    endfor
     
     
    %tracage
     
    i=linspace(0,1,100); 
    j=linspace(0,1,100);
     
    plot3(i,j,v)
    Merci pour vos conseils !

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Bonjour,

    une première remarque du point de vue de la programmation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for i=(2:99)
        for j=(2:99)
            v=0;
        endfor
    endfor
     
     
     
    for i=(45:55)
        for j=(45:55)
            v=1;
        endfor
    endfor
    Ces deux boucles ne servent à rien, tu écrases la valeur de v à chaque itération, et la fin de ces deux boucles, v est un scalaire contenant la valeur 1. C'est une erreur qui se retrouve aussi dans ta boucle principale.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 11
    Par défaut
    Hello,
    comme a dit magelan, les deux premières boucles sont inutiles.
    J'ai peut-être raté quelque chose en lisant ton code mais un problème est que tes variables v et v2 sont des scalaires, quand tu fais par exemple v(i,j), octave s'attend à ce que v soit une matrice (tu essaies d'accéder au j-ème élément de la i-ème ligne à la ligne 35 de ton code mais v est un scalaire et pas une matrice)---->exceeds matrix dimension
    Pour initialiser ta matrice, tu peux faire v=zeros(i,j) avec i le nombre de lignes et j le nombre de colonnes et ensuite utiliser une boucle pour mettre les valeurs que tu veux dedans, ou alors, moins "élégant", faire v=[];v2=[]; avant la boucle si la synthaxe est pareille que sur matlab.

    Dans ta boucle après "calcul" la ligne v2(1,1)=1 ne sert à rien, ca prend juste du temps à re-update la même valeure, tu peux le faire avant la boucle (je pense que tu n'as pas d'erreurs en appelant v2(1,1) car une matrice 1x1 est un scalaire).

    Bonne chance

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut
    Bonjour,

    Mon programme marche, j'ai réussi en modifiant les bornes des boucles, tout simplement, et en initialisant le tableau avec v=zeros(i,j)!

    Merci pour votre aide

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut
    C'était peut etre maladroit, mais en fait je faisais expres de mettre ces deux boucles pour qu'elles forcent les valeurs à 0 et à 1 dans certaines parties du tableau dans un premier temps afin d'initialiser la matrice 100x100. Je me suis rendu compte que de toute facon les bornes n'étaient pas bonnes et que en modifiant les valeurs intelligemment dans la boucle principale, le programme me retourne bien un graphe en 3Dimensions des lignes de champ.


    Citation Envoyé par magelan Voir le message
    Bonjour,

    une première remarque du point de vue de la programmation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for i=(2:99)
        for j=(2:99)
            v=0;
        endfor
    endfor
     
     
     
    for i=(45:55)
        for j=(45:55)
            v=1;
        endfor
    endfor
    Ces deux boucles ne servent à rien, tu écrases la valeur de v à chaque itération, et la fin de ces deux boucles, v est un scalaire contenant la valeur 1. C'est une erreur qui se retrouve aussi dans ta boucle principale.
    Images attachées Images attachées  

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut Réponse
    Voici donc le code, encore merci pour ces petites informations qui m'ont bien aidées !

    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
    figure; hold on
     
    x=linspace(-0.5,0.5,100);
    y=linspace(-0.5,0.5,100);
     
    for j= (1:45)
        for i=(1:100)
            V(i,j)=0;
        endfor
    endfor 
     
    for j=(55:100)
        for i=(1:100)
            V(i,j)=0;
        endfor
    endfor
     
    for j = (45:55)
        for i = (1 : 45)
            V(i,j) =0;
        endfor
    endfor
     
    for j = (45:55)
        for i =(55:100)
            V(i,j)=0;
        endfor
    endfor
    for j=(45:55)
        for i=(45:55)
            V(i,j)=1;
        endfor
    endfor
     
    for n=(1:200)
        V2(1,1)=0;
        for p=(2:99)
            for q=(2:99)
     
                V2(p,q)=(0.25)*(V(p+1,q)+V(p-1,q)+V(p,q+1)+V(p,q-1));
            endfor
        endfor
     
        V2(100,100)=0;
        V=V2;
     
    endfor
     
    plot3 (x,y,V,'x')

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 11
    Par défaut
    Top
    Si jamais, tu peux aussi utiliser v=ones(i,j) si tu as plus d'éléments égals à 1 que de 0, histoire de diminuer le coût calcul, mais c'est vraiment vraiment pas significatif pour ce genre d'opérations^^

  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
    Les 3 premières lignes du code devraient être déplacées à la fin, juste avant l'appel à plot3.

    Les 4 premières boucles sur j pourraient être judicieusement remplacées par un unique appel à la fonction zeros

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/08/2006, 16h43
  2. Concaténer des lignes d'enregistrements dans une colonne
    Par dany13 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 08/07/2005, 21h56
  3. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40
  4. Réponses: 4
    Dernier message: 02/09/2004, 14h50
  5. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41

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