在简单的泊松问题中使用物理参数作为高斯随机变量

计算科学 有限元 统计数据 随机数生成 可能性 视界
2021-12-25 07:24:03

我想将物理动态力学问题的输入参数更改为高斯随机变量并查看生成的概率密度函数 (PDF)。我使用有限元方法在 C++ 和 Python 语言中创建确定性代码。然而,在我去那里之前,我想首先将这种技术应用于用 python 或 C++ 编写的简单泊松问题确定性 FEM 代码。我在下面提到了我的想法。如果您以前这样做过,请通过您自己的方法帮助我。

在泊松问题中,我需要改变k,即空间可变性参数,作为具有某种统计分布的 RV。让我们假设平均值为 1 和一个标准差。偏差 0.3 或任何其他方便的值。现在,我想针对参数的不同值多次运行此代码 -k. 因此,假设我使用randn()Matlab/python 的函数生成了一个包含 100 个值的数组。现在,可能需要一个 shell 脚本或 python 脚本来使用这个带有for-loop 的数组并为每个值运行 FEM 代码 100 次k. 循环中将如何提及确定性 FEM 代码?它将如何接受这些价值观k? 有没有人有可以提供帮助的通用脚本?

我也非常感谢有关后处理的一些建议/评论。我相信输出.vtk.pvd格式文件可用于在 Paraview 软件中创建 PDF。我对PDF的生成也有点困惑。我相信我必须在 2D 网格上选择一个点,对于每个点,我都有输出值xy方向,因为它是一个二维问题。因此,我也必须选择 1 个方向。因此,我正在寻找 1 点、1 方向上的输出 PDF。那是对的吗?我不知道。

我基本上想使用正交或采样进行非侵入式多项式混沌扩展。但是,如上所述,我从蒙特卡洛开始,一步一步,所以我了解如何进行预处理和后处理。

1个回答

在您的 100 个随机值实例的循环中k,您可以将值写入k放入文件中,并调用您的有限元代码;然后有限元代码可以打开文件,读取值k从中提取,然后将其用于您可能想要使用它进行的任何计算。

至于你的第二个问题,将不确定性可视化是很困难的。为什么不针对每个值在一堆点处输出解决方案k,然后手动为各个点创建直方图?这在matlab中应该很容易。