首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据给定向量按指数递减的矩阵

根据给定向量按指数递减的矩阵
EN

Stack Overflow用户
提问于 2012-11-14 23:33:24
回答 2查看 89关注 0票数 0

我有一个水体的太阳辐射测量矢量,我想计算到达水柱特定深度的辐射。这可以从比尔定律计算出来,我已经将它应用于我的测量的第二个深度:

代码语言:javascript
运行
复制
rad = 1+(30-1).*rand(365,1);
depth = 1:10;

kz = 0.4;
rad(:,2) = rad(:,1).*exp(-kz.*depth(2));

我如何将其应用于向量“深度”中指定的所有深度?也就是说,我如何生成一个具有365行和10列的矩阵,其中每列指的是到达该特定深度的辐射。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-14 23:51:38

由于散射和吸收导致的辐射衰减是每个深度的简单%损失,因此可以很容易地从初始辐射计算结果:

代码语言:javascript
运行
复制
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),它也可以工作。下面的解决方案很好地展示了良好的线性代数技能,尽管您可能想要添加一个注释,说明为什么不对两个向量initialRadexp-statement使用点乘。

代码语言:javascript
运行
复制
rad = initialRad * exp(-kz * depth);
票数 3
EN

Stack Overflow用户

发布于 2012-11-14 23:40:09

你应该使用循环,

在这里你可以阅读关于它们的教程,以及如何使用它们,

http://www.mathworks.com/help/distcomp/for.html

基本上,您需要的是一个包含i作为主要参数的for循环。,它应该运行

代码语言:javascript
运行
复制
i=1 .. 9

你的主要任务就会变成

代码语言:javascript
运行
复制
rad(:,i+1) = rad(:,i).*exp(-kz.*depth(2));

更准确地说

代码语言:javascript
运行
复制
for i = drange(1:9)
   rad(:,i+1) = rad(:,i).*exp(-kz.*depth(2));
end

我不知道主题,但是这个函数会一列一列地扫描你的矩阵,开始使用第一列赋值第二列,一直到第十列。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13381911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档