【问题标题】:calculate integration in matlab for environmental physics data series在matlab中计算环境物理数据系列的积分
【发布时间】:2013-01-04 12:05:25
【问题描述】:

下图是湖泊的示意图,方程式说明了如何计算湖泊的有效热通量。

其中 S 是地表通量向量,q 是短波辐射,h 是混合层深度,z 是湖泊深度。例如:

q0 = 400+(1-400).*rand(100,1); % This is the short wave radiation
kd = 0.8; % extinction coefficient
h = 10; % depth of the surface mixed layer
for i = 1:length(q0); % loop for calculating short wave radiation at depth h
    qh(i) = q0(i).*exp(-kd*h); % here, qh is calculated according to the Lambert Beer law
end

给定

dz = 0.5

z 以 dz 为增量从 0(表面)到深度 h 变化,即

z = 0:dz:h

我将如何在 matlab 中计算该方程的最后一部分,即如何在表面和 h 之间的深度 z 处计算 q?这里用积分表示?

如果这应该出现在另一个堆栈溢出论坛上,我们深表歉意,但它似乎与编程有关,而不是纯粹的物理或数学问题。

【问题讨论】:

  • 要获得比trapz 更准确的结果,请查看integral 函数(或其原语quadquadgkquadl)。

标签: matlab integration equation heat


【解决方案1】:

要正确集成,您需要计算 [0, h] 范围内的所有 q(z) 值。如果q0qh 是N×1 列向量,这意味着q 应该是一个N×M 矩阵,其中M 是[0, h] 范围内的样本点数。

首先,让我们正确定义z

z = linspace(0, h, 200); %// M=200, but it's an arbitrary number to your choosing

q 的计算可以简化为:

q = q0 * exp(-kd * z);

qh实际上等于q的最后一列,q(:, end)

积分本身可以近似为一个总和并使用sum 计算:

dz = z(2) - z(1);
I = sum(q, 2) * dz;

附言

由于 q(z) = e(-kd i> ·z),你可以很简单地解析计算积分:

I = q0 * (1 - exp(-kd * h)) / kd;

【讨论】:

  • 你不相信cumtrapz(z, qh) 更适合这个问题吗?只是因为Sq0qh 是数组,而trapz(z, qh) 检索一个标量。你有什么建议?
  • 是的,实际上这个问题有点模糊,导致Sq(z) 的表达式缺失。
  • 对不起,但不应该是z = linspace(0,h,numel(q0)) ?顺便说一句,这与问题z = 0:.5:h 中给出的定义不一致
  • 不,从问题中我推断出您想要计算qz 的值与q 的长度无关。关于z = 0:.5:h,这只是 OP 计算积分的尝试。当然,这可以更改为 linspace(0, h, 21) 以与问题保持一致,但这会使积分计算的准确性降低。
  • 非常感谢您非常详细的回答。
猜你喜欢
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2021-09-05
  • 2019-03-10
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多