2016-12-02 292 views
0

我试图从两个'for'循环中的两个单独值保存8个矩阵,以便我可以乘以T & kloc以找到值'k'。他们是两个独立的循环,这里&都给出8个矩阵,但是当我尝试将它们相乘时,它们的值作为迭代中的最后一个值出现。另外,当我试图在其中一个插入其中一个时,有一个大的'for'循环,我最终得到的T或kloc(无论哪个嵌套)的输出矩阵多于8个。我会很感激任何帮助。谢谢。MATLAB保存'for'循环中的所有值

%-------------------------Givens/Constants--------------------------% 

E = 10200; %ksi 
b = 1; %in 
h = 0.25; %in 
I = (b*h^3)/12; %in^4 
A = b*h; 


%%Lengths &Angles 
addangle = atand(8/16.25); 
theta1 = 0; 
theta2 = atand(16.25/8); 
theta3 = 2*addangle + 63.7886; 
theta4 = 90; 
L1=8; 
L3 = 16.25/sind(63.7886); 
L2 = 16; 
L4 = 16.25; 
%--------------------------------------------------------------------% 



%%Local stiffness matrices 

%The angle between 8 beams of structure from the positive x-axis 
%(In order of member ID 1:8) 

for theta=[theta1,theta1,theta1,theta1,theta3,theta2,theta3,theta4] 

ct = cosd(theta); 
st = sind(theta); 

T =[ct,st,0,0,0,0; -st,ct,0,0,0,0;... 
    0,0,1,0,0,0;0,0,0,ct,st,0; 0,0,0,-st,ct,0;0,0,0,0,0,1]; 
end 


%Length of 8 seperate beams in truss structure 
%(In order of member ID 1:8) 

for L=[L3,L1,L1,L3,L2,L2,L2,L4]  
C = (E*I)/(L^3); 
line1 = [(A*L^2)/I,0,0,-(A*L^2)/I,0,0]; 
line2 = [0,12,6*L,0,-12,6*L]; 
line3 = [0,6*L,4*L^2,0,-6*L,2*L^2]; 
line4 = [-(A*L^2)/I,0,0,(A*L^2)/I,0,0]; 
line5 = [0,-12,-6*L,0,12,-6*L]; 
line6 = [0,6*L,2*L^2,0,-6*L,4*L^2]; 

kloc = C*[line1;line2;line3;line4;line5;line6]; 
end 

%Need to calculate 8 matrices of 'k' where... 
% k = TT*kloc*T 

回答

0

合并循环

两个环路的长度是相同的,所以你可以使用一个单一的一个

theta=[theta1,theta1,theta1,theta1,theta3,theta2,theta3,theta4]; 
L=[L3,L1,L1,L3,L2,L2,L2,L4]; 
k = zeros(1,length(L)); 
for id=1:length(theta) % or length(L) 
    theta_loop = theta(id); 
    L_loop = L(id); 
    % calculate T 
    % calculate C and kloc 
    k(id) = TT*kloc*T; 
end 

高维

您可以保存所有TCkloc到更高的维度,但您必须小心维度,您可能还需要预先初始化多维数组(张量)。事情是这样的,注伪代码

for id=1:length(theta) 
    theta_loop = theta(id); 
    % calculate T 
    T(:,:,id) = T; 
end 
for id=1:length(L) 
    L_loop = L(id); 
    % calculate C and kloc 
    kloc(:,:,id) = kloc; 
end 
k = kloc*T; 

您也可以尝试存储在细胞中,其中每个单元包含独立Tkloc等数据,但我不是细胞的大风扇,所以我不会详述。