2 पॉइंट द्वारा GN⁺ 2024-10-06 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Chebyshev approximation calculator एक ऐसा टूल है जो वेब पर गणितीय फ़ंक्शन approximation code जनरेट करता है
  • उपयोगकर्ता f(x), x min, x max, Terms के जरिए जिस फ़ंक्शन का approximation करना है, उसकी range और terms की संख्या तय कर सकते हैं
  • Match x min x max विकल्प और Coefficients सेक्शन के माध्यम से range boundaries और coefficient values को देखना या समायोजित करना संभव है
  • Generated code सेक्शन में गणना का परिणाम code के रूप में दिखाया जाता है, और उदाहरण स्क्रीन में c0 से c10 तक के coefficients दिखाई देते हैं
  • GitHub repository जुड़ी हुई है, इसलिए वेब टूल के implementation code को सीधे देखा जा सकता है

Chebyshev approximation code जनरेटर

  • Chebyshev approximation calculator गणितीय फ़ंक्शनों का कुशल approximation करने के लिए code जनरेट करता है
  • वेब UI में approximation conditions दर्ज की जाती हैं
    • f(x): जिस फ़ंक्शन का approximation करना है
    • x min: range का न्यूनतम मान
    • x max: range का अधिकतम मान
    • Terms: इस्तेमाल किए जाने वाले terms की संख्या
    • Match x min x max: range boundaries से जुड़ा विकल्प

coefficient जाँच और जनरेट किया गया code

  • स्क्रीन Coefficients सेक्शन और Generated code सेक्शन में बंटी हुई है
  • उदाहरण के रूप में दिखाए गए coefficients c0 से c10 तक देखे जा सकते हैं
    • c0 = 0.16793649417016518
    • c1 = -0.12411164956092625
    • c2 = -0.09756341588422193
    • c3 = 0.1800765790518846
    • c4 = -0.06972963647223016
    • c5 = -0.09250127939333941
    • c6 = 0.18076946080324185
    • c7 = 0.15990613621816677
    • c8 = -0.028659588693985123
    • c9 = -0.09494966104347571
    • c10 = -0.04980429834982578
  • स्क्रीन पर c11 से c39 तक के coefficient items भी दिखाए गए हैं

code repository

