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

C++ Discussion :

difficultés pour réaliser un schéma explicite


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 8
    Points
    8
    Par défaut difficultés pour réaliser un schéma explicite
    Bonjour forum,

    Je débute en C++ et j'essais de faire un programme pour calculer la matrice (1*2) X en fonction de la matrice carré (2*2) K et la matrice (1*2) F comme suit :

    Matrice K connue et F[1] = 20*t et F[2]=cos(t)

    K*X(t+dt)=F(t+dt)*X(t)

    dt=10^3

    je pense à faire une boucle for mais je vois pas comment la réaliser ...

    Besoin de votre aide ...

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Le produit des matrices A de Mnp(K) et B de Mpq(K), c'est-à-dire la matrice AB = (cik), est définie quelque soit (i, k) appartenant à [1,n] x [1,q] par cik = sum(aij x bjk) avec j variant de 1 à p.

    Dans cette définition, tu retrouves différentes boucles for imbriquées. Une pour les indices i variant de 1 à n, une pour les indices k variant de 1 à q et une pour faire la somme avec l'indice j.

    Dans ton cas, c'est même plus simple puisque F est un vecteur ligne (n=1). La première boucle for peut donc être omise. Tu te retrouves donc avec quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(int k = 1; k <= 2; k++) {
      x(t + dt, k) = 0;
      for(int j = 1; j <= 2; j++ {
        x(t + dt, k) += F(t +dt, j) * K(t, j, k)
      }
    }
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(int k = 1; k <= 2; k++) {
      x(t + dt, k) = 0;
      x(t + dt, k) += 20 * t * K(t, 1, k);
      x(t + dt, k) += cos(t) * K(t, 2, k);
    }
    Je te laisse adapter les indices (en C++, les indices des tableaux commencent à zéro) et vérifier que tout ceci est bien correct. Je l'ai écrit vite et il faut que je parte.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    merci pour ta réponse

    je ne comprends pas la ligne x(t +dt) = 0 ... dsl mais je suis vraiment un grand débutant !!

    par contre je m'aperçois que je me suis trompé dans mon probleme :

    c'est : K*X(t+dt)=F(t+dt)+X(t) pour 0<t<=5 (c'est un + et non un * dans le second membre)

    K dans M22, X et F dans M12

    L'inconnu est X(t)

    avec X(t) = 0 pour t=0


    est ce que mon code est bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int t;
    F(t, 0) = 20*t;
    F(t, 1) = cos (t);
    for (int j=0, j<=1, j++) {
    X(t=0,j)=0;
    X(t+dt, j) = K[0][j]*(F(t+dt, 0)+X(t,0))+K[1][j]*(F(t+dt, 1)+X(t,1));
    }
    J'ai transposé K.

    comment écrire la condition 0<t<=5 avec un pas de temps de dt= 0.1??

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Points : 8
    Points
    8
    Par défaut
    voici mon nouveau 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
    22
    23
    24
     
    #include "objet-masth.h"
     
    int main () {
     
    	MATDBL K(2,2);
            VECDBL X(2), F(2);
            int j;
    	float t;
            double K[0][0]=100;
            double K[0][1]=K[1][0]=-80;
            double K[1][1]=16;
    	F(t, 0) = t; 
    	F(t, 1) = cos (t); 
    	double dt = 0.001;
     
    	//COMMENT ECRIRE POUR T ALLANT DE 0 A 5 AVEC UN PAS DE dt
     
    for (int j=0, j<=1, j++) { 
    		X(t=0,j)=0; 
    		X(t+dt, j) = K[0][j]*(F(t+dt, 0)+X(t,0))+K[1][j]*(F(t+dt, 1)+X(t,1)); 
    	}
    	printf X;
    }
    Il me manque une petite partie de code que je n'arrive pas a écrire

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    je ne comprends pas la ligne x(t +dt) = 0 ... dsl mais je suis vraiment un grand débutant !!
    Oups... je n'ai écrit qu'un pseudo C. x(t + dt) n'a pas de sens en C. On peut dire que x est une fonction prenant t en argument et que x(t + dt) correspond au retour de la fonction mais ce n'est qu'une écriture simplifiée. Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	F(t, 0) = t; 
    	F(t, 1) = cos (t);
    	X(t=0,j)=0; 
    	X(t+dt, j) =
    n'est pas un code C valide. Pour résoudre ton problème, tu peux faire quelque chose comme
    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
     
    VECDBL X(t, VECDBL x_t, double dt) {
      VECDBL x_t_dt(2); // Je te fais confiance pour la syntaxe de VECDBL...
      for (int j=0; j<=1; j++) { 
        x_t_dt[j] = K[0][j] * (t + dt +x_t[0]) + K[1][j] * (cos(t+dt) + x_t[1]);
      return x_t_dt;
    }
     
    int main() {
      ...
      double dt = 0.001;
      VECDBL x(2);
      x[0] = 0;
      x[1] = 0;
      for(double t = 0; t <=5; t += dt) {
        x = X(t, x, dt);
      }
      printf(x);
      ...
    }
    Tu peux bien entendu remplacer l'appel à X par le code-même de la fonction X en faisant deux boucles for imbriquées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            double K[0][0]=100;
            double K[0][1]=K[1][0]=-80;
            double K[1][1]=16;
    n'est pas non plus valide.
    Tout d'abord tu déclares la matrice.
    puis tu initialises les valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        K[0][0] = 100;
        K[0][1] = -80;
        ...
    Tout ceci semble me dire que tu es en C++ avec deux classes VECDBL et MATBDL. La classe VECDBL a un constructeur qui prend un unique argument et MATDBL qui prend deux arguments. Un opérateur [] est défini pour chacune de ces classes. Mais comme je n'ai pas le code, je ne peux faire que des suppositions.

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. [Déploiement] difficulter pour réaliser un diagramme de déploiement avec modelio
    Par coolanso dans le forum Autres Diagrammes
    Réponses: 2
    Dernier message: 07/05/2015, 23h03
  3. [Toutes versions] Difficultés pour réaliser des requêtes
    Par WhiteBean dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/05/2014, 11h27
  4. Difficulté pour réaliser une requete peu complexe :/
    Par DanaX dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/05/2007, 13h55
  5. Difficultés pour afficher un pixel à l'écran
    Par Bubonik software dans le forum C
    Réponses: 9
    Dernier message: 17/08/2003, 12h48

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