for文でループさせて得た結果を足し合わせた結果を得たい
조회 수: 42 (최근 30일)
이전 댓글 표시
下記がプログラムとなっております。 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
宜しくお願いします。
채택된 답변
Ma
2018년 6월 28일
以下のようにすれば大丈夫です。変更点は、(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
추가 답변 (0개)
참고 항목
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!