Tietääkö joku mitään hyvää menetelmää millä voisi ratkaista yhtälön A * x = b missä A on m*n matriisi, b = n*1 vektori ja b on n*1 vektori?
ELI A:n ja b:n alkiot on tunnettu ja x vektori pitäisi ratkaista.
ELI A:n ja b:n alkiot on tunnettu ja x vektori pitäisi ratkaista.
Vastaukset 7
Vanhimmat
Vaikka tuo selostuksesi on sekava, niin oletan sinun hakevan ei-neliömäisen matriisiyhtälön ratkaisua.
Kerrotaan yhtälö molemmmin puolin matriisin A transponentilla eli A^T:lla. Nyt
A^T A x = A^T b,
jossa kerroinmatriisi on neliömäinen ja yhtälö voidaan ratkaista.
Matemaatikot esittänevät lisäehtoja, milloin temppu on mahdollinen. Lisäksi numeroarvoilla laskettaessa kannattaa tyytyä pieniin dimensioihin, koska menetelmä on varsin herkkä alkioiden numeeriselle tarkkuudelle.
Tuo temppu että kerrotaan A^T yhtälö puolittain voidaan tehdä mikäli (A^T)A on kääntyvä, joka on mahdollista vain jos A:n sarakkeet ovat lineaarisesti riippumattomia eli rank(A)=n (missä n sarakkeiden lkm)
Helpoin tapa on kuitenkin käyttää Gauss-Jordanin algoritmia jolla muutetaan matriisi [A:b] (A ja b vektorista muodostettu n 1 sarakkeinen matriisi) kanoniiseen muotoon, josta ratkaisu(t) on helppo lukea, jos niitä on.
ottaen ei yksikäsitteistä ratkaisua, sillä jos kerroinmatriisi A ei ole neliömatriisi on kyseesssä joko yhtälöryhmä, jossa on enemmän tuntemattomia muuttujia kuin on yhtälöitä (jolloin ratkaisuja on ääretön määrä) tai sitten yhtälöitä on enemmän kuin muuttujia, jolloin yhtälöryhmällä ei ole ratkaisua ellei yhtälöryhmä ole lineaarisesti riippuva.
Eli kaksi vaihtoehtoa:
-Totea: Ei ratkaisua
-Tai sitten poista yhtälöryhmän lineaarinen riippuvuus jolloin kerroinmatriisiksi saadaan neliömatriisi
siis ne ääretön eri ratkaisua jotka toisessa tapauksessa (enemmän muuttujia kuin yhtälöitä) saadaan voidaan ratkaista siten että asetetaan (n-m):lle x:n alkioille mielivaltainen arvo ja ratkaistaan yhtälöryhmä. m on kerroinmatriisin rivien lukumäärä, n sarakkeiden. Tämä tarkoittaa sitä että alkuperäisestä kerroinmatriisista poistetaan valittuja x:n alkioita vastaavat sarakkeet ja b vektorista vähennetään alkuperäisen kerroinmatriisin poistetut sarakkeet kerrottuna valitulla x:n alkiolla.
Tällöin saadaan uusi yhtälöryhmä Cy = d jossa kerroinmatriisi C on nyt neliöllinen.
Yhtälöryhmä on siis
Cy(x´)=b(x´)
jossa b(x´) tarkoittaa vektoria jonka alkiot ovat valittujen x:n alkioiden funktioita. Valituille x:n alkioille ei siis ole pakko antaa numeerista arvoa
ja ratkaisu y(x´) edustaa ratkaisua jossa muuttjat x´ voidaan valita vapaasti.
Jolloin alkuperäisen yhtälön ratkaisu on x = x´ " " y(x´) (ei tarkoita tavallista vektorien summaa vaan sitä että vektorit summataan niitä vastaaville "paikoilleen", sijoittelusummaus). Eli x´:t kiilaavat vektorin y(x´) alkioiden väleihin sinne mistä ne otettiinkin vektorista x. Tällöin alkupräisen tehtävän ratkaisu on vektori jossa osa alkoista on toisten alkioiden funktio. Ääretön ratkaisua siis.
...siis d(x´) eikä b(x´)
Kuten tuolla edellä totesin, en ole matemaatikko, mutta olen käyttänyt esittämääni menetelmää useiden käytännön ongelmien ratkaisuun. Olen tuollaisella matriisiyhtälöllä ratkaissut numeerisia ongelmia joskus suoraan tuossa muodossa, joskus SVD-menenetelmää käyttäen, mikäli yhtälöitä on ollut enemmän.
Ymmärtääkseni ratkaisujen tulkinta on seuraava: Jos yhtälöitä on enemmän kuin tuntemattomia, niin tuloksena saadaan ratkaisu pienimmän neliösumman mielessä. Jos taas lineaarisesti riippumattomia yhtälöitä on yhtä monta kuin muuttujia, niin on kyse normaalista matriisiyhtälöstä. Mikäli yhtälöitä on vähemmän kuin muuttujia, saadaan ratkaisu miniminormin mielessä.