Biasanya orang akan berkonsultasi dengan kertas atau buku untuk menemukan titik integrasi dan bobot untuk satuan segitiga dan tetrahedra. Saya mencari metode untuk secara otomatis menghitung poin dan bobot tersebut. Contoh kode Mathematica berikut menghitung bobot dan poin integrasi untuk elemen baris unit (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])}
Saya mencari kertas / buku yang menjelaskan secara algoritmik bagaimana hal ini dilakukan untuk segitiga dan / atau tetrahedra. Dapatkah seseorang mengarahkan saya ke beberapa informasi tentang ini. Terima kasih.
symbolic-computation
reference-request
David Ketcheson
sumber
sumber
{points, weights} = MapThread[Map, {{2 # - 1 &, 2 # &}, Most[NIntegrate`GaussRuleData[n, prec]]}]
.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}]]
.Jawaban:
The Encyclopaedia of Cubature Rumus memiliki daftar panjang teknik untuk tujuan ini dan referensi terkait.
sumber
Berikut ini adalah makalah http://journal.library.iisc.ernet.in/vol200405/paper6/rathod.pdf yang menjelaskan cara memetakan satuan segitiga ke standar 2-persegi untuk menghitung bobot dan titik pengambilan sampel untuk segitiga dalam hal poin Gauss-Legendre untuk 2-square standar.
sumber