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 :

Problème de calcul formel


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut Problème de calcul formel
    Bonjour,

    J'ai programmé sur Matlab la méthode des déplacements pour un portique bi-encastré avec un force horizontale appliquée à gauche de la traverse.

    Aprés avoir déroulé les calculs formels, les efforts obtenus au pied des poteaux sont faux. Cependant, quand je remplace directement les variables par des valeurs numériques, le programme sort des résultats justes (vérifiés avec un logiciel de calcul).

    Je ne comprends pas...

    Quelqu'un a t'il déjà rencontré un cas similaire?

  2. #2
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Peut-on voir ton code pour avoir une idée d'où peut provenir le problème ?
    (peut-être une mauvaise affectation des variables...)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2008
    Messages : 57
    Par défaut
    bonjour,

    Tu dois avoir fait une erreur de calcul, tout simplement

    Par contre, c'est ton calcul sur papier ou ta modélisation numérique qui te donne un résultat faux ?

    quand je remplace directement les variables par des valeurs numériques
    Ce n'est pas la même chose ?
    le programme sort des résultats justes
    ton programme ?
    vérifiés avec un logiciel de calcul
    un autre programme ?

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Bonjour,

    merci de vous intéresser à mon problème. En fait, j'aimerai beaucoup avoir fait une erreur de calcul...

    Voilà mon programme avec le maximum d'explication. Par défaut, il va faire l'application numérique. En changeant les lignes indiquées, on peut peut obtenir les résultats formels.

    A la fin, Je compare le moment obtenu par le formulaire avec celui du programme, ainsi que tous les efforts obtenus par le programme avec ceux obtenus par un logiciel de calcul de structure 'RDM6'.

    En conclusion,

    L'expression du moment en pied du premier poteau est:
    Mprogramme=P*h*(2*L*I1+3*I2*h)/(2*I1*L+4*I2*h)

    L'expression du moment par un formulaire est:
    Mformulaire=P*h*(3*I2*h+I1*L)/((12*I2*h)+(2*I1*L))

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    %variables: E=module de young, L=longueur de la traverse, h=hauteur du poteau
    %A1,A2=section des poteaux et de la traverse, I1,I2=inertie des poteaux et de la traverse
    %P=force horizontale appliquée au noeud 2
     
     
     
     
     
    %Aprés avoir compilé ce programme en expression numérique, on pourra la ligne cidessous:
    A1=10.32; A2=10.32; I1=171.01; I2=171.01; L=800; h=400; E=21*10^3; P=1000;
    %par:
    %syms E L h A1 A2 I1 I2 P;
    %Ceci afin de voir que l'expression littérale du moment au pied du premier poteau encastré (avec A1=0 et A2=0, efforts normaux négligés dans les barres),
    %ne correspond pas au formulaire.
    %ATTENTION, il faut activer la ligne 'Efforts=simplify(Efforts)' à la fin du programme.
     
     
    %Matrice élémentaire du premier poteau (dans le repère local).
    Kf1 = E*I1/h^3*[12 6*h -12 6*h ; 6*h 4*h^2 -6*h 2*h^2 ; -12 -6*h 12 -6*h ; 6*h 2*h^2 -6*h 4*h^2  ]; %partie flexionnelle
    Ka1=E*A1/h*[1 -1 ; -1 1 ]; %partie axiale
    Kp1([2 3 5 6 ],[2 3 5 6 ])=Kf1; %assemblage de la partie axiale et flexionnelle
    Kp1([1 4 ],[1 4 ])=Ka1;
     
    %r1=Matrice de rotation du premier poteau.
    r1=[0 1 0 ; -1 0 0 ; 0 0 1];
    R1=kron(eye(2),r1);
     
    %Kp1=Matrice élémentaire du premier poteau (dans le repère global).
    Kp1=(R1)'*Kp1*R1; 
     
     
     
    %Kt=Matrice élémentaire de la traverse.
    Kf2 = E*I2/L^3*[12 6*L -12 6*L ; 6*L 4*L^2 -6*L 2*L^2 ; -12 -6*L 12 -6*L ; 6*L 2*L^2 -6*L 4*L^2  ]; %partie flexionnelle
    Ka2=E*A2/L*[1 -1 ; -1 1 ]; %partie axiale
    Kt([2 3 5 6 ],[2 3 5 6 ])=Kf2; %assemblage de la partie axiale et flexionnelle
    Kt([1 4 ],[1 4 ])=Ka2;
     
     
     
     
    %Matrice élémentaire du deuxième poteau (dans le repère local).
    Kf3 = E*I1/h^3*[12 6*h -12 6*h ; 6*h 4*h^2 -6*h 2*h^2 ; -12 -6*h 12 -6*h ; 6*h 2*h^2 -6*h 4*h^2  ]; %partie flexionnelle
    Ka3=E*A1/h*[1 -1 ; -1 1 ]; %partie axiale
    Kp3([2 3 5 6 ],[2 3 5 6 ])=Kf3; %assemblage de la partie axiale et flexionnelle
    Kp3([1 4 ],[1 4 ])=Ka3;
     
     
    %Matrice de rotation du deuxième poteau.
    r3=[0 -1 0 ; 1 0 0 ; 0 0 1];
    R3=kron(eye(2),r3);
     
    %Kp3=Matrice élémentaire du deuxième poteau (dans le repère global).
    Kp3=(R3)'*Kp3*R3; 
     
     
     
    %Assemblage de la matrice globale (repère global).
     
    K=zeros(12);
    Kr(1:6, 1:6)= K(1:6, 1:6)+ Kp1;
    Kr(4:9, 4:9)= K(4:9, 4:9)+ Kt;
    km= Kp1(4:6,4:6)+Kt(1:3,1:3);
    Kr(4:6,4:6)=km;
     
    Kr(7:12, 7:12)= K(7:12, 7:12)+ Kp3;
    km2= Kt(4:6,4:6)+Kp3(1:3,1:3);
    Kr(7:9,7:9)=km2;
    %Kr(à ce stade)= matrice de rigidité gobale de la structure
     
     
    %Ci-dessous: Elimination des déplacements impossibles aux appuis encastrés, 
    %(c'est à dire les trois déplacements au noeud 1 et 4). 
    %on élimine donc les lignes et les colonnes 1,2,3,10,11,12.
     
    i=[1, 2, 3, 10, 11, 12 ];
    Kr(:,i)=[];
    Kf=Kr;   
    %Kf = partie de la matrice de rigidité qui exprime les efforts extérieurs aux 4 noeuds, 
    %en fonction des déplacements des noeuds 2 et 3.
    %(ceci afin de faire le calcul des efforts aprés avoir fait celui des déplacements)
     
     
    Kr(i,:)=[];
    %Kr = partie de la matrice 'carrée' de rigidité, 
    %qui nous permet de calculer les déplacements aux noeuds 2 et 3
     
    %F=Matrice colonne des forces appliquées aux noeuds 2 et 3 (efforts nodeaux)
    F=[P;0;0;0;0;0] 
     
     
    %U= déplacements des noeuds 2 et 3 (on inverse Kr)
    U= Kr\F;
    %U=simplify(U);
     
    %Efforts=  efforts aux appuis 1 et 4 
    Efforts=Kf*U;
    %Efforts=simplify(Efforts)
     
    %(Dans efforts, On retrouve bien les efforts extérieurs appliqués aux noeuds 2 et 3 ).
     
    %Les résultats obtenus ici prennent en compte les efforts normaux (présence des sections A1 et A2)
    %En éliminant A1 et A2 dans l'expressiondu du moment à l'encastrement du premier poteau (à la ligne 3 de 'Efforts'),
    %On doit retrouver la même expression que dans les formulaires. (Les efforts normaux sont en effet trés négligeable).
    %Hors, le moment du formulaire est:
    Mformulaire=P*h*(3*I2*h+I1*L)/((12*I2*h)+(2*I1*L))
     
    %Et le moment calculé par le programme est:
    %Mp=(6*h*I1^3*I2*L^2+9*h^2*I2^2*I1^2*L)*h*P/(2*I1*I2*h*(3*I1^2*L^2+6*I1*L*I2*h))
    %Soit, (en le simplifiant)
    Mprogramme=P*h*(2*L*I1+3*I2*h)/(2*I1*L+4*I2*h)
     
    %En appliquant les valeurs numérique au début du programme, on trouve une valeur de Mp abérrante par rapport 
    %à celle calculé par 'RDM6' et par ce programme (ligne 3 de 'Efforts').
     
    %Les résultats de RDM6 sont:
    RDM6=[-500.2; -187.5;125080.3 ; 1000;0;0;0;0;0;-499.8;187.5;124931.3]
    %Rappel des résultats du programme:
    Efforts

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Finallement,

    j'obtiens des résultats numériques justes, ce qui montre qu'il n'y a pas d'erreur dans ce programme.
    En revanche, les résultats formels sont faux.

    Le calcul symbolique sous Matlab emploie le noyau de maple. On doit donc retrouver les mêmes résultats sous maple.

    Aprés avoir programmé cette méthode sous maple, j'obtiens les mêmes résultats, c'est à dire des résultats numériques justes, mais des résultats littérales faux.

    Je pense que le problème pourrai se situer lors de l'inversion de la matrice de rigidité en expression littérale. Peut être que je n'emploie pas la bonne commande pour inverser la matrice. Mais je n'ai rien trouvé d'autre sur l'aide de matlab (ou bien de maple).

    Quelqu'un a t'il déjà rencontré un problème d'inversion de matrice en expression littérale?

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    J'ai oublié de préciser la commande que j'utilise pour inverser la matrice 'Kr' (afin d'obtenir l'expression des déplacements 'U'):
    U= Kr\F;

Discussions similaires

  1. Problème de calcul matricielle
    Par Clad3 dans le forum Algorithmes et structures de données
    Réponses: 21
    Dernier message: 29/06/2005, 21h45
  2. [C] Calcul Formel
    Par Paniez dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 19/03/2005, 10h36
  3. problème de calcul des normales par sommet
    Par captainSeb dans le forum OpenGL
    Réponses: 2
    Dernier message: 21/01/2005, 13h42
  4. [Calendar]Problème de calcul de date
    Par valerie90 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 08/12/2004, 12h13
  5. Problème de calcul unix_timestamp
    Par petit_stagiaire dans le forum Administration
    Réponses: 2
    Dernier message: 28/04/2004, 15h27

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