arrays - 在 matlab 中创建 3D 矩阵

标签 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 的空间变化(即 20x20 矩阵上的 FS 值)和 (2) 全年中 FS 随 m 函数变化的时间演变。最终,我想要一个矩阵,其中包含 FS 的空间和时间演化。

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

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

等等

有人可以帮助我吗?

提前致谢!

最佳答案

“3D 矩阵”更恰本地称为 3 阶数组。为此,只需将 FS2 计算结果粘贴到时间循环内即可。使用适当的 mnew 代替 m 来计算 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

关于arrays - 在 matlab 中创建 3D 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34077317/

相关文章:

php - woocommerce 类别深度作为 if 语句的条件

javascript - 从javascript中的关键字数组计算字符串中的出现次数

javascript - 展平由 JavaScript 中的嵌套元素分组的数组

algorithm - 在特定范围内查找两个大向量中元素之间的差异值并将其合并(对于 bsxfun 而言太大)

c++ - 递归函数的 Matlab 代码生成

matlab - 如何裁剪图像中的多个对象 [MATLAB]

javascript - 如何在循环的while或foreach中制作动态其他选项输入框

PHP is_numeric 不适用于数组值

php - php或/和mysql中的多重排序不生效

matlab - 函数定义矩阵的 reshape