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