Minulla on seuraava ongelma:
On n x n-kovarianssimatriisi. Sille pitäisi laskea m < n suurinta ominaisarvoa ja -vektoria eikä siis kaikkia. Olen tehnyt sen simppelisti potenssi-iteraatiolla ja Gram-Schmidt-ortonormeerauksella. Mutta uskon, ettei tämä ole tehokkain menetelmä. Mikäköhän olisi tehokkain, tarkin ja vakain menetelmä tähän ongelmaan? Onko esim. singulaariarvohajotelmalle tällaista variaatiota? Olen löytänyt vain sellaisen SVD:n, joka laskee kaikki singulaariarvot, joista ylivoimainen enemmistö on turhia.
On n x n-kovarianssimatriisi. Sille pitäisi laskea m < n suurinta ominaisarvoa ja -vektoria eikä siis kaikkia. Olen tehnyt sen simppelisti potenssi-iteraatiolla ja Gram-Schmidt-ortonormeerauksella. Mutta uskon, ettei tämä ole tehokkain menetelmä. Mikäköhän olisi tehokkain, tarkin ja vakain menetelmä tähän ongelmaan? Onko esim. singulaariarvohajotelmalle tällaista variaatiota? Olen löytänyt vain sellaisen SVD:n, joka laskee kaikki singulaariarvot, joista ylivoimainen enemmistö on turhia.
Vastaukset 4
Vanhimmat
Edes tapauksessa m=1 ei ole selvää, mikä algoritmi on paras, http://scicomp.stackexchange.com/questions/1681/what-is-the-fastest-way-to-calculate-the-largest-eigenvalue-of-a-general-matrix . Miksi ihmeessä algoritmin tulisi olla sekä tehokkain että tarkin mahdollinen, kun yleensä nuo vaatimukset ovat ristiriidassa keskenään?
Jos nopeudella ei ole niin välini, niin iterointi Jacobi-rotaatioilla on yksinkertaisin. Jos nopeuskin on tärkeä, niin Householder-tridiagonalisointi, jota seuraa LR-algoritmi on hyvä. Molemmat menetelmät löytyvät mm. Numerical Recipes-kokoelmasta.
Duplikaatti. http://keskustelu.suomi24.fi/node/11300428
Kun lasketaan nykykoneilla ja kun n muutamia tuhansia, niin lienee yksi ja sama mitä algoritmia käyttää. On aivan yhdentekevää, viekö laskenta 0,5 sekuntia vai 5 sekuntia, jos ei ole kyse jonkin iteraation sisäsilmukasta, joka toistuu kymmeniä tuhansia kertoja.
Mitä näiden kanssa ryhtyy turhaan hiplaamaan, se on tyhjään heitettyä aikaa ja vaivaa.