[Arşiv] Ticaretle ilgisi olmayan saf matematik, fizik, kimya vb. beyin jimnastiği bulmacaları - sayfa 555

 
Svinotavr :
Avrupa'nın yarısını ele geçirmiş çok fazla insan da yok. Dmitry , sence bu cümle filmin geri kalanını "reddetiyor" mu? Ne düşünüyorsun, boşanmak mı, boşanmamak mı?


Film mezhep propagandasına benziyor. Onu en azından biraz ciddiye almak için tam bir spontovy ... 60 yıl verdi ... ve ne verdi?

 
MetaDriver :

// Çözümlerin uygulanmasının özel durumu (çözümler bulunursa) hala ticaretle bağlantılı olduğundan, offtopik için hemen üzgünüm.

// (: ama öte yandan bu bir teşvik değil mi? :)

// Gerçekten kim yardım edecek, neden gerekli olduğunu söyleyeceğim...;) Sizi temin ederim - çok faydalı olabilir..

Görev:

Verilen: N-boyutlu bir uzayda (M<N) M adet miktarında bir ortogonal vektör kümesi // sınırlayıcı durumda М==1

Gerekli: verilen kümeye dik vektörlerin ( ! ) bir üreteci oluşturun. Koşulla ( ! ) eşleşen rastgele vektörlerin nasıl hızla oluşturulacağı konusunda fikirlere ihtiyacınız var.

Hatırlatma açıklamaları: N boyutlu bir uzay için, çözüm uzayının boyutu (NM), yani. bir başlangıç (M=N-1) vektör seti ile, tek bir açık çözümümüz var (bu arada, tek hamlede nasıl elde edilir? Wiki'de bir makale var, ancak tam olarak çözemedim. Parmaklarındaki algoritmayı kim açıklarsa - o şeker (yine - tüm bunlara neden ihtiyacım olduğunu söyleyeceğim.) ). Daha küçük bir başlangıç kümesiyle, sonsuz sayıda böyle vektör vardır, yani. "seçenekler var". Bunlar, oluşturmanız gereken seçeneklerdir.

"Bir ortogonal vektör kümesi A, bir B kümesine ortogonaldir" ifadesi biraz belirsizdir (tam olarak neyin neye ortogonal olduğu anlamında) ... Bir formülle daha iyi bir kesin koşul belirleyebilir misiniz?
 
alsu :
"Bir ortogonal vektör kümesi A, bir B kümesine ortogonaldir" ifadesi biraz belirsizdir (tam olarak neyin neye ortogonal olduğu anlamında) ... Bir formülle daha iyi bir kesin koşul belirleyebilir misiniz?

Ayrıca açıklığa kavuşturabilirsiniz. Kelimeler benim için daha kolay. Tüm vektörler birbirine diktir. :) B kümesine ihtiyacım yok. Yani, öyle. gerekli, ancak hemen değil, yavaş yavaş. :))

mql(5)'te, girdi olarak bir dizi olarak bir başlangıç vektörleri (А) alan ve tüm girdi vektörlerine dik bir vektör döndüren bir fonksiyon yapmak gerekir.

Peki, şöyle bir şey:

 bool GetOrtoVector( int Dimention, int InputCount, double &Input[], double &Out[]); 
  { 
    .....  
    return succes; 
  }

Çıktı vektörü rastgeledir, ancak dolgu alanından olması garanti edilir. (InputCount == Dimention-1 olması durumunda, olası tek bire bir vektör döndürülür)

Önemli koşul: işlev [mümkün olduğunca] hızlı olmalıdır. Kendimi frenleyebilirim.. :)

 
alsu :
"Bir ortogonal vektör kümesi A, bir B kümesine ortogonaldir" ifadesi biraz belirsizdir (tam olarak neyin neye ortogonal olduğu anlamında) ... Bir formülle daha iyi bir kesin koşul belirleyebilir misiniz?

Formül hakkında: gelen ve giden tüm vektörün karşılıklı ikili skaler ürünleri == 0

Bu koşul, denklem sistemini benzersiz bir şekilde çözmenize ve son vektörü (M==N-1 için) almanıza olanak tanır.

(M<N-1) durumunda, sistem zaten bir çözüm uzayına sahiptir.

Bu karar uzayından rastgele vektörleri çıkarmam gerekiyor. Tercihen çok hızlı.

 
MetaDriver :

Bu koşul, denklem sistemini benzersiz bir şekilde çözmenize ve son vektörü (M==N-1 için) almanıza olanak tanır.

Yalnızca küme normalleştirilmişse. Değilse, o zaman sonsuz bir çözüm kümesi de elde ederiz.

Örnek: {(1,0,0), (0,2,0)} kümesi için (0,0,z) biçimindeki herhangi bir vektör dik olacaktır

 
alsu :

Yalnızca küme normalleştirilmişse. Değilse, sonsuz bir çözüm kümesi de elde ederiz.

Örnek: {(1,0,0), (0,2,0)} kümesi için (0,0,z) biçimindeki herhangi bir vektör dik olacaktır

Tabiiki. Tüm vektörler normalize edilir. Hem girişte hem çıkışta.
 
MetaDriver :
Tabiiki. Tüm vektörler normalize edilir. Hem girişte hem çıkışta.
Basit bir çözüm var ... dedikleri gibi dilin üzerinde dönüyor)))) hemen şimdi
 
alsu :
Basit bir çözüm var ... dedikleri gibi dilin üzerinde dönüyor)))) hemen şimdi

Girişteki bir vektör (x0) için, kolayca ve uzun zaman önce bir çözüm buldum (rastgele boyutta bir alan için):

. . 1. Генерируем случайный вектор (x1r)

. . 2. Нормируем его -> (x1rn)

. . 3. Находим сумму и разность вродного (х0) и полученного (x1rn) -> (sX, dX)

. . 4. Складываем sX+dX и нормируем сумму.

. . 5. Готово. Возвращаем из функции и берём с полки пирожок.

--

Ancak birden fazla girdi vektörü için bu algoritma uygun değildir. Ya da belki ben doğru anlamadım.

Yinelemelerin bir kartopu gibi çoğalmaması için onu nasıl uyarlayacağınıza dair fikirleriniz varsa, yapacaktır.

 

Kahretsin, açıklarken, görünüşe göre kendisi içeri girdi. :)

Her girdi vektörü için yukarıda açıklanan prosedür uygulanırsa, sonuçtaki tüm vektörler, toplamın sonraki normalizasyonu ile toplandığında, istenen sözde rasgele vektörü verecektir!

alsu , yanlış yaptıysam düzelt.

--

// evet, neredeyse berbattı. Biraz daha zor, işe yaramayacak. Her adımda xi vektörünü aldıktan sonra, ilk önce bir sonraki girdiyle "ekle-çıkart-normalize et" vb. gereklidir. giriş vektörleri tükenene kadar Bunun gibi bir şey.

 
MetaDriver :

alsu , yanlış yaptıysam düzelt.

sX = x0 + x1rn

dX = x0 - x1rn

sX+dX = x0+x1rn+x0-x1rn = 2*x0

normalleştirmeden sonra tekrar x0 alırız

)))

Neden: