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 :

Aide et conseils pour un projet en Matlab


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut Aide et conseils pour un projet en Matlab
    Bonjour,

    Je suis étudiant (et a mon avis il y en a pas mal qui doivent débarquer par ici ;D) et j'aurais besoin d'un peu d'aide et de conseils avisés pour un projet Matlab que je dois réaliser pour mes cours.

    Le problème est que nous n'avons aucune formation concrète en Matlab (ou même en programmation, on a juste fait un peu de Python début d'année mais rien de transcendant) et a chaque erreur ou doute je suis obligé d'aller sur google sans trop savoir quoi et ou chercher. Je me suis dis que ca serai beaucoup plus simple pour moi de venir directement poser mes questions à des gens qui s'y connaissent (surtout que ca doit pas être super relevé ce que je vais vous demander).

    Je vous expose dans les grandes lignes l'énoncé (ou du moins la première partie de l'énoncé).

    Nous devons créer une fonction qui resous un système d'équation différentielle en prenant 5 valeurs en entrée et en donnant en sortie les graphiques des 5 fonctions-solution. Les équations différentielles dépendent de valeurs constantes (mais susceptible de pouvoir être modifiées), de paramètre qui eux sont dépendants des 5 valeurs en entrée et des constantes mais il possèdent des interaction entre eux aussi.

    i.e.
    entree = input('')
    constante = 10
    p1 = 24*constante
    p2 = (constane/p1)*entree
    (entree)' = p2/(1+entree)+constante (Equation différentielle)

    En gros on a genre 10 constantes, 20 paramètre et tout ca a rentrer dans 5 équations différentielles.

    Bon je m'attaque a mes questions.

    1) Comment arrangeriez-vous le problème d'un niveau pratique/soigné? Au niveau de quels trucs dans tel ou tel fichier. Je me suis posé la question et je n'arrive pas a bien à choisir (et c'est relié a la question 2)

    2) Je n'arrive pas a relier mes variables (question de débutant, mais je n'ai trouvé nulle part ou c'est bien expliqué). En fait au début j'ai fait un fichier constante.m, parametre.m, et je lançais parametre.m avec les 5 valeurs en entrée ensuite j'avais un fichier fonction.m qui appelait constante et parametre et qui posait mon système différentiel et ensuite j'avais resolution.m qui appelait le tout. Seulement ca doit être une erreur de syntaxe ou de manque de connaissance ou autre mais mes fonctions ne prenaient pas en compte le fait que mes variables étaient déclarée et faisait comme si c'était des variables non posées.

    3) Je comptait utiliser plein de variables globales (vu le nombre d'interactions entre les paramètres), seulement il parait que les programmeurs n'aiment pas (j'ai compris pourquoi) et je voudrais savoir comment je pourrait faire d'autre.

    C'est tout pour le moment, merci d'avance a ceux qui auront la gentillesse de se pencher sur mon cas, bonne journée

  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,

    Citation Envoyé par Konow Voir le message
    1) Comment arrangeriez-vous le problème d'un niveau pratique/soigné? Au niveau de quels trucs dans tel ou tel fichier. Je me suis posé la question et je n'arrive pas a bien à choisir (et c'est relié a la question 2)

    2) Je n'arrive pas a relier mes variables (question de débutant, mais je n'ai trouvé nulle part ou c'est bien expliqué). En fait au début j'ai fait un fichier constante.m, parametre.m, et je lançais parametre.m avec les 5 valeurs en entrée ensuite j'avais un fichier fonction.m qui appelait constante et parametre et qui posait mon système différentiel et ensuite j'avais resolution.m qui appelait le tout. Seulement ca doit être une erreur de syntaxe ou de manque de connaissance ou autre mais mes fonctions ne prenaient pas en compte le fait que mes variables étaient déclarée et faisait comme si c'était des variables non posées.
    Tu peux nous mettre un exemple des fonctions que tu as écrit?

    Citation Envoyé par Konow Voir le message
    3) Je comptait utiliser plein de variables globales (vu le nombre d'interactions entre les paramètres), seulement il parait que les programmeurs n'aiment pas (j'ai compris pourquoi) et je voudrais savoir comment je pourrait faire d'autre.
    Dans la plupart des cas, il suffit de placer tes variables en paramètre de tes fonctions. Mais cette question est aussi reliée aux 2 premières, ce serait plus simple de te répondre sur un exemple.
    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 Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Avant tout, je te souhaite la bienvenue sur le forum développez,

    Il faut savoir qu'un certain nombre de questions que peut poser un débutant sont répertoriées dans la FAQ, la page des tutoriels et pour finir il existe aussi une page dédiée aux sources (programmes).

    Je te conseils alors de jeter un coups d'œil .

    Pour ton problème, je pense que c'est simple. Pour commencer à coder, crées d'abord un nouveau fichier script (M-File) avec cette mise en forme par exemple :
    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
     
    %% Initialisation
          clc ; % Par exemple
     
    %% Déclaration des constantes
          const1 = 10.10 ;
          const2 = 22.21 ;
          const3 = 31.14 ;
          ...
          ...
     
    %% Calcul des paramètres
          param1 = const1/2 ;
          param2 = const1*sin(const2) ;
          ...
          ...
     
    %% Traitement
           % Ici tu indique le traitement à éffectuer
           ...
           ...
           ...
           ...
     
    %% Affichage
        % Ici tu affiche le ou les résultats obtenu
        ...
         ...
         ...
         ...
     
    %% Nettoyage et suppression des variables
       clear const1 const1 param1 param2 ....
    Une fois ton programme est fonctionnel, validé et terminé tu peux faire en sorte qu'il soit plus évolué, en regroupant certaines parties dans d'autres fichiers script, ou dans des fonctions.

    Si tu utilises des matrice, ceci est pour toi.

  4. #4
    Nouveau candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut
    Merci pour vos réponses.
    Je vais essayer de vous montrer un exemple.

    Sinon pour ta méthode kmaniche j'ai pensé a faire comme ca, mais pour utiliser "ode45" il faut d'abord poser le problème différentiel en tant que fonction, chose que je ne peux pas faire dans le script apparemment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % script constante (enregistré en constante.m)
    a = input('') ;
    b = input('') ;
    c1 = 0 ;
    c2 = 3 ; 
    c3 = 5 ;
    x = [a b] ; %vecteur pour mes conditions initiales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    % script parametre (enregistré en parametre.m)
     
    constante %appel du script constante
     
    p1 = c1/a ;
    p2 = c1+c2+c3/b ;
    p3 = p1*2+p2 ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    % fonction (enregistré en fonction.m)
    function dx = mafonction(t, x)
     
    parametre %appel du script parametre
     
    dx = zeros(2,1)
    dx(1) = p1+c1+a*2
    dx(2) = p3+p2-c3*2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    % graphique (enregistré en graphique.m)
     
    [T,X] = ode45(@mafonction,[0 100],[a b]) ;
    plot(T,X(:,1),T,X(:,2),'-')
    Donc en gros on cherche la résolution du système différentiel :
    (da/dt) = p1+c1+a*2
    (db/dt) = p3+p2-c3*2

    J'espère avoir été plus clair. Je sais qu'il doit y avoir des tas d'erreurs dans mon code, pas facile de débuter!

    Concernant la FAQ c'est bien intéressant mais j'avais regardé avant et pas vu ce que je cherchais, en fait ce que je cherche doit être encore plus basique.

    Merci.

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Mais rien ne t'empêches de faire comme je t'ai proposé, et bien sûr dans un script tu peux appeler d'autres fonctions si tu souhaite. L'intérêt et d'avoir un programme propre et lisible

    Dans ton cas, tu définis deux fonctions c'est normal ...

  6. #6
    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
    C'est plutôt une bonne idée de séparer ton script en fonction, surtout pour l'utilisation de la fonction od45.

    Maintenant, en dehors des erreurs de programmation, tu risques d'avoir un soucis si tu réussi à faire tourner ce code : à chaque appel de la fonction 'mafonction' tu appelle la fonction 'constante' qui va redéfinir tes conditions initiales . Je ne pense pas que cela soit ce que tu souhaites (mais plutôt utiliser le x en cours pour redéfinir tes paramètres. D'ailleurs, je ne connais pas très bien ode45, mais j'ai un doute sur son efficacité si tu modifies les paramètres à chaque itération...

    Pour faire communiquer correctement tes fonctions, il faut que tu définisses les entrées/sorties. (et il faut les définir comme des fonctions). De plus pour diminuer le nombre de variable et augmenter la lisibilité, tu peux les regrouper dans des vecteurs.

    Je te propose une correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function [x0,c,p] = constante()
    % fonction constante 
    a = input('') ;
    b = input('') ;
    c(1) = 0 ;
    c(2) = 3 ; 
    c(3) = 5 ;
    x0 = [a b] ; %vecteur pour mes conditions initiales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function p = parametre(x,c,p)
    p(1) = c(1)/x(1) ;
    p(2) = c(1)+c(2)+c(3)/x(2) ;
    p(3) = p(1)*2+p(2) ;
    La fonction utilisée par ode45 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function dx = mafonction(t, x,c,p)
    p = parametre(x,c,p)
    dx = zeros(2,1);
    dx(1) = p(1)+c(1)+x(1)*2;
    dx(2) = p(3)+p(2)-c(3)*2;
    Et ton script principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [x0,c,p] = constante();
    [T,X] = ode45(@(t,x) mafonction(t,x,c,p),[0 100],x0) ;
    plot(T,X(:,1),T,X(:,2),'-');
    Je crois que cela ressemble à ce que tu souhaites faire. Analyse bien les changements que j'ai effectué, si tu as des questions, n'hésites pas. Et évidemment, c'est à adapter selon tes besoins.
    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.

Discussions similaires

  1. Besoin de conseils pour un projet
    Par JnewB dans le forum Eclipse Java
    Réponses: 10
    Dernier message: 28/08/2006, 09h55
  2. Conseil pour un projet
    Par nicolas66 dans le forum C++
    Réponses: 1
    Dernier message: 28/07/2006, 00h00
  3. Besoin de conseils pour un projet corba
    Par kaizersoze10 dans le forum CORBA
    Réponses: 5
    Dernier message: 23/04/2006, 21h01
  4. Réponses: 4
    Dernier message: 06/03/2006, 17h54
  5. [SGBD Libres] Conseils pour un projet de logiciel de gestion
    Par nh2 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 30/01/2006, 08h24

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