他の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 Booksで見ることができます。
私はこのアルゴリズムを実装してから、高価な計算関数が評価される回数をより適切に制御できるようにしました。これがステップ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 &]
]