Thông thường người ta sẽ tham khảo một bài báo hoặc cuốn sách để tìm các điểm và trọng số tích hợp cho tam giác đơn vị và tứ diện. Tôi đang tìm kiếm một phương pháp để tự động tính toán các điểm và trọng lượng như vậy. Sau đây Mathematica mã ví dụ tính toán trọng lượng hội nhập và điểm cho dòng đơn vị (quad / lục giác) yếu tố:
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])}
Tôi đang tìm một bài báo / cuốn sách mô tả về mặt thuật toán cách thực hiện cho các hình tam giác và / hoặc tứ diện. Ai đó có thể chỉ cho tôi một số thông tin về điều này. Cảm ơn.
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}]]
.
{points, weights} = MapThread[Map, {{2 # - 1 &, 2 # &}, Most[NIntegrate`GaussRuleData[n, prec]]}]
.