Çok değişkenli polinomları üretme ve işleme ile ilgilenen bir kod yazmam gerekiyor. Görevimi basitleştirilmiş bir örnekle özetleyeceğim.Çok değişkenli polinomları manipüle etmek için kütüphaneler
Üç ifade verdiğimi söyleyelim: 2x^2, 3y + 1 ve 1z. Daha sonra bana 6x^2yz + 2x^2z verecek olanları çoğaltmaya ihtiyacım var. Sonra bu ifadenin kısmi türevlerini x, y ve z'ye göre bulmak istiyorum. Bu bana 12xyz + 4xz, 6x^2z ve 6x^2y + 2x^2 verir.
Sorunum, binlerce değişken içeren ifadelerde bunun gibi basit işlemler yapmayı ele alıyor ve sistematik olarak bunu yapmanın kolay bir yoluna ihtiyacım var. Python'u kullanmak istiyorum çünkü numpy/scipy/matplotlib kullanılarak tamamlanmış çok sayıda proje ile ilgili işlevsellik var, ancak başka bir dilde güçlü bir araç kutusu varsa bunu kullanmaya da açıkım. Üniversite araştırması yapıyorum, bu yüzden Matlab'ı kullanmaya da açıkım.
Kolayca ve ideal olarak çok boyutlu polinomlar üzerinde çalışabilecek scipy polynomial routines benzeri bir şeyi beğenmek isteyebilecek iyi bir python kitaplığı bulamadım. Bu problem için uygun görünen ve zaten var olan python koduna entegre edilmesi kolay olan iyi bir kütüphane bilen var mı?
Teşekkürler!
Takip etmek: Birkaç günlüğünü, kullanımı kolay olduğu ortaya çıkarılan semiyeyle çalışarak geçirdim. Ancak, üzerinde çalışmakta olduğum problemin büyüklüğü çok yavaştı, bu yüzden şimdi matlab'ı keşfetmeye gideceğim. Küçük bir numune boyutu kullanarak hızın son derece kaba bir tahminini vermek için, 250 değişken içeren bir sipariş 2 polinomunun kısmi türevlerinin her birinin hesaplanması yaklaşık 5 saniye sürdü.
Takip # 2: Muhtemelen hala bu sorun üzerinde çalışıyordu bu geri yapmalıydım, ama ben de herkes matlab sembolik kütüphane hızı sympy için son derece kıyaslanabilir olduğunu bildirmek olabilir. Başka bir deyişle, büyük hesaplamalar için vahşice yavaştı. Her iki kütüphanede çalışmak inanılmaz derecede kolaydı, bu yüzden küçük hesaplamalar için tavsiye ederim.
Sorunumu çözmek için degradeleri el ile hesapladım, basitleştirdim ve daha sonra kodda bulduğum kalıpları kodun bazı değerlerinde kullandım. Daha fazla iş oldu, ama kodumu üstel olarak daha hızlı ve nihayet kullanılabilir hale getirdi.
Örneğinizin temsilcisi nedir? Eğer başlangıç polineriniz sadece bir varyantın fonksiyonlarıysa, problem daha kolay gözüküyor. –
+1: Gerçekten güzel bir soru. Ben sembolik hesaplama (etiketli kütüphanelerden farklı olarak) yapan SymPy'yi önermek için * gidiyordum, ama sadece sayısal farklılaşma gibi görünüyor! http://docs.sympy.org/modules/mpmath/calculus/differentiation.html –
@Nikhil: semp ayrıca sembolik farklılaşmayı da yapar. Aşağıdaki örneğime bakın. –