Huayi Wei
Huayi Wei
这里不是程序的 Bug, 是少输入了一个参数, `FEMeshIntegralAlg` 中默认处理的是 三角形, 四边形, 四面体, 六面体这样规则的单元, 它的输入点, 都是重心坐标的形式, 所以 barycenter 默认设置为 True, 你要处理输入是笛卡尔坐标点时, 就要设置为 False. ``` S = smspace.integralalg.integral(f, celltype=True, barycenter=False) ```
我正在尝试一种新坐标系 Decorator, 用户要积分的函数, 加上一个坐标系的 Decorator, 就会自动在你的函数对象里加一个属性, 这样数值积分程序, 可以自动判断你输入的函数需要什么样的坐标点了. 但还在尝试中, 但还有一些问题没有完全解决掉. ``` def cartesian(func): @wraps(func) def add_attribute(*args, **kwargs): return func(*args, **kwargs) add_attribute.__dict__['coordtype'] = 'cartesian' return add_attribute def barycentric(func): @wraps(func) def add_attribute(*args,...
你可以查看在 StackOverflow 上的提问和回答 https://stackoverflow.com/questions/62550259/how-to-distinguish-two-kinds-of-similar-functions-or-methods-in-python
`ScaledMonomialSpace2d `中引入 `FEMeshIntegralAlg` 是为混合元, 棱元等标准的向量有限元空间服务的, 是不能去掉的.
从本质上讲, 一类数值离散方法有默认的网格类型要求. 而你写的是 HG 的程序, 输入网格类型应是多边形网格. 你的 HG 程序不应去适应所有的网格. 我前面实现的 VEM 的程序, 都是默认网格都是 PolygonMesh, 其它类型的网格都要做转化 PolygonMesh 才能使用. 这是符合数值离散方法的预期的.
而 ScaledMonomialSpace2d 空间开始确实是专门为多边形网格设计的, 但后来我意识到这个空间其实和拉格朗日空间一样基础(甚至更基础和灵活), 它们应得到同样的重视, 它们只是多项式空间的两种不同的表达形式.
这样区分是积分效率的原因.
bug 已经修正了,你再测试一下
首先, LagrangeFiniteElementSpace 只适用于区间,三角形,四面体网格,不适用于四边形网格. 四边形网格的例子,见 https://github.com/weihuayi/fealpy/blob/master/example/PoissonFEMWithQuadMesh_example.py