rco*_*yer 2 optimization interpolation wolfram-mathematica
作为我工作的一部分,我经常需要可视化复杂的 3 维密度。我使用的一个程序套件将密度的径向分量输出为对数网格上的一组 781 个点,ri = (Rmax/Rstep)^((i-1)/(pts-1)
乘以球谐函数。对于低对称性系统,球谐函数的数量可以相当大以确保精度,例如,一个系统需要对应于 的 49 个谐波lmax = 6
。因此,要在 Mathematica 中使用这些数据,我需要计算最多 49 个插值函数的总和,每个函数都乘以不同的球谐函数。在使用 v.6 并使用Interpolation
和 设置构建插值径向函数时r = Sqrt(x^2 + y^2 + z^2)
,我会 ContourPlot3D
在一个多小时后停止,没有任何显示。这包括将InterpolationOrder
和 都减少MaxRecursion
到 1。
出现了几种替代方案:
ListContourPlot
然后使用。Piecewise
将它们缝合在一起。(这本身就出现了,因为我可以使用简化来帮助降低结果函数的复杂性。)我最终使用了两者,因为InterpolatingFunction
它的评估有明显的延迟,并且有多达 49 个插值函数需要评估,任何延迟都会变得明显。另外,ContourPlot3D
样条线速度更快,但它没有给我带来我想要的速度。
我坦白承认,我没有Interpolation
在 v.7 上尝试过,也没有在升级后的硬件(G4 v. Intel Core i5)上尝试过。然而,我正在寻找当前方案的替代方案;最好是我可以ContourPlot3D
直接使用的。我可以尝试其他形式的样条曲线,例如B-spline,并可能将其与 结合起来UnitBox
而不是使用Piecewise
.
编辑:为了澄清,我当前的实现涉及为每个径向部分创建一阶样条,将每个样条乘以各自的球谐函数,对Simplify
每个径向间隔上的方程求和并进行求和,然后使用Piecewise
将它们绑定到一个函数中。因此,我的实现是半解析的,因为球谐函数是精确的,并且只有径向部分是数值的。这是我希望能够使用 的部分原因ContourPlot3D
,以便我可以利用数据的半分析性质。值得注意的是,径向网格足够精细,可以生成径向部分的良好表示,并且可以平滑地进行插值。虽然这给了我显着的加速,但当我编写代码时,对于我当时使用的硬件来说,速度仍然很慢。
因此,ContourPlot3D
我不会使用 ,而是首先生成函数,如上所述,然后在 80 3笛卡尔网格上对其进行评估。我在 中使用的就是这一步的数据ListContourPlot3D
。由于这不是自适应网格,因此在某些地方这太当然了,而且我缺少功能。
如果你可以不用 Mathematica,我建议你看一下Paraview(美国政府资助的 FOSS,所有平台),我发现它在可视化大量数据方面优于一切。该软件的核心是“可视化工具包” VTK,如果需要,您可以找到/编写其他前端。
VTK/Paraview 可以处理几乎任何数据类型:结构化网格上的标量和向量或随机点、多边形、时间序列数据等。在 Mathematica 中,我经常将网格数据转储为 VTK 旧格式,在最简单的情况下,它看起来像这样
# vtk DataFile Version 2.0
Generated by mma via vtkGridDump
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 49 25 15
SPACING 0.125 0.125 0.0625
ORIGIN 8.5 5. 0.7124999999999999
POINT_DATA 18375
SCALARS RF_pondpot_1V1MHz1amu double 1
LOOKUP_TABLE default
0.04709501616121583
0.04135197485227461
... <18373 more numbers> ...
Run Code Online (Sandbox Code Playgroud)
哈!
归档时间: |
|
查看次数: |
3088 次 |
最近记录: |