在matlab中创建3D矩阵

时间:2015-12-03 22:19:00

标签: arrays matlab loops matrix multidimensional-array

我想绘制安全系数的时间演变(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

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

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

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

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

有人可以帮助我吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

A" 3D矩阵"将更恰当地称为秩3阵列。为此,只需在时间循环中粘贴FS2计算即可。不是m,而是使用相应的mnew来计算FS2。然后将FS3(排名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