2015-11-21 10 views
5

मैं वर्तमान में fpy-function को numpy से समझने की कोशिश कर रहा हूं। इसके लिए मैंने निम्नलिखित धारणा का परीक्षण किया:
मेरे पास दो कार्य हैं, f(x) = x^2 और g(x) = f'(x) = 2*x। चौकोर परिवर्तन कानूनों और wolfram अल्फा के अनुसार यह G(w) = 2pi*i*F(w) होना चाहिए (prefactors भिन्न हो सकते हैं, लेकिन केवल एक स्थिर कारक होना चाहिए)। जब लागू करने अजगर में, मैं लिखने किnumpy.fft.fft कैसे काम करता है?

import numpy as np 
def x2(x): 
    return x*x 
def nx(x): 
    return 2*x 

a = np.linspace(-3, 3, 16) 
a1 = x2(a) 
a2 = nx(a) 

b1 = np.fft.fft(a1) 
b2 = np.fft.fft(a2) 

c = b1/b2 

अब मैं c के लिए एक लगभग स्थिर मूल्य की उम्मीद कर रहा हूँ, लेकिन मैं

array([ 1.02081592e+16+0.j  , 1.32769987e-16-1.0054679j , 
     4.90653893e-17-0.48284271j, -1.28214041e-16-0.29932115j, 
     -1.21430643e-16-0.2j  , 5.63664751e-16-0.13363573j, 
     -5.92271642e-17-0.08284271j, -4.21346622e-16-0.03978247j, 
     -5.55111512e-16-0.j  , -5.04781597e-16+0.03978247j, 
     -6.29288619e-17+0.08284271j, 8.39500693e-16+0.13363573j, 
     -1.21430643e-16+0.2j  , -0.00000000e+00+0.29932115j, 
     -0.00000000e+00+0.48284271j, 1.32769987e-16+1.0054679j ]) 

मिल कहाँ मेरी गलती है, और मैं fft उपयोग करने के लिए क्या कर सकते हैं जैसा सोचा वैसा?

+2

यहाँ गलत हिस्सा 'है जी (डब्ल्यू) = 2:


यहाँ कुछ कोड है कि FFT के माध्यम से संबंध में आपकी रुचि है की पुष्टि करता है, एक उचित रूप से नमूना बैंड-सीमित समारोह का उपयोग कर पीआई आई एफ (डब्ल्यू) '। 'जी (डब्ल्यू) = 2 पीआई मैं डब्ल्यू एफ (डब्ल्यू) होना चाहिए। –

+0

@DietrichEpp: उन सरणी में डब्ल्यू क्या है, और यह भी काल्पनिक है? –

+0

@arc_lupus 'w' आवृत्ति-स्थान' x' के बराबर है। इस मामले में, आपके पास मूल स्थान में 'x^2' है, जिसमें कोई आवृत्ति नहीं है, प्रति से कम (कम से कम समझ में नहीं आता है), इसलिए आपको' x 'का प्रतिनिधित्व करने के लिए विभिन्न चोटियों की भीड़ मिल जाएगी^2'। उदाहरण के लिए, यदि 'f (x) = sin (x)', तो आपके पास 'पाप (x)' में सरल आवृत्ति को कैप्चर करने के लिए 1 पर एक अच्छा, सरल डेल्टा func होगा। –

उत्तर

5

आपके द्वारा प्रदान की जाने वाली संपत्ति Continuous Fourier transform (CFT) पर लागू होती है। एफएफटी द्वारा गणना की गई है Discrete Fourier transform (डीएफटी), जो सीएफटी से संबंधित है लेकिन बिल्कुल बराबर नहीं है।

यह सच है कि डीएफटी कुछ स्थितियों के तहत सीएफटी के आनुपातिक है: अर्थात् नमूना सीमाओं के बाहर शून्य के फ़ंक्शन के पर्याप्त नमूनाकरण के साथ (उदाहरण के लिए this book का परिशिष्ट ई देखें)।

कोई भी शर्त ऊपर दिए गए कार्यों के लिए नहीं है, इसलिए डीएफटी सीएफटी के समान नहीं है और आपके संख्यात्मक परिणाम इसे दर्शाते हैं।

import numpy as np 

def f(x): 
    return np.exp(-x ** 2) 
def fprime(x): 
    return -2 * x * f(x) 

a = np.linspace(-10, 10, 100) 
a1 = f(a) 
a2 = fprime(a) 

b1 = np.fft.fft(a1) 
b2 = np.fft.fft(a2) 
omega = 2 * np.pi * np.fft.fftfreq(len(a), a[1] - a[0]) 

np.allclose(b1 * 1j * omega, b2) 
# True 
संबंधित मुद्दे