2011-05-25 10 views
5

मैं रिवर्स इंजीनियरिंग कर रहा हूँ कैसे मेथेमेटिका सूची प्रक्षेप करता है:(नहीं हर्मिट) रेखांकन से मेथेमेटिका प्रक्षेप कार्यों को पहचानें

(* Fortunately, Mathematica WILL interpolate an arbitrary list *) 

tab = Table[a[i], {i,1,100}] 

f = Interpolation[tab] 

(* get the coefficient of each term by setting others to zero *) 

Plot[{f[42+x] /. {a[42] -> 0, a[43] ->0, a[44] -> 0, a[41] -> 1}}, 
{x,0,1}] 

Plot[{f[42+x] /. {a[41] -> 0, a[43] ->0, a[44] -> 0, a[42] -> 1}}, 
{x,0,1}] 

Plot[{f[42+x] /. {a[42] -> 0, a[41] ->0, a[44] -> 0, a[43] -> 1}}, 
{x,0,1}] 

Plot[{f[42+x] /. {a[42] -> 0, a[43] ->0, a[41] -> 0, a[44] -> 1}}, 
{x,0,1}] 

(* above is neither Hermite, nor linear, though some look close *) 

(* these are available at oneoff.barrycarter.info/STACK/ *) 

Table[f[42+x] /. {a[42] -> 0, a[43] ->0, a[44] -> 0, a[41] -> 1}, 
{x,0,1, 1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff41.txt 

Table[f[42+x] /. {a[41] -> 0, a[43] ->0, a[44] -> 0, a[42] -> 1}, 
{x,0,1, 1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff42.txt 

Table[f[42+x] /. {a[41] -> 0, a[42] ->0, a[44] -> 0, a[43] -> 1}, 
{x,0,1, 1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff43.txt 

Table[f[42+x] /. {a[41] -> 0, a[42] ->0, a[43] -> 0, a[44] -> 1}, 
{x,0,1, 1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff44.txt 

संपादित करें: धन्यवाद, whuber! यही वही था जो मैं चाहता था। संदर्भ के लिए, गुणांक (क्रम में) हैं:

(x-2)*(x-1)*x/-6 
(x-2)*(x-1)*(x+1)/2 
x*(x+1)*(x-2)/-2 
(x-1)*x*(x+1)/6 
+0

पठनीयता के लिए यह सभी को एक साजिश को खत्म करने या उन्हें बहुत छोटा बनाने में मदद करेगा। –

उत्तर

7

प्रलेखन के अनुसार इंटरपोलेटर टुकड़े टुकड़े बहुपद है। यह थोड़ा अस्पष्ट है, इसलिए यहां कुछ जांच की जा रही है।

आप प्रयोगात्मक रूप से स्थापित कर सकते हैं कि इंटरपोलेटर डेटा का एक रैखिक कार्य है। सभी संभावित डेटा के लिए एक अच्छा आधार फॉर्म के वैक्टर होते हैं {1,0, ..., 0}, {0,1,0, ..., 0}, ..., {0, ..., 0,1}। ,

test[n_, i_] := Module[{x = ConstantArray[0,n]},x[[i]] = 1; x] 

आप इस तरह कुछ उदाहरण कोशिश कर रहा द्वारा linearity पुष्टि कर सकते हैं गुणांक के साथ एक $ डॉलर और $ $ ख पर अभिनय: इस उद्देश्य से, के एक छोटे से समारोह का निर्माण लंबाई $ n $ के इन वैक्टर का उत्पादन करने जाने $ i^\ text {वें} $ और $ j^\ पाठ की लंबाई $ n $ के {वें} $ आधार वैक्टर:

With[{a=1, b=2.5, n=5, i=2, j=3}, 
    Plot[{Interpolation[a test[n,i] + b test[n,j]][x], 
     a Interpolation[test[n,i]][x] + b Interpolation[test[n,j]][x]}, {x, 1, n}] 
] 

किया जाएगा लेकिन एक भी वक्र क्योंकि दो कार्य आरोपित कर रहे हैं।

रैखिकता स्थापित करने के बाद, यह $ n $ आधार वैक्टरों पर इंटरपोलेटर के मूल्यों का विश्लेषण करने के लिए पर्याप्त होगा। आप भिन्नता से बहुपदों की डिग्री निर्धारित कर सकते हैं। डिफ़ॉल्ट रूप से डिग्री 3 है, लेकिन आप इसे "इंटरपोलेटिंगऑर्डर" पैरामीटर के साथ संशोधित कर सकते हैं। निम्नलिखित कोड लंबाई $ n $ के डेटा के लिए ioMax के माध्यम से आदेश 1 interpolating, सभी आधार वैक्टर प्रयोग करने के लिए स्पष्ट रूप से piecewise निरंतर क्षेपक के डेरिवेटिव से उत्पन्न घटता की एक तालिका साजिश होगा:

With[{n=7, ioMax = 5}, 
    Table[ 
     Module[{fns}, 
      fns = Table[Interpolation[test[n,i], InterpolationOrder->io], {i,1,n}]; 
      Table[Plot[[email protected][f[#], {#,io}]&[x], {x,1,n}, 
       PlotRange->Full, PlotStyle->Thick, ImageSize->150], {f, fns}] 
     ], {io, 1, ioMax} 
    ] 
] // TableForm 

उत्पादन से पता चलता है कि ब्रेक तर्क के पूर्णांक मानों पर होते हैं और लंबाई $ n $ और डेटा $ d $ के इंटरपोलेटर के डेटा के लिए $ $ $ अलग सेगमेंट होते हैं। यह जानकारी आपको सबसे अधिक तरीके से प्राप्त करनी चाहिए।

संबंधित मुद्दे