我有一个水体的太阳辐射测量向量,我想计算到达水柱中特定深度的辐射。这可以从比尔定律计算出来,我已将其应用于我的测量的第二个深度:
rad = 1+(30-1).*rand(365,1);
depth = 1:10;
kz = 0.4;
rad(:,2) = rad(:,1).*exp(-kz.*depth(2));
我如何将它应用于向量“深度”中指定的所有深度?即,我将如何生成一个具有 365 行和 10 列的矩阵,其中每列指的是到达该特定深度的辐射。
由于散射和吸收引起的辐射衰减是一个简单的单位深度损失百分比,因此您可以从初始辐射很容易地计算出结果:
initialRad = 1+(30-1).*rand(365,1);
depth = 0:10; %# start with zero so that the first column is your initial radiation
kz = 0.4;
rad = bsxfun(@times, initialRad, exp(-kz*depth) );
请注意,正如@Rasman 指出的那样,您可以使用向量乘法而不是bsxfun
,因为将 m×1 数组与 1×n 数组相乘会产生 m×n 数组。该bsxfun
解决方案可能更稳健,因为它也适用于数组具有额外维度(例如,如果您进行多个测试,则为 m×1×k 和 1×n×k),或者如果向量是转置(例如 1×m 和 n×1)。下面的解决方案很好地展示了良好的线性代数技能,尽管您可能想添加一个注释,为什么您不使用两个向量initialRad
和- 语句的点乘法exp
。
rad = initialRad * exp(-kz * depth);
你应该使用循环,
在这里你可以阅读关于它们的教程,以及如何使用它们,
http://www.mathworks.com/help/distcomp/for.html
基本上你需要的是一个包含 i 作为主要参数的 for 循环。应该为哪个
i=1 .. 9
你的主要任务将变成
rad(:,i+1) = rad(:,i).*exp(-kz.*depth(2));
更准确地说
for i = drange(1:9)
rad(:,i+1) = rad(:,i).*exp(-kz.*depth(2));
end
我不知道主题,但此功能将逐列扫描您的矩阵,使用第 1 列开始分配第 2 列并一直持续到第 10 列。