Matlab - Ayuda reparar codigo

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 5 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Ayuda reparar codigo

Publicado por Jeifer Martinez (4 intervenciones) el 21/07/2020 01:09:39
Hola, estoy teniendo el siguiente problema, tengo un codigo que genera matrices y tengo una variable llamada gdl_elemento que genera una serie de posiciones para agregar en orden las matrices generadas a una matriz global, el problema que tengo es que el programa toma correctamente los datos del gdl_barra para la primera posicion pero luego no toma el siguiente grupo de datos, sino que sigue sumando el resto de matrices en la misma posicion. Por favor si alguien me pudiera decir como corregirlo en problema esta luego de la linea %ensamble matriz global, pero no se en que parte

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
clear all, clc
 
prompt='Ingrese el numero de elementos por lado\n';
Nelem=input(prompt);
w=linspace(0,1,Nelem+1);
[z,m]=size(w);%me interesa es m que es el numero de nodos
 
L=1;%Longitud elemento
c=[1 0 0 0; 1 L 0 0; 1 0 L 0;1 L L L*L];
c_inv=inv(c);
e=0.03;%espesor de la placa
K=0.05;%conducitividad termica del elemento
 
syms x y
dN1_dx=c_inv(2,1)+c_inv(4,1)*y;
dN1_dy=c_inv(3,1)+c_inv(4,1)*x;
dN2_dx=c_inv(2,2)+c_inv(4,2)*y;
dN2_dy=c_inv(4,2)*y;
dN3_dx=c_inv(4,3)*y;
dN3_dy=c_inv(3,3)+c_inv(4,3)*x;
dN4_dx=c_inv(4,4)*y;
dN4_dy=c_inv(4,4)*x;
 
k_e=zeros(4);
K_e(1,1)=dN1_dx*dN1_dx+dN1_dy*dN1_dy;
K_e(1,2)=dN1_dx*dN2_dx+dN1_dy*dN2_dy;
K_e(1,3)=dN1_dx*dN3_dx+dN1_dy*dN3_dy;
K_e(1,4)=dN1_dx*dN4_dx+dN1_dy*dN4_dy;
 
K_e(2,2)=dN2_dx*dN2_dx+dN2_dy*dN2_dy;
K_e(2,3)=dN2_dx*dN3_dx+dN2_dy*dN3_dy;
K_e(2,4)=dN2_dx*dN4_dx+dN2_dy*dN4_dy;
 
K_e(3,3)=dN3_dx*dN3_dx+dN3_dy*dN3_dy;
K_e(3,4)=dN3_dx*dN4_dx+dN3_dy*dN4_dy;
 
K_e(4,4)=dN4_dx*dN4_dx+dN4_dy*dN4_dy;
 
K_e(2,1)=K_e(1,2);
K_e(3,1)=K_e(1,3);
K_e(4,1)=K_e(1,4);
K_e(3,1)=K_e(1,3);
K_e(3,2)=K_e(2,3);
K_e(4,3)=K_e(3,4);
K_e(4,2)=K_e(2,4);
 
K_e_int=K*e*int(K_e);
 
%Ciclo para generar y almacenar las matrices K locales
x_move=w(1,1:end-1);
y_move=w(1,1:end-1);%el y va en el ciclo mas externo
cont=0;
Ki=zeros(4,4,Nelem^2);
for j=1:m-1;
    for i=1:m-1;
     cont=cont+1;
     Ki(:,:,cont)=subs(K_e_int,[x,y],[x_move(1,i),y_move(1,j)]);
   end
end
 
%Generacion de los vectores de grados de libertad
%para el ensamble de la matriz global
a=0;
b=1;
c=Nelem+1;
d=Nelem+2;
cont=0;
y=[1:1:(Nelem+1)^2];
gdl_elemento=zeros(1,4,(Nelem)^2);
for i=1:Nelem^2
    cont=cont+1;
 
    if d~=y.*(Nelem+1)
       a=a+1;
       b=b+1;
       c=c+1;
       d=d+1;
    gdl_elemento(:,:,cont)=[a,b,c,d];
 
    else d==y.*(Nelem+1);
            a=a+2;
            b=b+2;
            c=c+2;
            d=d+2;
            gdl_elemento(:,:,cont)=[a,b,c,d];
    end
end
 
 
%Ensamble de la matriz K global
h=(Nelem+1)^2; %Progresion que relaciona #elementos con #nodos
K_global=zeros(h,h);
re=0;
tt=0;
for i=1:Nelem^2
    re=re+1
    Ki(:,:,i)
    gdl_elemento(:,:,re)
 
    for         jgdl=1:4
                jcolumna=gdl_elemento(:,jgdl)
 
                        for igdl=1:4
                            ifila=gdl_elemento(:,igdl)
                            K_global(ifila,jcolumna)=K_global(ifila,jcolumna)+Ki(igdl,jgdl,i)
                        end
        end
 
 
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder