यह जानकर कि अन्य कैस ऐसा कैसे करते हैं, इससे आपको मदद मिल सकती है।
मेरी जानकारी के लिए, गणितज्ञ एक-चर फ़ंक्शन या पैरामीट्रिक कर्व साजिश रचने के लिए निम्नलिखित बुनियादी एल्गोरिथ्म पर भिन्नता का उपयोग करता है (मैं मान रहा हूँ इस विवरण के लिए)।f(x)(x(t),y(t))f(x)
प्लॉटिंग डोमेन पर बिंदुओं के एक नियमित रूप से स्पेस ग्रिड के साथ शुरू करें। Control गणितज्ञ में, यह नियंत्रित करने के लिए एक पैरामीटर है कि कितने को लेना है, कहा जाता है PlotPoints
।)
क्रमिक लाइन सेगमेंट की प्रत्येक जोड़ी को देखें (तीन क्रमिक बिंदुओं द्वारा परिभाषित, ) और एक नया डालें नमूना खंड दोनों खंडों के बीच में ( और ) यदि उनका कोण एक सीमा से बड़ा है।(x1,f(x1)),(x2,f(x2)),(x3,f(x3)) x2+x3x1+x22x2+x32
यदि हम अभी तक पुनरावृति सीमा तक नहीं पहुँचे हैं ( MaxRecursion
Mathematica द्वारा निर्धारित ), तो चरण 2 से दोहराएँ।
इसमें से कुछ की चर्चा स्टैन वैगन की किताब मैथेमेटिका इन एक्शन में की गई है, जिसे आप यहां गूगल बुक्स पर देख सकते हैं ।
मैंने इस एल्गोरिथ्म को लागू करने से पहले बेहतर नियंत्रण किया कि फ़ंक्शन की गणना करने के लिए मेरे महंगी कितनी बार मूल्यांकन किया गया था। यहाँ चरण 2 के लिए गणित कोड है:
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 &]
]