Bu zorluk, hesaplama açısından zor bir sonsuz toplam yapabilen hızlı kod yazmaktır.
Giriş
Bir n
göre n
matris P
daha küçük olan tam sayı girişleri ile 100
mutlak değer olarak. Test yaparken, kodunuzun istediği herhangi bir makul biçimde kodunuza giriş sağlamaktan mutluluk duyuyorum. Varsayılan değer, matrisin her satırı için bir satır olacak, boşluk ayrılmış ve standart girdilerde sağlanacaktır.
P
olacak kesin bir pozitif her zaman simetrik olacak ima. Bunun dışında, meydan okumayı cevaplamak için hangi pozitif tanımlamanın ne anlama geldiğini bilmek zorunda değilsiniz. Bununla birlikte, aşağıda tanımlanan toplamın bir cevabı olacağı anlamına gelir.
Bununla birlikte, bir matris-vektör ürününün ne olduğunu bilmeniz gerekir .
Çıktı
Kodunuz sonsuz toplamı hesaplamalıdır:
artı veya eksi doğru cevabın 0.0001 İşte Z
tamsayılar kümesi ve tamsayı elemanları Z^n
ile tüm olası vektörler n
ve yaklaşık 2.71828'e eşit e
olan ünlü matematiksel sabittir . Üstteki değerin yalnızca bir sayı olduğunu unutmayın. Açık bir örnek için aşağıya bakın.
Bunun Riemann Theta işlevi ile ilişkisi nedir?
Bu yazının Riemann Theta fonksiyonuna yaklaştığı yazısında, hesaplamaya çalışıyoruz . Bizim sorunumuz en az iki nedenden dolayı özel bir durumdur.
z
Bağlantılı kağıtta çağrılan ilk parametreyi 0 olarak ayarladık .- Matrisi
P
, bir özdeğerin asgari boyutunun olduğu şekilde yaratırız1
. (Matrisin nasıl oluşturulduğunu görmek için aşağıya bakın.)
Örnekler
P = [[ 5., 2., 0., 0.],
[ 2., 5., 2., -2.],
[ 0., 2., 5., 0.],
[ 0., -2., 0., 5.]]
Output: 1.07551411208
Daha ayrıntılı olarak, bu P'nin toplamında sadece bir terim görelim. Örneğin, toplamda sadece bir terim alın:
ve x^T P x = 30
. Bildirim e^(-30)
hakkında 10^(-14)
öylesine ve verilen tolerans doğru cevabını kalkarken için önemli olması pek mümkün değildir. Sonsuz toplamın aslında elemanların tamsayı olduğu 4 uzunluktaki her olası vektörü kullanacağını hatırlayın. Sadece açık bir örnek vermek için bir tane seçtim.
P = [[ 5., 2., 2., 2.],
[ 2., 5., 4., 4.],
[ 2., 4., 5., 4.],
[ 2., 4., 4., 5.]]
Output = 1.91841190706
P = [[ 6., -3., 3., -3., 3.],
[-3., 6., -5., 5., -5.],
[ 3., -5., 6., -5., 5.],
[-3., 5., -5., 6., -5.],
[ 3., -5., 5., -5., 6.]]
Output = 2.87091065342
P = [[6., -1., -3., 1., 3., -1., -3., 1., 3.],
[-1., 6., -1., -5., 1., 5., -1., -5., 1.],
[-3., -1., 6., 1., -5., -1., 5., 1., -5.],
[1., -5., 1., 6., -1., -5., 1., 5., -1.],
[3., 1., -5., -1., 6., 1., -5., -1., 5.],
[-1., 5., -1., -5., 1., 6., -1., -5., 1.],
[-3., -1., 5., 1., -5., -1., 6., 1., -5.],
[1., -5., 1., 5., -1., -5., 1., 6., -1.],
[3., 1., -5., -1., 5., 1., -5., -1., 6.]]
Output: 8.1443647932
P = [[ 7., 2., 0., 0., 6., 2., 0., 0., 6.],
[ 2., 7., 0., 0., 2., 6., 0., 0., 2.],
[ 0., 0., 7., -2., 0., 0., 6., -2., 0.],
[ 0., 0., -2., 7., 0., 0., -2., 6., 0.],
[ 6., 2., 0., 0., 7., 2., 0., 0., 6.],
[ 2., 6., 0., 0., 2., 7., 0., 0., 2.],
[ 0., 0., 6., -2., 0., 0., 7., -2., 0.],
[ 0., 0., -2., 6., 0., 0., -2., 7., 0.],
[ 6., 2., 0., 0., 6., 2., 0., 0., 7.]]
Output = 3.80639191181
Gol
Kodunuzu, rastgele seçilmiş matris P büyüklüğünde test edeceğim.
Puanınız, n
rastgele seçilen P
bu boyuttaki matrislerle 5 üzerinden ortalama alındığında 30 saniyeden kısa sürede doğru bir cevap aldığım en büyük puandır .
Peki ya kravat?
Eğer bir beraberlik varsa, kazanan 5 kodun üzerinde ortalamaları en hızlı çalıştıran kazanan olacaktır. Bu zamanların eşit olması durumunda, kazanan ilk cevaptır.
Rasgele girdi nasıl oluşturulacak?
- M, m <= n ile n matrisiyle ve -1 veya 1 olan girişlerle rastgele bir m olsun. Python / numpy
M = np.random.choice([0,1], size = (m,n))*2-1
. Uygulamadam
olmak üzere olacağımn/2
. - P kimlik matrisi olsun + M ^ T M. Python / numpy
P =np.identity(n)+np.dot(M.T,M)
. ŞimdiP
kesin olarak kesin ve girişlerin uygun bir aralıkta olduğunu garanti ediyoruz .
Bunun, P'nin tüm öz değerlerinin en az 1 olduğu ve problemi Riemann Theta fonksiyonuna yaklaşma genel probleminden potansiyel olarak kolaylaştıracağı anlamına geldiğine dikkat edin.
Diller ve kütüphaneler
İstediğiniz herhangi bir dili veya kütüphaneyi kullanabilirsiniz. Ancak, puanlama amacıyla kodunuzu makineme koyacağım, bu yüzden lütfen Ubuntu'da nasıl çalıştırılacağına ilişkin açık talimatlar verin.
Benim Makine zamanlamaları benim makinede işletilecek. Bu, 8 GB'lık bir AMD FX-8350 Sekiz Çekirdekli İşlemciye standart bir Ubuntu kurulumudur. Bu ayrıca kodunuzu çalıştırabilmem gerektiği anlamına geliyor.
Ana cevaplar
n = 47
içinde C ++ Ton Hospel tarafındann = 8
içinde Python Maltysen tarafından
x
ait [-1,0,2,1]
. Bu konuda ayrıntılı bilgi verebilir misiniz? (İpucu: Ben bir matematik gurusu değilim)