【问题标题】:MATLAB save all values from 'for' loopsMATLAB 保存“for”循环中的所有值
【发布时间】:2016-12-02 20:41:25
【问题描述】:

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

%-------------------------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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    合并循环

    两个循环的长度相同,因此您可以使用一个

    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
    

    更高维度

    您可以将所有T、C 和kloc 保存到更高的维度中,但是您必须注意维度,您可能还需要提前预初始化多维数组(张量) .像这样,注意伪代码

    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;
    

    您也可以尝试将数据存储在单元格中,其中每个单元格包含单独的T、kloc 等。但我不是单元格的忠实粉丝,因此我不会详细说明。 em>

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 2017-03-17
      • 2021-08-01
      • 1970-01-01
      相关资源
      最近更新 更多