在 matlab 中创建 3D 矩阵

Create 3D matrix in matlab

提问人:user5618251 提问时间:12/4/2015 更新时间:12/4/2015 访问量:126

问:

我想绘制安全系数(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

等。

有人可以帮我吗?

提前致谢!

数组 MATLAB 循环 矩阵 多维数组

评论


答:

2赞 Jeff Irwin 12/4/2015 #1

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

然后,第 1 层(第 1 天)由 、第 2 层由 等给出。FS3(:,:,1)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