SymPy

2013-03-18 17 views
8

'daki bir noktada bir işlevin değerlendirilmesi Bir gözden geçirme yöntemi olarak çeşitli optimizasyon yöntemlerini kodlamaya çalışıyorum. SymPy'yi, bir noktadaki koordinatların bir dizide saklandığı belirli bir noktadaki değişken sayıda değişkenle değerlendirmek için kullanabilmeyi istiyorum. Örneğin, f(x,y) = 3*x**2 - 2*x*y + y**2 + 4*x + 3*y noktasını b = [1,2] noktasında değerlendirmek istiyorum. Ama bunu yapmak için genel bir yöntemden çok hoşlanıyorum, bu herhangi bir değişken ile bir fonksiyonu işleyebilecek ve uygun bir uzunluk dizisi olarak değerlendirilecek nokta olarak, yani sympy.evalf(f, subs = {foo}) gerçekten çok kullanışlı değil.SymPy

+0

sadece (haritayı kullanabilirsiniz Could): zip kullanılarak anında bir dict oluşturabilirim? http://docs.python.org/2/library/functions.html#map – Samizdis

+0

http://Whathaveyoutried.com –

+0

SO'ya hoş geldiniz! Kodu gönderme ve denediğiniz şeyin bazı özellikleri burada tavsiye edilir, lütfen SSS bölümünü okuyun ve umarım daha iyi cevaplar alabilirsiniz! – span

cevap

4

SymPy ifade ağaçları ile çalışıyorsunuz, işlev değil. Herhangi ifade sitesinde yapabilirsiniz:

>>> vars = sorted(expression.free_symbols) 
>>> evaluated = expression.subs(*zip(vars, your_values)) 
+0

Çok teşekkürler - bu komutlar ile ilgili belgeleri nerede bulabilirim? Anlamadan sadece sözlü metni kopyalamak yerine ne yaptıklarını anlamayı tercih ederim! Bir bütün olarak –

+1

http://docs.sympy.org. Belgeler daha iyi olabilirdi. – Krastanov

1

Ben de bunu yapmak daha kolay olmasını beklediğiniz, ama burada iyi bir çözüm var:

Eğer sembol isimlerini biliyorsanız ('x', 'y', örneğin), sizi

fvars = sympy.symbols('x, y') #these probably already exist, use: fvars = [x,y] 

b = [1,2] 
sympy.evalf(f, subs = dict(zip(fvars,b))) 
+2

'map (sympy.Symbol, ['x', 'y'])' sembolleri olarak yazılabilir ('x, y') ' – Krastanov

+0

Teşekkürler, @Krastanov, düzeltildi. – askewchan

+0

hata '' modül 'nesnesi callable' değil – Abolfazl

İlgili konular