Bonjour
je suis débutante sur Matlab et je dois modéliser une structure et calculer les modes propres§§ pourriez vous m'aider s'il vous plait
Bonjour
je suis débutante sur Matlab et je dois modéliser une structure et calculer les modes propres§§ pourriez vous m'aider s'il vous plait
Il nous faut plus de précisions
Quel problème rencontres-tu avec MATLAB ?
Montre nous ce que tu as déjà codé, même si c'est faux.
Bonjour
merci pour votre réponse, en fait je cherche à calculer les modes propores et faire un maillage à ma structure. vous croyez que c'est possible de le faire avec MATLAB
ma structure se compose de 21 barres et 10 noeuds.
Oui un fichier Python que j'ai généré sous salome meca. Je voudrais calculer les fréquences propres de cette structure en utilisant Matlab.
Voici déjà comment importer la géométrie de la structure :
Il ne te reste plus qu'à définir les matrices de rigidité locales à l'aide des longueurs et des sections de chaque barre et des caractéristiques de leurs matériaux. Puis à assembler le tout pour obtenir la matrice de rigidité globale.
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 fid = fopen('module.py', 'r'); X = textscan(fid, '%s', 'delimiter', '\n'); fclose(fid); % Recuperation des coordonnees des noeuds idx = strncmp(X{1}, 'N', 1); subX = X{1}(idx); noeuds = zeros(numel(subX),3); for n = 1:numel(subX) noeuds(n,:) = sscanf(subX{n}, 'N%*d = geompy.MakeVertex(%f,%f,%f)'); end % Recuperation de la connectivite des barres idx = strncmp(X{1}, 'BARRE', 5); subX = X{1}(idx); barre = zeros(2,numel(subX)); for n = 1:numel(subX) barre(:,n) = sscanf(subX{n}, 'BARRE%*d = geompy.MakeLineTwoPnt(N%d, N%d)'); end barre = barre + 1; figure plot(noeuds(:,1), noeuds(:,2), 'ro', 'markerfacecolor', 'r'); hold on line(noeuds(barre,1), noeuds(barre,2)) axis equal vis3d
Merci beaucoup , le fopen m'ouvre le fichier et le je suppose que le r c'est pour le lire. Ce qui est bizzard c'est que quand je fais la même chose que toi:
il me donne -1 comme résultat !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part fid=fopen('module.py','r')
J'ai essayé de le télécharger en utilisant : load('\users\anita\desktop\module.py'), ça ne marche pas non plus.
Toi t'as réussi facilement à le lire sur matlab!! ou peut-être que je dois lui donner le chemin :
Qu'est-ce que t'en penses?
Code : Sélectionner tout - Visualiser dans une fenêtre à part fid=fopen('\users\anita\desktop\module.py','r')
Soit tu mets le fichier module.py dans le même dossier que celui où se trouve ton programme MATLAB, soit tu mets le chemin complet vers le fichier module.py dans l'appel à fopen.
Par contre le chemin que tu nous montre semble bizarre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 filename = 'module.py'; pathname = '\users\anita\desktop\'; fid = fopen(fullfile(pathname, filename), 'r');
Su quel système d'exploitation travailles-tu ?
Merci beaucoup ça marche super bien!! tu crois que je peux faire la figure en 3D.??
[EDIT]
C'est déjà fait en 3d. Je ne l'ai pas vu merci beaucoup
[EDIT 2]
Oups j'ai crié victoire avant l'heure je crois.
En fait pour que je puisse voir ma structure en 3D je dois rajouter à plot (neouds(barre,3)) et neouds(:3)?? ce qui va donner :
C'est correct??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 figure plot(noeuds(,:1),(noeuds(,:2), (noeuds(,:3), 'ro', 'markerfacecolor', 'r'); hold on line(noeuds(barre,1), noeuds(barre,2), noeuds(barre,3)) axis equal vis3d
Je en sais pas pourquoi j'ai zappé la troisième dimension pour l'affichage
Bref, comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 figure plot3(noeuds(:,1), noeuds(:,2), noeuds(:,3), 'ro', 'markerfacecolor', 'r'); hold on line(noeuds(barre,1), noeuds(barre,2), noeuds(barre,3)) axis equal vis3d
Parfait; ça marche super bien!! Est ce qu'on peut faire le maillage sur Matlab à cette structure??
Sinon j'ai une autre question. Le code marche aussi si j'utilise une structure avec un nombre beaucoup plus important en barre et câble?? car j'essaye de l'utiliser pour une autre structure mais il n'arrive pas à détecter les barres ils m'affichent que les neouds
en fait pour la nouvelle structure, les barres ne sont pas détecter , j'ai ce résultats
barre= empty matrix: 0-by-2
size(barre)=0 2
alors que j'ai plus de 200 barres
à ton avis, c'est quoi le problème?? qu'est ce que je dois changer??
J'ai bien compris mais sans voir le contenu du fichier correspondant, impossible de savoir pourquoi.
Si aucune barre n'est importée, c'est qu'aucune ligne du fichier ne commence par 'BARRE'
en fait, j'ai fait la même chose pour générer le fichier .py. et ça ne marche pas.
je t'envoie le fichier en question.
Voici une version plus robuste :
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 % fid = fopen('module.py', 'r'); fid = fopen('treilli.py', 'r'); X = textscan(fid, '%s', 'delimiter', '\n'); fclose(fid); % Recuperation des coordonnees des noeuds idx = ~cellfun('isempty', strfind(X{1},'geompy.MakeVertex')); subX = X{1}(idx); points = struct('coord', zeros(numel(subX),3), 'name', {}); for n = 1:numel(subX) points(1).coord(n,:) = sscanf(subX{n}, '%*s = geompy.MakeVertex(%f,%f,%f)'); points(1).name{n} = sscanf(subX{n}, '%s%*s%*s%*s%*s'); end % Recuperation de la connectivite des barres idx = ~cellfun('isempty', strfind(X{1},'geompy.MakeLineTwoPnt')); subX = X{1}(idx); lignes = struct('point1',{}, 'point2',{}, 'name', {}); for n = 1:numel(subX) lignes(1).point1{n} = sscanf(subX{n}, '%*s = geompy.MakeLineTwoPnt(%s%*s'); lignes(1).point2{n} = sscanf(subX{n}, '%*s%*s%*s%s'); lignes(1).name{n} = sscanf(subX{n}, '%s%*s%*s%*s'); end lignes.point1 = cellfun(@(x) x(1:end-1), lignes.point1, 'UniformOutput',false); lignes.point2 = cellfun(@(x) x(1:end-1), lignes.point2, 'UniformOutput',false); figure plot3(points.coord(:,1), points.coord(:,2), points.coord(:,3), 'ro', 'markerfacecolor', 'r'); hold on for n = 1:numel(lignes.point1) idx = strcmp(points.name, lignes.point1{n}) | strcmp(points.name, lignes.point2{n}); if strncmp(lignes.name{n}, 'BARR', 4) h_barr(n) = line(points.coord(idx,1), points.coord(idx,2), points.coord(idx,3) ... , 'color', 'g', 'linewidth', 2); else h_geomobj(n) = line(points.coord(idx,1), points.coord(idx,2), points.coord(idx,3) ... , 'color', 'b', 'linewidth', 2); end end axis equal vis3d
Partager