【问题标题】:Create 3D matrix in matlab在 matlab 中创建 3D 矩阵
【发布时间】:2016-03-08 17:38:45
【问题描述】:

我想绘制安全系数(FS,对某个区域发生滑坡风险的量化)的时间演变。

计算如下:

effcohesion=0;
rootcohesion=0;
gammat=12.9E3;
gammaw=9810;
c=0;
deltac=0;
m=0.5;
z=2.5;
phi=16;
slope=rand(20,20)*30       % slope of a gridpoint in area

Strength = c + deltac + (gammat - gammaw.*m).*z.*(cosd(slope).^2);
Stress = gammat.*z.*(sind(slope)).*(cosd(slope));
Part = tand(phi);
FS2 = (Strength./Stress).*(Part)

现在。 m的值(=决定FS的地下水位高度)全年变化,因此不是恒定的。我有一个包含降水、蒸发等数据的文件,但为了不太复杂,我在这里假设 m 只是一年中某天的函数:

mnew=zeros(365,1);
for t=1:365
mnew(t)=(m+t)/150;
end

我现在有一个 20x20 点的 FS 数据集,其中 m =0.5 (=FS2) 和一个文件,其中 m 在一年中的演变 (= mnew)。

我现在如何创建一个 3D 矩阵,其中 (1) 存储 FS 的空间变化(因此 FS 在 20x20 矩阵上的值)和 (2) FS 在全年中以 m 为函数的时间演变。最终,我想要一个矩阵,其中包含 FS 的空间和时间演变。

第 1 层 = 第 1 天所有 20x20 点的 FS

第 2 层 = 第 2 天所有 20x20 点的 FS

等等

有人可以帮我吗?

提前致谢!

【问题讨论】:

    标签: arrays matlab loops matrix multidimensional-array


    【解决方案1】:

    “3D 矩阵”更恰当地称为 3 阶数组。为此,只需将您的 FS2 计算粘贴到时间循环中即可。代替m,使用适当的mnew 来计算FS2。然后将FS3(rank 3数组)的那一层设置为FS2

    然后,第 1 层(第 1 天)由 FS3(:,:,1) 给出,第 2 层由 FS3(:,:,2) 给出,等等。

    m0=0.5;
    
    % Sizes of array
    n1 = 20;
    n2 = 20;
    n3 = 365;
    
    FS3 = zeros(n1, n2, n3);
    
    mnew=zeros(n3,1);
    for t=1:n3
    
        mnew(t)=(m0+t)/150;
    
        effcohesion=0;
        rootcohesion=0;
        gammat=12.9E3;
        gammaw=9810;
        c=0;
        deltac=0;
    
        m = mnew(t);
    
        z=2.5;
        phi=16;
        slope=rand(n1,n2)*30;       % slope of a gridpoint in area
    
        Strength = c + deltac + (gammat - gammaw.*m).*z.*(cosd(slope).^2);
        Stress = gammat.*z.*(sind(slope)).*(cosd(slope));
        Part = tand(phi);
        FS2 = (Strength./Stress).*(Part);
    
        FS3(:,:,t) = FS2;
    
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多