Tjuvläsare!

Varning, oigenomtänkta uttalanden kan förekomma på denna blogg. Men eftersom det är min dagbok och du bara är tjuvläsare ligger ansvaret på dig att läsa med förnuft. :)

Thursday, July 29, 2010

Lika med! Exakt lika med!

Ibland tänker jag tillbaka på Jennys härliga uttalande vid inläsning av körkortsteori. Hon visste hur "förbjudet att parkera"-skylten såg ut. När "förbjudet att stanna"-skylten dök upp utbrast hon: Absolut förbjudet att parkera!

Lite så kan jag känna med dubbla och enkla lika-med-tecken i MATLAB. Man kan tro att de betyder. Lika med! Och exakt lika med! Fast egentligen betyder ett enkelt likamedtecken, t.ex. A=B, att A skall anta värdet B. Och dubbla likamedtecken, t.ex. A==B, betyder att A är likvärdig med B.

Vi kan nu tolka denna rad i min kod...
M = NTCPuncer==repmat(max(NTCPuncer),size(NTCPuncer,1),1)

... Som: M skall anta värdet av "NTCPuncer==repmat(max(NTCPuncer),size(NTCPuncer,1),1)"

max(NTCPuncer) är en matris som består av de maximala värdena i varje kolumn i den tredimensionella matrisen NTCPuncer. size(NTCPuncer,1) är storleken på den första dimensionen i NTCPuncer vilket är "10".

repmat(max(NTCPuncer),size(NTCPuncer,1),1) betyder att matrisen max(NTCPuncer) skall repliceras 10 gånger i ena ledden och 1 gång i andra ledden vilket betyder att vi skapar en matris bestående av vektorer med 10 identiska tal.

När vi sedan påstår NTCPuncer==repmat(...) får vi det logiska svaret "1" till svar när påståendet är sant. Koden resulterar alltså i en matris av samma dimension som NTCPuncer med nollor på alla positioner förutom där varje kolumns maxvärde stod.

-------------------------
MATLAB offers six relational operators:

* < : less than
* <= : less than or equal to
* > : greater than
* >= : greater than or equal to
* == : equal
* ~= : not equal

Note carefully the difference between the double equality and the single equality. Thus A==B should be read "A is equal to B", while A=B should be read "A should be assigned the value of B". The former is a logical relation, the latter an assignment statement.
--------------------------


Nu vill jag också berätta att alla 1:or hamnade på en och samma rad i alla kolumner för både RS- och LKB-modellen. Intressant. Men jag har ännu inte fått veta vilken position som matrisens globala maximum har.

Genom att ta ner hela koden ett steg...
M = max(NTCPuncer)==repmat(max(max(NTCPuncer)),1,size(NTCPuncer,2))

... Är det nu en vektor bestående av maxvärden från matrisen "max(NTCPuncer)"'s kolumner som skall replikeras. Det är en radvektor (maxvärden för vajre kolumn i dimension 3's riktining) så den skall replikeras endast 1 gång i dimension nummer 3's riktning och storleken på dimension 2 gånger i dimension 2's riktning. När väl detta är gjort skall den jämföras med ursprunglig matrisen max(NTCPuncer) för att finna i vilken kolumn av max(NTCPuncer) som maxvärdena i kolumnen max(max(NTCPuncer)) kommer ifrån.

Tar vi ner koden ännu ett steg, men behåller ursprunglig matris...
M = NTCPuncer==repmat(max(max(max(NTCPuncer))), [length(e) length(f) length(g)])

...Så får vi en etta endast där det globala maximat finns.

Hur hittar vi positionen för 1:an? find(M) ger oss den linjära koordinaten för 1:an. Det vill säga numret som positionen har om man lägger ihop alla föregående positioner. Ordningen på positionerna går kolumnvis i första lagret i första dimensionen och sedan uppåt igenom matrisen. length(e)=length(f)=length(g) i mitt första exempel här. find(M)=91 betyder då att vi befinner oss i första elementet i sista kolumnen i första lagret i matrisen. Alltså är alla variabler i sitt ytterlighetsvärde, eller vi befinner oss rättare sagt i ett hörn i matrisen.


Oh, vad härligt att få cykla
hemmåt i ett härligt hällande regn
Min vita cykel rullar fin-fint
men styret det går trögt

.

No comments: