hızla

2012-01-18 18 views
14

ben eghızla

myfun <- function(x,y) cos(x+y) 
llim <- -0.5 
ulim <- 0.5 

ile daha hızlı

integrate(function(y) { 
    sapply(y, function(y) { 
    integrate(function(x) myfun(x,y), llim, ulim)$value 
    }) 
}, llim, ulim) 

bir FORTRAN programına atıfta bir old paper bulundu olan bir çift integrali için bir çözüm arıyorum quad2d denir, ancak başka bir şey bulamadım ama geri kalanı için matlab için bazı yardım sayfaları. Bu yüzden çift katlı integralleri hızlı bir şekilde gerçekleştirebilen bir C ya da FORTRAN kütüphanesi arıyorum (yani, sap döngüsü olmadan) ve bu da R'den çağrılabilir. Tüm fikirler, GPL uyumlu oldukları sürece çok takdir edilir. Çözüm, zaten R ile birlikte gönderilen kütüphanelerden diğer işlevleri çağırmayı gerektiriyorsa, onlardan da haber almak isterim.

+4

Aşağıdakileri düşündünüz mü: 'pracma :: dblquad',' pracma: simpson2d' ya da küp ve R2Cuba paketlerindeki fonksiyonlar? Örnek için –

cevap

7

Joshua'nın işaret ettiği pracma paketinin bir sürümü quad2d sürümünü içerir.

quad2d(myfun, llim, ulim, llim, ulim) 

Bu, örnek işlevi kullanarak, döngüsel tolerans dahilinde aynı yanıtı verir.

Varsayılan olarak, örnek işlevinizle quad2d, döngüden daha yavaştır. n'u düşürürseniz, daha hızlı yapabilirsiniz, ancak sanırım, işlevinizin ne kadar düzgün olduğuna ve hız için ne kadar doğrulukta fedakarlık yapmaya istekli olduğunuza bağlı.

+0

Thx. Bunu biraz daha karmaşık oldukları için, gerçek işlevler üzerinde test edeceğim. En çok doğruluğa ihtiyacım var, ama hız gerçekten bir sorun. Seni bilgilendirmeye devam edeceğiz. –

14

cubature paketi, uyarlamalı bir algoritma kullanarak 2D (ve N-D) entegrasyonunu gerçekleştirir. Çoğu entegrasyon için daha basit yaklaşımlardan daha iyi performans göstermelidir.

+0

İşaretçi için teşekkürler, bu haftasonu testleri çalıştırıyorum ve hangisinin beni en çok mutlu ettiğini görüyorum. –

+2

Gelecekte atıfta bulunabilmek için, 'cubature' yaklaşımı şöyle olurdu: 'adapIntegrate (function (x) cos (x [1] + x [2]), c (llim, llim), c (ulim, ulim))'. – jbaums

İlgili konular