Generazione automatica di punti e pesi di integrazione per triangoli e tetraedri


12

Di solito si consulta un documento o un libro per trovare punti e pesi di integrazione per il triangolo unitario e il tetraedro. Sto cercando un metodo per calcolare automaticamente tali punti e pesi. Il seguente esempio di codice Mathematica calcola pesi e punti di integrazione per elementi unit line (quad / hexahedron):

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

Sto cercando un libro / libro che descriva algoritmicamente come questo viene fatto per triangoli e / o tetraedri. Qualcuno può indicarmi alcune informazioni al riguardo. Grazie.


1
C'è un modo più semplice per fare le regole di quadratura di Gauss-Legendre in Mathematica : {points, weights} = MapThread[Map, {{2 # - 1 &, 2 # &}, Most[NIntegrate`GaussRuleData[n, prec]]}].
JM,

In ogni caso: hai visto questo ?
JM,

@JM, sfortunatamente il tuo metodo sopra proposto non funziona per prec = Infinity; ma grazie anche per quello.

2
In tal caso, ecco un metodo che funziona, a causa di 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
Ecco l'articolo di Golub e Welsch. Scorrerò i miei documenti e vedrò se c'è qualcosa per i semplici ...
JM,

Risposte:



3

Ecco un documento http://journal.library.iisc.ernet.in/vol200405/paper6/rathod.pdf che descrive come mappare il triangolo unitario al quadrato 2 standard per calcolare pesi e punti di campionamento per triangolo in termini di punti Gauss-Legendre per il 2 quadrato standard.


È un'idea interessante, sembra che per n = 2 siano necessari 4 punti, per il riferimento letterario tipico per i triangoli per n = 2, sono indicati 3 punti. Ne sai qualcosa?

Ciò deriva dal fatto che stanno usando una mappatura dal triangolo al quadrato. Non posso dire altro, dal momento che non lavoro con i triangoli (uso i quadrilateri), quindi non so cosa si fa di solito in pratica. Ho appena trovato il documento e ho pensato che potesse sembrare una cosa piuttosto semplice.
James Custer,

anzi è abbastanza semplice e vedrò che gli altri articoli suggeriscono, ma la semplicità per questo e l'eleganza di usare qualcosa che già ho sono un vantaggio per questo. L'aspetto negativo è quindi la valutazione della funzione aggiuntiva. Grazie comunque.

un altro aspetto negativo è che i punti non sono simmetrici.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.