自动生成三角形和四面体的积分点和权重


12

通常人们会参考一本书或一本书来找到单位三角形和四面体的积分点和权重。我正在寻找一种自动计算这些点和权重的方法。以下Mathematica代码示例计算单位线(四/六面体)元素的积分权重和点:

unitGaussianQuadraturePoints[points_] := 
  Sort[x /. 
    Solve[Evaluate[LegendreP[points, x] == 0], {x}], ! 
     OrderedQ[N[{#1, #2}]] &];

unitGaussianQuadratureWeights[points_] := 
  Module[{gps, f, int, integr, vars, eqns}, 
   gps = unitGaussianQuadraturePoints[points];
   f[0, 0] := 1;
   f[0., 0] := 1.;
   f[x_, n_] := x^n;
   int = Integrate[f[x, #], x] & /@ Range[0, points - 1];
   integr = Subtract @@@ (int /. x :> {1, -1});
   vars = Table[Unique[c], {Length[gps]}];
   eqns = 
    Table[Plus @@ Thread[Times[vars, f[#, i - 1] & /@ gps]] == 
      integr[[i]], {i, points}];
   Return[(vars /. Solve[eqns, vars])];];


unitGaussianQuadratureWeights[2]

{{1, 1}}

unitGaussianQuadraturePoints[2]

{1/Sqrt[3], -(1/Sqrt[3])}

我正在寻找一本纸/书,该书/书以算法方式描述三角形和/或四面体的完成方式。有人可以给我指出一些有关此的信息。谢谢。


1
Mathematica中,有一种更简便的方法来执行高斯-勒格朗德正交规则:{points, weights} = MapThread[Map, {{2 # - 1 &, 2 # &}, Most[NIntegrate`GaussRuleData[n, prec]]}]
JM 2012年

无论如何:您看到吗?
JM 2012年

@JM,不幸的是,您上面建议的方法对prec = Infinity无效;但是也谢谢你

2
在这种情况下,这里有一个方法,它的作品,因为戈卢布和韦尔施:Transpose[MapAt[2(First /@ #)^2 &, Eigensystem[SparseArray[{Band[{2, 1}] -> #, Band[{1, 2}] -> #}, {n, n}]], {2}]] &[Table[k/Sqrt[(2 k - 1)(2 k + 1)], {k, n - 1}]]
JM 2012年

1
是Golub和Welsch的论文。我将仔细研究我的论文,看看是否有一些简单的问题……
JM

Answers:



3

这是一篇论文http://journal.library.iisc.ernet.in/vol200405/paper6/rathod.pdf,其中描述了如何将单位三角形映射到标准2平方以计算权重和采样点。标准Gauss-Legendre点代表标准2平方的三角形。


这是一个有趣的想法,对于n = 2来说,这需要4点,对于n = 2的三角形的典型文献参考,给出了3点。您对此一无所知吗?

这是因为他们使用了从三角形到正方形的映射。因为我不使用三角形(我使用四边形),所以我无话可说,所以我不知道实际上通常会做什么。我刚找到纸,并认为这似乎是一件非常简单的事情。
James Custer 2012年

确实,这很简单,我会看到其他论文的建议,但是对此的简单性和使用我已经拥有的东西的优雅性对这一项是有利的。缺点是附加功能评估。无论如何谢谢。

另一个缺点是这些点不对称。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.