Автоматическая генерация точек интегрирования и весов для треугольников и тетраэдров


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

В любом случае: вы видели это ?
JM

@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

1
Вот статья Голуба и Вельша. Я покопаюсь в своих бумагах и посмотрю, есть ли что-нибудь для симплексов ...
JM

Ответы:



3

Вот документ http://journal.library.iisc.ernet.in/vol200405/paper6/rathod.pdf, в котором описывается, как сопоставить единичный треугольник со стандартным 2-квадратом, чтобы вычислить веса и точки выборки для треугольник в терминах точек Гаусса-Лежандра для стандартного 2-квадрата.


Это интересная идея, похоже, для n = 2 это требует 4 балла, для типичного литературного справочника для треугольников для n = 2 дается 3 балла. Вы знаете что-нибудь об этом?

Это связано с тем, что они используют отображение треугольника на квадрат. Я не могу сказать ничего, кроме этого, так как я не работаю с треугольниками (я использую четырехугольники), поэтому я не знаю, что обычно делается на практике. Я только что нашел газету и подумал, что это довольно просто.
Джеймс Кастер

на самом деле это довольно просто, и я увижу, что предлагают другие газеты, но простота этого и элегантность использования того, что у меня уже есть, являются плюсом для этого. Недостатком является оценка дополнительной функции. Спасибо в любом случае.

Еще один минус в том, что точки не симметричны.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.