我有一个水体的太阳辐射测量矢量,我想计算到达水柱特定深度的辐射。这可以从比尔定律计算出来,我已经将它应用于我的测量的第二个深度:
rad = 1+(30-1).*rand(365,1);
depth = 1:10;
kz = 0.4;
rad(:,2) = rad(:,1).*exp(-kz.*depth(2));
我如何将其应用于向量“深度”中指定的所有深度?也就是说,我如何生成一个具有365行和10列的矩阵,其中每列指的是到达该特定深度的辐射。
发布于 2012-11-14 23:51:38
由于散射和吸收导致的辐射衰减是每个深度的简单%损失,因此可以很容易地从初始辐射计算结果:
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-x-1-k和1-x-n-k),或者如果向量被转置(例如,1-x-m和n-x-1),它也可以工作。下面的解决方案很好地展示了良好的线性代数技能,尽管您可能想要添加一个注释,说明为什么不对两个向量initialRad
和exp
-statement使用点乘。
rad = initialRad * exp(-kz * depth);
发布于 2012-11-14 23:40:09
你应该使用循环,
在这里你可以阅读关于它们的教程,以及如何使用它们,
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
我不知道主题,但是这个函数会一列一列地扫描你的矩阵,开始使用第一列赋值第二列,一直到第十列。
https://stackoverflow.com/questions/13381911
复制相似问题