다른 CAS가이를 수행하는 방법을 알고 있으면 도움이 될 수 있습니다.
f(x)(x(t),y(t))f(x)
플로팅 도메인에서 규칙적으로 간격을 둔 점 그리드로 시작하십시오. (Mathematica에는을 (를) 호출하는 횟수를 제어하는 매개 변수가 있습니다 PlotPoints
.)
(x1,f(x1)),(x2,f(x2)),(x3,f(x3))x1+x22x2+x32
반복 한계에 아직 도달하지 않은 경우 ( MaxRecursion
Mathematica에서 설정 ) 2 단계부터 반복하십시오.
이 중 일부는 Stan Wagon의 Mathematica in Action 책에서 논의되며 여기에서 Google 도서에서 볼 수 있습니다 .
함수 계산에 많은 비용이 계산되는 횟수를 더 잘 제어하기 위해이 알고리즘을 구현했습니다. 2 단계를위한 Mathematica 코드는 다음과 같습니다.
nd[{points_, values_}] :=
Transpose@{(Drop[points, 1] + Drop[points, -1])/2,
Differences[values]/Differences[points]}
subdivide1d[result_, resolution_, maxAngle_: 10] :=
Module[
{deriv, angle, dangle, pos, nf},
deriv = nd[result\[Transpose]];
angle = ArcTan[#2] & @@@ deriv;
dangle = Differences[angle];
pos = Flatten@Position[dangle, d_ /; Abs[d] > maxAngle/180 Pi];
pos = Union[pos, pos + 1];
nf = Nearest[result[[All, 1]]];
Select[deriv[[pos, 1]], Abs[# - First@nf[#]] > resolution &]
]