Mathematica는 내가 작성한 "코드"를 사용하여 너무 잘 통합됩니다.
Nov 14 2020
Mathematica를 다음과 같이 만들려고합니다. [0,1] 간격을 다음으로 분할합니다. $n$동일한 간격. 그런 다음 각 구간에서 2 점에 대해 가우스 구적법을 적용합니다.
여기서 mky 질문의 방법을 사용하려고 했습니다. Mathematica에서 Composite Newton-Cotes 통합 규칙 사용
그러나 내가 얻는 결과는 너무 정확합니다.
다음은 코드입니다.
n = 1;
NIntegrate[Sin[x]/x, Evaluate@Flatten@{x, Subdivide[0., 1., n]},
Method -> {"GaussBerntsenEspelidRule", "Points" -> 2},
MaxRecursion -> 0]
그래서 이것이해야 할 일은 단지 2 개의 점이있는 Gaussian Quadrature를하는 것입니다. $[0,1]$ 그러나 나는 적어도 대답을 얻고있다 $10^{-5}$일어나서는 안되는 정확성. 내가 뭘 잘못 했어?
답변
9 MichaelE2 Nov 14 2020 at 09:07
당신은 운이 좋습니다 (낮은 오류가 발생하는 한) :
{abs, wts, err} =
NIntegrate`GaussBerntsenEspelidRuleData[2, MachinePrecision]
(* {{0.0469101, 0.230765, 0.5, 0.769235, 0.95309}, {0.118463, 0.239314, 0.284444, 0.239314, 0.118463}, {0.155257, -0.439701, 0.568889, -0.439701, 0.155257}} *)
(Sin[x]/x /. x -> abs).wts
(Sin[x]/x /. x -> abs).err
(* 0.946083 <-- integral estimate 0.0000639286 <-- estimated error bound *)
(Sin[x]/x /. x -> abs).wts - Integrate[Sin[x]/x, {x, 0, 1}]
(* 3.31957*10^-14 <-- actual error (less than the bound) *)
위의 코드는 NIntegrate
결과를 재현합니다 .
(Sin[x]/x /. x -> abs).wts -
NIntegrate[Sin[x]/x, Evaluate@Flatten@{x, Subdivide[0., 1., nn]},
Method -> {"GaussBerntsenEspelidRule", "Points" -> 2},
MaxRecursion -> 0]
(* 0. *)
이 경우 우리는 왜 운이 좋습니까? 오차는 함수와 가로 좌표를 통한 보간 다항식의 차이의 적분 abs
과 같으며 x
축 위와 아래에 대략 같은 영역이 있습니다 .
Plot[
InterpolatingPolynomial[Transpose@{abs, (Sin[x]/x /. x -> abs)}, x] -
Sin[x]/x // Evaluate,
{x, 0, 1}]
