Автоматичне генерування точок інтеграції та ваг для трикутників та тетраедрів


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.