17 svar
112 visningar
I am Me behöver inte mer hjälp
I am Me 720
Postad: 26 okt 2022 20:08

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 

Fermatrix 7841 – Fd. Medlem
Postad: 26 okt 2022 20:16
A(1:3,1:3) = 3
I am Me 720
Postad: 26 okt 2022 20:27

Men det skulle ge 

1   2    3    1    2   3 

det är vad semikolon säger. 

Fermatrix 7841 – Fd. Medlem
Postad: 26 okt 2022 20:29

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:

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 20:36

repmat(3,3,3) funkar också :)

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 20:37

eller 3*ones(3,3)

I am Me 720
Postad: 26 okt 2022 20:41 Redigerad: 26 okt 2022 20:42

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 

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 20:46

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.

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 20:50

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!

I am Me 720
Postad: 26 okt 2022 20:54
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 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!

Jahaaaa ok! nu förstod jag. 

I am Me 720
Postad: 26 okt 2022 21:05
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. 

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 21:11

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)

Fermatrix 7841 – Fd. Medlem
Postad: 26 okt 2022 21:15

@Matsmats, felmeddelandet blir följande i MATLAB:

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 21:18

Lite fylligare i MATLAB :)

I am Me 720
Postad: 26 okt 2022 21:23

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. 

I am Me 720
Postad: 26 okt 2022 21:24

Vist a=(1,2,3,4,5) är ett talföljd så varför man kan inte sätta komma mellan talen där.  

Matsmats 571 – Livehjälpare
Postad: 26 okt 2022 21:29

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.

I am Me 720
Postad: 27 okt 2022 07:20

Tack för hjälpen!

Svara
Close