固体体积计算

计算科学 matlab 一体化
2021-12-11 21:11:00

为了计算由定义的固体的体积

51100(cosxcosy+cosxcosz+cosycosz)+cosx+cosy+cosz+10

在哪里x,y,z[0,2π]

在此处输入图像描述

我使用了以下代码(在 MATLAB 中)

f = @(x, y, z) double(1 + cos(x) + cos(y) + cos(z) + 0.51*(cos(x).*cos(y)  + cos(x).*cos(z) + cos(y).*cos(z))<=0)
q = 8*integral3(f, 0, pi, 0, pi, 0, pi)

但给出警告信息和NaN

Warning: Reached the maximum number of function evaluations (10000). The result fails the global error test.

如何以尽可能高的精度获得所需的结果?

更新:

Gauss-Kronrod 规则似乎正确地解决了这个问题;进一步的变量替换,ui=cosxi涉及雅可比行列式可能会导致计算效率。

1个回答

我会按照@Tyler Olsen 的建议去做;你可以网格化。正确的工具是CGAL http://www.cgal.org,线性元素是最容易使用的,事实上,一切都差不多完成了,只需遵循示例3D Mesh Generation,关于 3D Domains Bounded by Implicit Isosurfaces 的部分。通过网格细化,您将收敛到精确的解决方案。

另一种方法是仅生成表面混搭并应用发散定理(高斯定理 - Ostrogradsky 定理)。

V=13SxndS

您也可以生成表面补丁,并隐式计算这些表面的映射并使用高斯定理将它们一一积分。