Genellikle, değişken sayısının kısıtlama sayısını (veya bazen başka bir şekilde) aştığı doğrusal olmayan problemleri çözmem gerekiyor. Genellikle bazı kısıtlamalar veya değişkenler karmaşık bir şekilde gereksizdir. Bu tür sorunları çözmenin bir yolu var mı?Kısıtlı sistem için SciPy optimizasyonu
Scipy çözücülerinin çoğu, kısıtlamaların sayısının değişken sayısına eşit olduğunu ve Jacobian'ın nonsingular olduğunu varsayar. leastsq
bazen çalışır, ancak kısıtlamaların değişken sayısından daha az olduğu zaman bile denemez.numaralı telefondan fmin
'u çalıştırabileceğimin farkındayım, ancak bu, Jacobian'ı kullanan herhangi bir yöntemden çok daha az verimlidir.
İşte ben neden bahsettiğimi gösteren bir soruna bir örnektir. Açıkçası bir çözümü var, ancak leastsq
bir hata veriyor. Tabii ki, bu örnek el ile çözmek kolaydır, sadece sorunu göstermek için buraya koymuştum.
import numpy as np
import scipy.optimize
mat = np.random.randn(5, 7)
def F(x):
y = np.dot(mat, x)
return np.array([ y[0]**2 + y[1]**3 + 12, y[2] + 17 ])
x0 = np.random.randn(7)
scipy.optimize.leastsq(F, x0)
alıyorum hata iletisi:
Traceback (most recent call last):
File "question.py", line 13, in <module>
scipy.optimize.leastsq(F, x0)
File "/home/dstahlke/apps/scipy/lib64/python2.7/site-packages/scipy/optimize/minpack.py", line 278, in leastsq
raise TypeError('Improper input: N=%s must not exceed M=%s' % (n,m))
TypeError: Improper input: N=7 must not exceed M=2
Bir cevap net dolaştılar ve hatta scipy posta listesinde istediler ve hiçbir yanıt aldı. Şimdilik, newton_krylov
çözücüsünün pinv()
kullanması için SciPy kaynağını hackledim, ancak bunun ideal bir çözüm olduğunu düşünmüyorum. yaklaşık değişkenlerin sayısı F() dönüş dizisi yeniden boyutlandırmak nasıl
bu gerçekten bir scipy soru mi yoksa aslında sahte sakal takan bir matematiksel biridir? – talonmies
Ben bunun bir scipy soru olduğuna inanıyorum. Yazdığım özel çözücüleri kullanarak bu tür problemleri çözebilirim fakat mevcut scipy çözücülerini kullanabilmeyi tercih ederim. Ek olarak, matlab'ın fsolve bunları çözebiliyor gibi görünüyor. Bu yaygın bir durum gibi görünüyor ve scipy'nin (görünüşte) işleyemeyeceğine inanmak zor. –
'fsolve', bir güven bölgesi yöntemi IIRC kullanır. Yani gerçekten 'fsolve' için benzer bir scipy işlevi olup olmadığını bilmek istiyor musunuz? – talonmies