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
.
Hetväggsbryderi på Semmeldagen
6 years ago

No comments:
Post a Comment