下图是一个湖泊的示意图,该方程说明了如何计算湖泊的有效热通量。
其中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 从 0(表面)到深度 h 以 dz 为增量变化,即
z = 0:dz:h
我如何在matlab中计算这个方程的最后部分,即如何计算表面和h之间深度z处的q?这里用积分表示?
如果这应该出现在另一个堆栈溢出论坛上,我表示歉意,但它似乎与编程比纯粹的物理或数学问题更相关。
要正确积分,您需要计算 [0, h] 范围内的所有 q(z) 值。如果
q0
和 qh
是 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·z),解析计算积分就足够简单了:
I = q0 * (1 - exp(-kd * h)) / kd;