matte, lösning för A i uttrycker C=A*transpose(A)

Permalänk
Medlem

matte, lösning för A i uttrycker C=A*transpose(A)

Hej, behöver en lösning för A i uttrycker C=A*transpose(A)

Jag har alltså C, och vill ha A.

C är korrelationsmatrisen, dvs den är symmetrisk, har en diagonal på 1, och värdena varierar mellan -1 och +1

Sitter och googlar, och läser i matlab hjälpen. Om det finns en ekvasionslösare i Matlab så kan jag använda det istället för en rak formel.

Den här lösningen fick jag av en fysikprofessor (via telefon), verkar lite krånglig dock:

" 1 choose C
2 U, diagnalise, and store eigenvalues, and eigenvectors (lamda, contains all the eigenvalues) for the diagonlise matrix
3 construct diagonolized vector mu, that contains the square root of the eigenvalues.
4 choose matrix V. otrhoronal n by n matrix. create random n by n matrix and keep the eigenvektors.
these eigenvectors are ordered in .. v
A=U*mu*V. u is a kxk matrix, v is a nxn matrix, mu is a diagonal matrix, where we must provide enough zeros on the right hand side so we can multiply it
A, has what we want."

Tacksam för hjälp.

/A

Permalänk
Medlem

Vad har A för dimension? Om den har fler kolonner än rader har du fler obekanta än ekvationer vilket gör systemet olösbart. Det bästa du kan få då är en gissning av vilka komponenter som ingår (egenvärdesproblemet).

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Jag fattar ungefär ingenting, jag har bara en liten fråga: vad kan sånt här användas till i praktiken? Eller varför lär man sig det?

Visa signatur

Äntligen har jag fått svar på om vandrande pinnar kan gäspa. Det kan de inte. Ett av världens stora mysterier är löst.

Permalänk
Medlem

Linjär algebra används i MASSOR av tillämpningar, t.ex ekvationslösning, signalbehandling, 3D grafik, osv osv.

Permalänk
Medlem

(OT) Ett litet exempel:

Säg att du har mätdata för länder (befolkningstäthet, BNP, etc.) normerade med varians ett (skalade att variera lika mycket, ungefär) och väntevärde noll (lika mycket minus som plus).

Alltså: 9 olika typer och mätdata och en hel drös länder (200 t.ex.) ordnade i en matris med 9 rader och 200 kolumner, 9x200 (A i exemplet ovan).

om vi därefter multiplicerar A med A' (transponat, vänd längs diagonalen, 200x9-matris) får vi C, en 9x9-matris där de olika elementen säger hur mycket varje mätdata liknar andra data (position 1,2 säger hur likt befolkninstärheten är BNP t.ex.). Bara detta är intressant nog, men nu kommer kruxet:

Sök egenvektorer och egenvärden. En egenvektor har egenskapen a = l * C * a. Alltså att den blir sig själv så när på en skalning vid multiplikation med en bestämd matris. Man säger att C har egenvektorn a och att den egenvektorn har egenvärdet l. Oftsa låter man program som matlab lösa detta.

Om man sorterar egenvektorerna i fallande storleksordning m.a.p egenvärdefår man en lista över "mätdata" som kan sägas bygga upp alla andra mätdata i samma mätserie. Egenvektorn med störst egenvärde pekar i den riktning det sammanlaggda mätdatat varierar mest.

Detta är användbart om man vill klassificera länder i uland/iland (för att ta lands-exemplet).

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk

[U,S,V]=svd(C); A=U*S*V;

löser problemet.
kolla på Help svd

edit: Matlab-funktionen alltså

Permalänk
Medlem

Tackar för hjälpen!

Edit:

Jag fick den att funka med lite modifiering. Så här gjorde jag:

C=[1,0.2,0.8;0.2,1,0;0.8,0,1]
[U,S,V] = svd(C);
S=sqrt(S)
A=U*S*V;
Cnew=A*A'

Måste alltså ta roten ur S, då blir det rätt.

---

Angående vad det är vi gör för något:
Vi arbetar med modeller för att i viss mån simulera börsmarknaden eller kreditrisk (hos banker med lån tex). Vi skapar stora korrelationsmatriser, dessa matriser bestämmer hur aktier rör sig jämfört med varandra. Målet är att bättre förstå tex hur aktier rör sig om man har samband mellan dem. Det finns ingen direkt forskning gjord på likande områden idag så möjligen kan vi hitta lite nya mönster.

/A

Permalänk

fick slint i slkallen. Man får ju tillbaka C...

Permalänk
Medlem

Japp, men nu funkar det dock

Fy bubblan dock. De har bara Matlab R12 här i skolan där jag sitter nu och den är GRYMT mycket långsamare på stora matrisberäkningar. Gjorde lite test och R14 är ca 100ggr snabbare på stora loopar genom matriser.

Mmm, vore smidigt om man kunde installera matlab utan administrator rights.
/A

Permalänk
Medlem

Vad har A för dimension?

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Kör utan loopar då. Matlab är inte gjort för att köra stora for-satser och while-loopar och sånt. Använd de inbygda funktionerna istället. Klassiskt "nybörjar"-problem No offence!

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Racy
Kör utan loopar då. Matlab är inte gjort för att köra stora for-satser och while-loopar och sånt. Använd de inbygda funktionerna istället. Klassiskt "nybörjar"-problem No offence!

Mm, det är alltid kul att sitat med en mäng lopar och tänka "hur kan jag vektorisera det här?".
Sedan visar det sig att det är två matrismultiplikationer och en faltning.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Det är sjukt vilken skillnad det blir då man vektoriserar ens algortimer i ML

Då jag började med matlab så gjorde jag bort mig med loopar hit o dit, men jag hittade en bra guide där de gick igenom vanliga "speed-up-tips-with-vectorization" (underbart "ord") och sedan dess så ... har det gått bättre!

Funderade om man inte skulle kunna använda sig av PCA (principal komponents analys) för att åstadkomma något liknande (kanske bättre)

Visa signatur

weeeee

Permalänk
Medlem

Nja, PCA ger bara den riktning i signalrymden som signalen varierar mest längs (maximerar variansen). Det jag beskrev ovan var en typ av PCA.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.

Permalänk
Medlem

Det är sannt ... men fortfarande intressant .
<OT>
Vi implementerade PCA i ett program för att plotta ut personer i en 3D rymd beroende på aktiviteten hos olika gener ur DNA-data.

Det funkade över förväntan, man kunde utan problem urskilja olika grupperingar av de personer som mätdata fanns från, sedan är det upp till doktorer och läkare att säga vad dessa olika grupper betyder
så skönt att bara vara matematiker!
</OT>

Visa signatur

weeeee

Permalänk
Medlem

Precis, hitta de två eller tre mest varierande riktningarna (enligt definitionen av PCA är de alltid ortogonala) och projicera in data i dem... Därefter är klassificeringsproblem lättare (ofta i allafall). Ett tips kan vara att spara doktorernas utlåtanden och träna ett neuronnät att dra slutsatser från er data. Det är också en sak som fungerar förvånasvärt bra.

Visa signatur

void@qnet
teeworlds, stålverk80, evil schemer, c, c++
Languages shape the way we think, or don't.