Matriser
Hej!!
Hur skulle man lösa den här uppfiten om man inte kände till att det finns något som heter ones() i matlab??
Sedan varför skriver de .*3 och inte bara *3 ???
Uppgift;
Givet matriserna A och B nedan
A = [4 0 3; 2 1 6; 3 4 1]
B = [3 3 3; 3 3 3; 3 3 3]
Hur kan man på ett enkelt sätt skapa matrisen B utan att behöva mata in alla nio 3:or?
svar: B= ones(3).*3
A(1:3,1:3) = 3
Men det skulle ge
1 2 3 1 2 3
det är vad semikolon säger.
Nu hänger jag inte med på vad du menar.
Prova köra det jag skrev i #2. Så här ser det ut för mig:
repmat(3,3,3) funkar också :)
eller 3*ones(3,3)
Ja det stämmer, om man kör koden A(1:3,1:3) = 3 så får man bara treor.
Men jag har inte förstått koden.
Som jag har förstått så kolon används för att ge talföljd från en gräns till en anna gräns så 1:3 betyder 1 2 3 och igen 1: 3 som också är 1 2 3 och för att vi har en kommatecken mellan, alltså 1:3, 1:3 då blir det en vektor som är 1 2 3 1 2 3
I Dracaenas kod är det rad- respektive kolumnindex det handlar om i A(1:3,1:3).
Koden A(1:3,1:3)=3 säger att du tilldelar 3 till raderna 1:3 och kolumnerna 1:3.
Exempel
a=magic(3)
>> a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> a(1:3,1)
ans =
8
3
4
Dvs rad 1:3, kolumn 1. Som Dracaena visar kan du även tilldela på det här viset,
ex.
>> a(1:3,1)=7
a =
7 1 6
7 5 7
7 9 2
>
Här tilldelade jag 7 till raderna 1 t.o.m. 3 och kolumn 1.
Det finns ett par sätt till, man kan t.ex. använda ':' för att syfta på alla rader eller alla kolumner, exempel
>> a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> a(:,2)=9
a =
8 9 6
3 9 7
4 9 2
Till slut kan enbart ':' användas för "alla rader och alla kolumner", exempel
>> a=magic(3)
a =
8 1 6
3 5 7
4 9 2
>> a(:)=11
a =
11 11 11
11 11 11
11 11 11
Testa gärna exemplen!
Matsmats skrev:Det finns ett par sätt till, man kan t.ex. använda ':' för att syfta på alla rader eller alla kolumner, exempel
>> a=magic(3)
a =8 1 6
3 5 7
4 9 2>> a(:,2)=9
a =8 9 6
3 9 7
4 9 2Till slut kan enbart ':' användas för "alla rader och alla kolumner", exempel
>> a=magic(3)
a =8 1 6
3 5 7
4 9 2>> a(:)=11
a =11 11 11
11 11 11
11 11 11Testa gärna exemplen!
Jahaaaa ok! nu förstod jag.
Matsmats skrev:eller 3*ones(3,3)
Något annat som jag har svårt med att veta när man ska använda är kommatecken och när man ska inte använda kommatecken.
Om du skapar en radvektor (eller en rad i en matris) kan du använda dem eller inte:
>> b=[1 2 3]
b =
1 2 3
>> b=[1,2,3]
b =
1 2 3
>> b=[1,2 3]
b =
1 2 3
Men i fallet t.ex. 3*ones(3,3) så skiljer kommatecknet två funktionsargument (antal rader resp. antalet kolumner) och då måste det vara där.
>> 3*ones(3,3)
ans =
3 3 3
3 3 3
3 3 3
>> 3*ones(3 3)
error: parse error:
syntax error
(använder Octave, felmeddelandet ser kanske lite annorlunda ut i MATLAB)
@Matsmats, felmeddelandet blir följande i MATLAB:
Lite fylligare i MATLAB :)
Ok då kommatecken kan används för att skilja talet från varandra i ett radvektor. Men när får det inte användas?
Jag skrev a=(1,10) fick fel meddelande, även a[1,10] ger fel meddelande.
Vist a=(1,2,3,4,5) är ett talföljd så varför man kan inte sätta komma mellan talen där.
a=(1,10) blir fel för när du skall göra en radvektor behöver du använda hakparenteser, a=[1,10]
>> a=[1,10]
a =
1 10
När du skall indexera i vektorn skall det vara vanliga parenteser:
>> a(1)
ans = 1
>> a(2)
ans = 10
Du kan även indexera med en vektor för att välja ut flera element:
>> a([1 2])
ans =
1 10
Notera att de yttre parenteserna är vanliga (indexering i vektorn a) medan de inre är hakparenteser (för att skapa vektorn du indexerar med). I sista exemplet väljer vi indexen 1 och 2 i vektorn och de var ju 1 resp. 10.
Tack för hjälpen!