Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk

Matlab hjälp

Jag har precis börjat att försöka lära mig Matlab men förstår inte riktigt hur vissa delar fungerar. Hur funkar det här exemplet tex.

clear for x = 1:10 disp(x) y(x) = x*x end

Jag fattar att x går från 1-10 i varje steg men hur funkar "y(x) = x*x" ? Är det en funktion?
Jag skulle tro att y kommer att vara 1 i första steget 4 i andra 9 i tredje ...

Men när jag kollar på outputen så lagras varje värde så att i steg 10 så är y = 1 4 9 16 25 36 49 64 81 100

Någon som kan förklara hur det funkar?

Permalänk
Medlem

Stämmer som du säger om x men y blir ju
1x1=1
2x2=4
3x3=9
osv

Permalänk

men varför har y 10 värden i steg 10? Och är y(x) = x * x en funktion eller är det något annat?

Permalänk
Datavetare
Skrivet av burton666:

men varför har y 10 värden i steg 10? Och är y(x) = x * x en funktion eller är det något annat?

Din kod med kommenterar kring vad som händer

% tar bort alla variabler i din arbetsbok clear % gör det som finns i kroppen med x satt till 1, 2 ... 10 for x = 1:10 % skriver ut nuvarande värde på x disp(x) % y blir här en radvektor där element med index x sätts till x * x y(x) = x*x end % i detta läge är y = [1 4 9 16 25 36 49 64 81 100]

Så t.ex. y(3) betyder att du får tillbaka 3:e värdet, 9, i radvektorn y.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem

Matlab räknar med matriser. y(x) skapar en matris som är 1 gånger x, även kallat en vektor. I vektorn lagrar du x*x på position x för varje iteration i loopen.

Så om du skriver ut y i varje iteration kommer du se vektorn växa, dvs y = 1, y = [1,4], y = [1,4,9] .... tills du får ut svaret du skrev efter loopen är avslutad.

Matlab tolkar inte det som matematiska funktioner, men det finns program som hanterar symboler. Matlab gör endast numeriska beräkningar och använder x, y, eller vad du vill som variabler likt ett programmeringsspråk.

Visa signatur

| R7 5800X3D @-30 i PBO2 + Noctua NH-U12s | ROG Strix B450-F | 32GB HyperX Fury Black 3200MHz | RTX 3080 TUF OC | Define R4 + Noctua NF-A14 (x2) & NF-S12A + Noctua NA-FC1 | Corsair RM 850X v2 | Samsung 970 Evo Plus 1TB + Crucial MX300 2TB | LG 27GL850

Permalänk
Hedersmedlem

Det normala när man skriver till exempel
y(2) = 3
är att man har en vektor y där man vill sätta element 2 till 3. Matlab hjälper dock till lite ibland; till exempel när y inte är definierad (då skapas den och blir precis så lång som behövs) eller om den är för liten (då skapas en ny som är tillräckligt lång och informationen från den gamla med samma namn kopieras till den nya).

Att hela tiden utöka vektorn längd med 1 och kopiera gammal data blir dock väldigt långsamt i jämförelse med att bara sätta ett värde i en befintlig vektor, så om möjligt vill man innan man går in i loopen skapa y och göra den så lång att alla framtida värden får plats.