使用计算机代码集成来自样本的函数

计算科学 计算物理学 一体化 软件推荐
2021-12-15 14:26:25

我有一个功能c(I(r)). 不是常数,c不表示常数。所以c是一个函数I这是一个函数r.I是强度 (W/cm2)。

c很难采样,我已经采样了 10,000 个值I.

我需要整合c跨越所有空间,即 3 维积分:d3r.

c(I(r))d3r

我想使用已经采样的 10,000c的。

有没有一种方法可以数值积分我的c使用我已经拥有的那些样品?的价值观I在哪个c被采样在对数空间中等距分布。 c死亡(变为 0)除了在一个非常小的区域d3r空间。

我只有c(I)并不是c(r). 我可以创建一个输出的例程I从一个向量r如果需要的话。再次,抽样c(I)很难,我不能取样c(r),即直接采样c从一个向量r,但仅从一个值I.

一张图片来说明如何c(I)看起来像:

在此处输入图像描述

2个回答

如果您的样本是按照网格完成的,那么您可以使用正交方法对其进行积分。这些方法可用于多种编程语言,例如 Python 或 Matlab。

此外,正如 RW Bird 所提到的,您可以对数据进行插值并整合这些多项式。如果数据遵循网格,这与以前的方法相同。如果没有,那么您将需要构建可以是全局或本地的插值器。

如果您选择均匀分布的随机点,另一种选择是使用蒙特卡罗方法来计算积分。在这种情况下,积分将是

VNn=1Nc(I(ri)),

在哪里V是区域的体积,并且N样本数。

听起来你想对函数 c 进行数字积分。首先选择要使用的体积元素的大致数量。这些应该在定义函数 I 的同一坐标系中。然后每个体积元素的位置定义对应的 I。对于其中的每一个,您都需要扫描数据以找到 c 的近似对应值。您可能希望在 c 的值之间进行插值,这些值太高或太低。对于积分,对这些计算的结果进行累积求和。