Chebyshev yaklaşıklama hesaplayıcısı
(stuffmatic.com)- Chebyshev approximation calculator, matematiksel fonksiyon yaklaşıklama kodunu web üzerinde üreten bir araçtır
- Kullanıcı
f(x),x min,x max,Termsile yaklaştırılacak fonksiyonu, aralığı ve terim sayısını belirleyebilir Match x min x maxseçeneği ve Coefficients alanı üzerinden aralık sınırlarını ve katsayı değerlerini görme ya da ayarlama akışı sunar- Generated code alanında hesaplama sonucu kod biçiminde gösterilir; örnek ekranda
c0ilec10arasındaki katsayılar görünür - GitHub deposu bağlıdır, bu sayede web aracının uygulama kodu doğrudan incelenebilir
Chebyshev yaklaşıklama kodu üreticisi
- Chebyshev approximation calculator, matematiksel fonksiyonları verimli biçimde yaklaştırmak için kod üretir
- Yaklaşıklama koşulları web arayüzünde girilir
f(x): Yaklaştırılacak fonksiyonx min: Aralığın en küçük değerix max: Aralığın en büyük değeriTerms: Kullanılacak terim sayısıMatch x min x max: Aralık sınırlarıyla ilgili seçenek
Katsayıları inceleme ve üretilen kod
- Ekran Coefficients alanı ile Generated code alanına ayrılmıştır
- Örnek olarak gösterilen katsayılar
c0ilec10arasında incelenebilirc0 = 0.16793649417016518c1 = -0.12411164956092625c2 = -0.09756341588422193c3 = 0.1800765790518846c4 = -0.06972963647223016c5 = -0.09250127939333941c6 = 0.18076946080324185c7 = 0.15990613621816677c8 = -0.028659588693985123c9 = -0.09494966104347571c10 = -0.04980429834982578
- Ekranda ayrıca
c11ilec39arasındaki katsayı öğeleri de gösterilir
Kod deposu
- İlgili GitHub deposu: stuffmatic/chebyshev-calculator
1 yorum
Hacker News yorumları
Harika. 1974 civarında IBM 360 assembly ile karekök hesaplayan bir fonksiyon yazıp karşılığında para almıştım
Lisansın son yılındaydım ve mümkün olduğunca verimli yapmam istenmişti. Girdiyi 0 ile 1 arasına ölçekledikten sonra ilk tahmin için Chebyshev yaklaşımı kullandım, ardından çözümü bulmak için Newton yönteminin açılmış 2 mi 3 mü yinelemesini uyguladım. Kod yazarak kazandığım ilk paraydı
Gerçekten iyi yapılmış. Bu tür yaklaşımların ne kadar verimli olduğuna hayran kaldım; 8 bit bilgisayarlarda trigonometrik fonksiyonların veya başka matematik fonksiyonlarının neden o şekilde uygulandığını da çok daha iyi anladım
BBC Research Department'ın 1969'da bu yaklaşımın neden harika olduğunu ele alan güzel bir özgün belgesi de var: https://downloads.bbc.co.uk/rd/pubs/reports/1969-10.pdf
Yalnızca Taylor yaklaşımı gördüyseniz başta biraz sihir gibi görünebilir
Daha önce Sollya ile iyi sonuçlar almıştım: https://www.sollya.org/
Ancak sonuçlar iyi olsa da yazılımın kendisini kullanmak biraz zahmetli
Math.sin(x)/x, yani sinc fonksiyonunu[-3,3]aralığında 7 terimle yaklaştırıncac0...c6katsayılarının hepsiNaNoluyor. Bu bir bug mı?Geçici çözüm olarak
x0'a yakınsa doğrudan1.0'a zorluyorumif(Math.abs(x) > 1e-8 ){ Math.sin(x)/x } else { 1.0 }x_j = (xmin) + (xmax - xmin)/2(1 + cos(pi[0..j-1]/(j-1))gibi ızgara noktalarında değerlendiriyordur; bunlardan biri tam olarak 0 olursaMath.sin(0)/0hesaplanır veNaNçıkarBaşka bir geçici çözüm de
[-3,+3.0000001]gibi hafif asimetrik bir aralık kullanmakx=0noktasında iyi tanımlı olmaması ve yaklaşım kodunun orada düşmesi gibi görünüyor. Kod biraz üzücüChebyshev polinomları yaklaşımda o kadar güçlü ve çok yönlü ki insanlar fazla iyi olduğu için dolandırıcılık gibi sanıp kullanmıyor
İlk denenecek yöntem Chebyshev olmalı. Sinir ağları son çare olarak kullanılmalı
Harika. Yakın zamanda böyle bir şey yapmak istemiştim; yaklaşımı hesaplayan kod bulmanın şaşırtıcı derecede zor olduğunu gördüm
Bir dahaki sefere bir fonksiyonu hızlıca yaklaştırmam gerektiğinde kullanmak için yer imlerine ekledim
Chebyshev kara büyü gibi. Lisansüstü bir derste türetimini görmüş olmama rağmen hâlâ öyle geliyor
Nick Trefethen ve diğerlerinin Chebfun'ından da mutlaka bahsetmek gerek. Bu konuyu akla gelebilecek neredeyse her yöne genişleten bir araç
Chebfuns, gerçek matematiksel sayılar için kayan noktalı sayıların karşılığı gibi, fonksiyonlar için bir karşılık olarak görülebilir. Gerçekten etkileyici bir yazılımhttps://www.chebfun.org
Bu sayede diferansiyel-cebirsel denklem çözümlerini makine hassasiyetinde bulmak veya tek değişkenli bir fonksiyonun global minimumunu/maksimumunu bulmak gibi çeşitli yöntemler mümkün oluyor
Bildiğim kadarıyla şu anda başka algoritmalar kullanıyorlar, ancak Chebfun'ın eskiden kullandığı temel metodoloji Trefethen'in
Spectral Methods in Matlabkitabının 6. bölümünde görülebilir. Ultraküresel fonksiyonları kullanan daha yeni metodoloji Olver ve Townsend'ın SIAM Review makalesiA Fast and Well-Conditioned Spectral Methodiçinde yer alıyorMerak ettiğim bir şey var, burada sormam uygun mu bilmiyorum. Eskiden Nintendo 64'ün sinüs fonksiyonunu hesaplayacak gücü olmadığı için 0'dan 2π'ye kadar bir arama tablosu kullandığını ve tablo boyutunu küçültmek için akıllıca teknikler de kullandığını anlatan bir video izlemiştim
Bir sinir ağını eğitip ağırlıkları saklamak ya da bir fonksiyon oluşturup katsayıları saklayarak sinüs·kosinüs hesaplamak da mümkün olur muydu?
Biraz CPU döngüsü kalıyorsa, seyrek bir arama tablosu değerlerini ilk tahmin olarak alıp sayısal yaklaşım tekniklerini birkaç kez yineleyen hibrit yaklaşım kullanılabilir. Ya da asıl yazıdaki gibi polinom yaklaşımının baştaki birkaç katsayısını saklamak yeterli olur
Sinir ağları, bir fonksiyonun örneklerine sahip olup nasıl yaklaştıracağınızı bilmediğinizde faydalı olabilir; ama burada durum bu değil
Sinir ağları, matematiksel olarak analiz etmesi kolay olmayan şeyleri değerlendirmek gerektiğinde harika bir çözüm; ancak trigonometrik fonksiyonları hesaplamak ve yaklaştırmak için zaten bilinen birçok teknik var
Sinüsü hesaplamak için sinir ağı eğitmek, bir string'i ters çevirmek için LLM kullanmanın matematik versiyonu gibi. Yapılabilir, ama ancak problemin daha doğrudan bir yaklaşımla özünde çözülebileceğini bilmediğinizde akla gelecek bir fikir
AI/ML tekniklerini kullanmadan önce matematikçilerin zaten bir çözümü olup olmadığına bakmak her zaman değerli. Günümüzde, geliştiricinin bilmediği ama zaten bilinen, verimli ve hatta optimal çözümleri olan problemlere AI/ML uygulamak için çok çaba harcanıyor olması muhtemel
Sinir ağlarının asıl gücü, giriş sayısı birkaç tane değil çok fazla olduğunda ortaya çıkar.
sin(x)kadar basit bir durumda, burada paylaşılan araç gibi başka yöntemler varÇok hoş. Merak edip iyi yaklaştırılamayan bir fonksiyonu ne kadar hızlı oluşturabileceğimi görmek istedim
Şimdiye kadarki en iyisi
Math.cos(x * Math.exp(Math.cos(x * x)))oldu. Çok fazla bileşim içerdiği için hızlı salınımlar ve dik eğimler oluşuyor; bu da Chebyshev ile kolay yaklaştırmayı zorlaştırıyor