for文でループさせて得た結果を足し合わせた結果を得たい
42 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
下記がプログラムとなっております。 for文でループさせて「gk」と呼ばれるものに値をいれています。
function GK_20180627()
t = 0.08;
E = 21.8;
v = 0.87;
X = [0,0,2,2];
Y = [0,2,2,0];
node = [1,2,3;4,3,2];
d = zeros(3,3);
d(1,1) = 1-v;
d(1,2) = v;
d(2,1) = v;
d(2,2) = 1-v;
d(3,3) = (1-2*v)/2;
d = d*E/((1-2*v)*(1+v));
for ne = 1:2
i = node(ne,1);
j = node(ne,2);
k = node(ne,3);
Delta = X(j) * Y(k) + X(k) * Y(i)...
+ X(i) * Y(j) - X(j) * Y(i)...
- X(i) * Y(k) - X(k) * Y(j);
area = 0.5*Delta;
bm = [Y(j)-Y(k), 0,Y(k)-Y(i), 0,Y(i)-Y(j), 0;...
0,X(k)-X(j), 0,X(i)-X(k), 0,X(j)-X(i);...
X(k)-X(j),Y(j)-Y(k),X(i)-X(k),Y(k)-Y(i),X(j)-X(i),Y(i)-Y(j)]/Delta;
sm = bm'*d*bm*t*area;
gk = zeros(8,8);
ir = zeros(1,6);
ir(6) = 2*k;
ir(5) = ir(6)-1;
ir(4) = 2*j;
ir(3) = ir(4)-1;
ir(2) = 2*i;
ir(1) = ir(2)-1;
for i = 1:6
it = ir(i);
for j = 1:6
jt = ir(j);
gk(it,jt) = gk(it,jt) + sm(i,j);
end
end
disp(gk)
end
end
gkの結果↓
-0.2332 0 0.2332 -0.2332 0 0.2332 0 0
0 0.0819 0.5482 -0.0819 -0.5482 0 0 0
0.2332 0.5482 -0.1512 -0.3151 -0.0819 -0.2332 0 0
-0.2332 -0.0819 -0.3151 -0.1512 0.5482 0.2332 0 0
0 -0.5482 -0.0819 0.5482 0.0819 0 0 0
0.2332 0 -0.2332 0.2332 0 -0.2332 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 -0.0819 0 0.0819 0.5482 0 -0.5482
0 0 0 0.2332 -0.2332 -0.2332 0.2332 0
0 0 0.0819 -0.2332 0.1512 -0.3151 -0.2332 0.5482
0 0 0.5482 -0.2332 -0.3151 0.1512 -0.2332 0.0819
0 0 0 0.2332 -0.2332 -0.2332 0.2332 0
0 0 -0.5482 0 0.5482 0.0819 0 -0.0819
この二つの行列を足し合わせて以下のような値を出力したいと考えています。
-0.2332 0 0.2332 -0.2332 0 0.2332 0 0
0 0.0819 0.5482 -0.0819 -0.5482 0 0 0
0.2332 0.5482 -0.2331 -0.3151 0 0.3150 0 -0.5482
-0.2332 -0.0819 -0.3151 0.0820 0.3150 0 0.2332 0
0 -0.5482 0 0.3150 0.2331 -0.3151 -0.2332 0.5482
0.2332 0 0.3150 0 -0.3151 -0.0820 -0.2332 0.0819
0 0 0 0.2332 -0.2332 -0.2332 0.2332 0
0 0 -0.5482 0 0.5482 0.0819 0 -0.0819
宜しくお願いします。
Réponse acceptée
Ma
le 28 Juin 2018
以下のようにすれば大丈夫です。変更点は、(1)gk1という行列をneに関するループの前で定義し、(2)ループ内で計算したgkをgk1に足していっているだけです。この結果、gk1に御望みの結果が保存されています。
function GK_20180627()
t = 0.08;
E = 21.8;
v = 0.87;
X = [0,0,2,2];
Y = [0,2,2,0];
node = [1,2,3;4,3,2];
d = zeros(3,3);
d(1,1) = 1-v;
d(1,2) = v;
d(2,1) = v;
d(2,2) = 1-v;
d(3,3) = (1-2*v)/2;
d = d*E/((1-2*v)*(1+v));
gk1=zeros(8,8);
for ne = 1:2
i = node(ne,1);
j = node(ne,2);
k = node(ne,3);
Delta = X(j) * Y(k) + X(k) * Y(i)...
+ X(i) * Y(j) - X(j) * Y(i)...
- X(i) * Y(k) - X(k) * Y(j);
area = 0.5*Delta;
bm = [Y(j)-Y(k), 0,Y(k)-Y(i), 0,Y(i)-Y(j), 0;...
0,X(k)-X(j), 0,X(i)-X(k), 0,X(j)-X(i);...
X(k)-X(j),Y(j)-Y(k),X(i)-X(k),Y(k)-Y(i),X(j)-X(i),Y(i)-Y(j)]/Delta;
sm = bm'*d*bm*t*area;
gk = zeros(8,8);
ir = zeros(1,6);
ir(6) = 2*k;
ir(5) = ir(6)-1;
ir(4) = 2*j;
ir(3) = ir(4)-1;
ir(2) = 2*i;
ir(1) = ir(2)-1;
for i = 1:6
it = ir(i);
for j = 1:6
jt = ir(j);
gk(it,jt) = gk(it,jt) + sm(i,j);
end
end
disp(gk)
gk1=gk+gk1;
end
end
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur ループと条件付きステートメント dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!