1 टिप्पणियां

 
GN⁺ 2024-10-06
Hacker News की राय
  • शानदार। करीब 1974 में मैंने IBM 360 assembly में square root निकालने वाला function लिखा था और उसके पैसे मिले थे
    मैं undergraduate के अंतिम साल में था, और मुझसे इसे जितना हो सके उतना efficient बनाने को कहा गया था। input को 0 और 1 के बीच scale किया, फिर initial estimate के लिए Chebyshev approximation इस्तेमाल किया, और solution पाने के लिए Newton method के unrolled iteration 2 या 3 बार लगाए। code लिखकर मिली मेरी पहली कमाई थी

    • ऐसी बातें अच्छी लगती हैं। numerical analysis की पहली class में computation की potential पहली बार सच में महसूस हुई थी और आंखें खुल गई थीं—वह याद अब भी है
  • वाकई बहुत अच्छा बनाया है। इस तरह की approximation कितनी efficient होती है, यह देखकर मैं मोहित हुआ, और यह भी काफी समझ आया कि 8-bit computers पर trigonometric functions या दूसरे math functions की implementations वैसी क्यों होती थीं
    1969 में BBC Research Department का एक बेहतरीन original document भी है, जो बताता है कि यह तरीका क्यों शानदार है: https://downloads.bbc.co.uk/rd/pubs/reports/1969-10.pdf
    अगर आपने केवल Taylor approximation ही देखी है, तो शुरुआत में यह थोड़ा जादू जैसा लग सकता है

    • हां। mathematical side भी वैसी ही है, और यह बात भी काफी जादुई लगती है कि practically यह कुछ lines of code में सिमट जाती है
  • पहले Sollya से अच्छे results मिले थे: https://www.sollya.org/
    हालांकि results अच्छे थे, लेकिन software खुद इस्तेमाल करने में थोड़ा cumbersome है

    • Sollya शायद इस तरह के काम के लिए modern tools में सबसे अच्छा है। internally यह Remez approximation करता है और फिर LLL से floating-point में quantize करता है; सीधे Chebyshev का इस्तेमाल नहीं करता
  • Math.sin(x)/x, यानी sinc function को [-3,3] interval में 7 terms से approximate करने पर coefficients c0...c6 सभी NaN हो जाते हैं। क्या यह bug है?
    temporary workaround के तौर पर मैंने x के 0 के करीब होने पर बस 1.0 force कर दिया
    if(Math.abs(x) > 1e-8 ){ Math.sin(x)/x } else { 1.0 }

    • इसे ठीक-ठीक bug कहना मुश्किल है। code शायद Chebyshev coefficients निकालने के लिए x_j = (xmin) + (xmax - xmin)/2(1 + cos(pi[0..j-1]/(j-1)) जैसे grid points पर function evaluate करता होगा, और अगर उनमें से कोई exactly 0 हो, तो Math.sin(0)/0 calculate होगा और NaN आएगा
      दूसरा workaround यह है कि [-3,+3.0000001] जैसी थोड़ी asymmetric range इस्तेमाल करें
    • यहां समस्या यह है कि पहली expression x=0 पर well-defined नहीं है, और approximation code लगता है वहीं गिर गया। code थोड़ा disappointing है
    • हां, यह bug है। अगर function सभी Chebyshev nodes पर defined नहीं है, तो app को error दिखाना चाहिए। जैसा आपने पाया, अभी इसे आसानी से workaround किया जा सकता है
  • Chebyshev polynomials approximation में इतने powerful और versatile हैं कि लोग सोचते हैं यह इतना अच्छा है कि scam जैसा लगता है, और उल्टा इस्तेमाल ही नहीं करते
    पहला तरीका जो आजमाना चाहिए, वह Chebyshev होना चाहिए। neural networks को last resort के तौर पर इस्तेमाल करना चाहिए

  • शानदार। हाल में मैं ऐसा ही कुछ करना चाहता था, लेकिन approximation calculate करने वाला code ढूंढना हैरानी की हद तक मुश्किल था
    अगली बार किसी function को जल्दी approximate करना पड़े, इसलिए bookmark कर लिया

    • actually काम करने वाला Chebyshev approximation code ढूंढना मुझे भी हैरानी की हद तक मुश्किल लगा। उम्मीद है यह project इसे बदल देगा
  • Chebyshev black magic जैसा लगता है। graduate class में derivation process देखने के बाद भी ऐसा ही लगता है

  • Nick Trefethen आदि का Chebfun भी जरूर mention होना चाहिए। यह इस idea को लगभग हर conceivable direction में extend करने वाला tool है
    Chebfuns को functions के लिए वैसा counterpart माना जा सकता है, जैसे actual mathematical numbers के लिए floating-point numbers होते हैं। सचमुच impressive software है
    https://www.chebfun.org

    • सहमत। उनके methods बहुत powerful और fast हैं। Chebyshev और ultraspherical functions आधारित techniques का इस्तेमाल करके अधिकतर functions को बहुत तेजी से machine precision तक approximate किया जा सकता है, और फिर उस representation को ज्यादा आसानी से manipulate किया जा सकता है
      इसकी वजह से differential-algebraic equations के solutions को machine precision पर ढूंढना या 1D functions के global minimum/maximum ढूंढना जैसे कई तरीके संभव हो जाते हैं
      अभी वे दूसरे algorithms इस्तेमाल करते हैं, ऐसा मेरी जानकारी है, लेकिन Chebfun की पहले की default methodology Trefethen की किताब Spectral Methods in Matlab के chapter 6 में देखी जा सकती है। ultraspherical functions का इस्तेमाल करने वाली latest methodology Olver और Townsend के SIAM Review paper A Fast and Well-Conditioned Spectral Method में दी गई है
  • एक बात जाननी है, पता नहीं यहां पूछना ठीक है या नहीं। मैंने पहले एक video देखा था कि Nintendo 64 के पास sine function calculate करने की क्षमता नहीं थी, इसलिए उसने 0 से 2π तक की lookup table इस्तेमाल की, और table size कम करने के लिए clever techniques भी इस्तेमाल कीं
    क्या neural network train करके weights store करना, या function बनाकर coefficients store करना और उनसे sine/cosine calculate करना भी संभव था?

    • neural networks अक्सर internally trigonometric functions इस्तेमाल करते हैं, इसलिए जरूरत से कहीं ज्यादा computation लग जाएगा
      अगर कुछ CPU cycles बचते हों, तो coarse lookup table values को initial estimate बनाकर numerical approximation techniques के कुछ iterations चलाने वाली hybrid approximation इस्तेमाल की जा सकती है। या original post की तरह polynomial approximation के शुरुआती कुछ coefficients ही store कर लें
    • अगर familiar नहीं हैं, तो CORDIC देखना अच्छा रहेगा। पहले यह common trigonometric trick थी, और आज भी embedded side में कुछ हद तक इस्तेमाल होती है
      neural network तब useful हो सकता है जब आपके पास किसी function के samples हों लेकिन उसे approximate करना न पता हो; यहां ऐसा case नहीं है
    • किसी भी function को calculate करने के लिए neural network train करना बेशक संभव है, लेकिन sine जैसे well-known function के लिए इसका बिल्कुल मतलब नहीं बनता
      neural networks उन चीजों को evaluate करने के लिए बढ़िया solution हैं जिन्हें mathematically analyze करना आसान नहीं है, लेकिन trigonometric functions calculate और approximate करने की known techniques पहले से बहुत हैं
      sine calculate करने के लिए neural network train करना strings reverse करने के लिए LLM इस्तेमाल करने का mathematical version जैसा है। कर सकते हैं, लेकिन यह idea तभी सूझेगा जब आपको पता न हो कि problem ज्यादा direct approach से essentially solve हो जाती है
      AI/ML techniques इस्तेमाल करने से पहले यह देखना हमेशा worth it है कि mathematicians के पास पहले से solution है या नहीं। आजकल शायद काफी effort उन problems पर AI/ML लगाने में जा रहा है जिनके known, efficient और कभी-कभी optimal solutions पहले से हैं—बस developer को पता नहीं होता
    • neural network मूल रूप से curve fitting है, इसलिए संभव तो है। यह video मदद कर सकता है: https://www.youtube.com/watch?v=FBpPjjhJGhk But what is a neural network REALLY?
      neural networks की मुख्य ताकत तब दिखती है जब inputs कुछ नहीं बल्कि बहुत सारे हों। sin(x) जैसे simple case में यहां पोस्ट किए गए tool जैसे दूसरे methods मौजूद हैं
    • आम तौर पर इस्तेमाल होने वाली saving technique यह है कि table में केवल 0 से π/2 तक store करें, और 2 extra index bits से बाकी तीन quadrants generate करें
  • बहुत बढ़िया। शरारत सूझी और देखना चाहा कि कितनी जल्दी कोई ऐसा function बना सकता हूं जो अच्छी तरह approximate न हो
    अभी तक Math.cos(x * Math.exp(Math.cos(x * x))) सबसे अच्छा रहा। इसमें काफी composition है, जिससे fast oscillation और steep gradients बनते हैं, और Chebyshev से आसानी से approximate करना मुश्किल हो जाता है