Geração automática de pontos e pesos de integração para triângulos e tetraedros


12

Geralmente, consulta-se um artigo ou livro para encontrar pontos e pesos de integração para o triângulo unitário e o tetraedro. Estou procurando um método para calcular automaticamente esses pontos e pesos. O exemplo de código do Mathematica a seguir calcula pesos e pontos de integração para elementos de linha de unidade (quad / hexaedro):

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])}

Estou procurando um artigo / livro que descreva algoritmicamente como isso é feito para triângulos e / ou tetraedros. Alguém pode me indicar algumas informações sobre isso. Obrigado.


1
Há uma maneira mais fácil de fazer as suas regras de quadratura de Gauss-Legendre no Mathematica : {points, weights} = MapThread[Map, {{2 # - 1 &, 2 # &}, Most[NIntegrate`GaussRuleData[n, prec]]}].
JM

De qualquer forma: você já viu isso ?
JM

@JM, seu método proposto acima, infelizmente, não funciona para prec = Infinity; mas obrigado por isso também.

2
Nesse caso, aqui está um método que funciona, devido à Golub e Welsch: 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
Aqui está o artigo de Golub e Welsch. Eu vou cavar através de meus papéis e ver se há algo para simplices ...
JM

Respostas:



3

Aqui está um artigo http://journal.library.iisc.ernet.in/vol200405/paper6/rathod.pdf que descreve como mapear o triângulo unitário para o quadrado padrão 2 para calcular os pesos e pontos de amostragem para o triângulo em termos de pontos de Gauss-Legendre para o quadrado padrão 2.


Essa é uma ideia interessante, parece que para n = 2 isso precisa de 4 pontos, pois a referência típica da literatura para triângulos para n = 2, são dados 3 pontos. Você sabe algo sobre isso?

Isso decorre do fato de que eles estão usando um mapeamento do triângulo para o quadrado. Não posso dizer nada além disso, já que não trabalho com triângulos (uso quadriláteros), então não sei o que geralmente é feito na prática. Acabei de encontrar o jornal e achei que parecia uma coisa bem simples de fazer.
James Custer

na verdade, é bastante direto e verei que os outros trabalhos sugerem, mas a simplicidade deste e a elegância de usar algo que já tenho são uma vantagem para este. A desvantagem é então a avaliação da função adicional. Obrigado em qualquer caso.

outra desvantagem é que os pontos não são simétricos.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.