C#

C# ile dinamik Gauss-Legendre sayısal integrasyonu: düğüm ve ağırlıkları taşma olmadan anında hesaplamak

Legendre polinomlarının köklerini ve ağırlıklarını hazır tablolardan okumak yerine runtime'da hesaplayan bir C# Gauss-Legendre kareleme uygulaması. Bonnet özyinelemesi polinom değerlendirmesini 15. derecenin üzerinde de kararlı tutuyor, Newton yöntemi her kökü birkaç iterasyonda yaklaşık 1e-10 hassasiyetle buluyor.

Habr C# (ru) Melamed69
Yayın tarihi
Okuma süresi
6 dk okuma
agent çalıştırması #18
agent çalıştırması #18
Orijinale git habr.com

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • Polinom değerleri Bonnet'in üç terimli özyinelemesiyle hesaplanıyor; katsayı tablosu kurulmadığı için 15. derecenin üzerinde taşma olmuyor.
  • Kökler cos(π(4(n−i)−1)/(4n+2)) başlangıcından Newton yöntemiyle yaklaşık 1e-12 hassasiyete kadar iyileştiriliyor.
  • Her ağırlık 2/((1−x²)·P′ₙ(x)²) ile bulunuyor; son Newton adımındaki türev yeniden kullanıldığı için ek geçiş gerekmiyor.
  • Kareleme düğümleri [−1, 1] aralığından çağıranın aralığına taşıyor ve varsayılan olarak 32 nokta kullanıyor; derece runtime'da serbestçe seçilebiliyor.
  • Döngü sabit iterasyon sayısı yerine ardışık değerler arasındaki farka bakıyor, böylece kök arama kısa sürüyor.
  • Yazarın karşılaştırması: 16 Gauss-Legendre noktası 12 ondalık basamağı verirken Simpson yöntemi 5 basamak için 1000 noktaya ihtiyaç duyuyor.

Gauss-Legendre karelemesi, Simpson gibi sabit adımlı yöntemlere göre çok daha az fonksiyon değerlendirmesiyle yüksek doğruluk verir; ancak Legendre polinomlarının köklerine ve bu köklere karşılık gelen ağırlıklara ihtiyaç duyar. Polinom katsayılarını açık formülden hesaplamak 15. dereceden sonra taşmaya yol açtığı için yazar, polinomu Bonnet'in üç terimli özyinelemesiyle, türevini de kapalı bir formülle hesaplıyor; x = ±1 uçlarında paydanın sıfıra gitmesi ayrıca ele alınıyor.

Her kök, cos(π(4(n−i)−1)/(4n+2)) başlangıç değerinden Newton yöntemiyle bulunuyor ve birkaç iterasyonda yaklaşık 1e-10 hassasiyete ulaşıyor; ağırlık ise 2/((1−x²)·P′ₙ(x)²) formülüyle çıkıyor. Kareleme rutini düğümleri istenen aralığa taşıyor ve varsayılan olarak 32 nokta kullanıyor. Yazarın testinde 16 nokta 12 ondalık basamağı doğru verirken Simpson yöntemi 1000 noktada bile bunu yakalayamıyor.

Gerçek dünyada kullanımı

  • İş, akı veya alan gibi düzgün fonksiyonları döngü içinde çok basamağa kadar integre eden bir mühendislik/fizik aracı.
  • Hazır düğüm tabloları gömmek istemeyen, istenen derecede kareleme kuralına ihtiyaç duyan bir simülasyon kütüphanesi.
  • Uyarlamalı bir integrator'ı yüksek dereceli Gauss-Legendre referans değeriyle karşılaştıran unit test'ler.
  • Sürekli dağılımların beklenen değerini hesaplayan, polinom integrandlarda az değerlendirme isteyen bir istatistik aracı.

Neden önemli

Derecesini runtime'da seçebildiğiniz, hazır tablo gerektirmeyen yeniden kullanılabilir bir kareleme rutini elde ediyorsunuz; düzgün integrandlarda sabit adımlı yöntemlerin harcadığı değerlendirmelerin küçük bir kısmıyla makine hassasiyetine yakın sonuç alınıyor.

Bu özet, Habr C# (ru) üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü