opgaver:Uge1mandag
Pia Jensen (Talk | contribs) |
m (moved opgaver:Uge 1 mandag to opgaver:Uge1mandag over redirect) |
||
(15 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
− | == Simpel syntaks og kommando- | + | == Simpel syntaks og kommando-linje == |
− | === Opgave 1 === | + | === Opgave 1.1 === |
Lav en vektor bestående af de lige heltal mellem 31 og 75. | Lav en vektor bestående af de lige heltal mellem 31 og 75. | ||
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
− | Gå ind i MATLAB hjælp og søg på <code>colon</code>, og læs så ''<nowiki>Colon (:)</nowiki>'' artiklen. Du kan evt. også se på side 3-7 i | + | Gå ind i MATLAB hjælp og søg på <code>colon</code>, og læs så ''<nowiki>Colon (:)</nowiki>'' artiklen. Du kan evt. også se på side 3-7 i "MATLAB® Primer" (tidligere kaldet "Getting Started with MATLAB") bogen, der ligger på Absalon. |
Her vil du se at man kan lave en liste ved hjælp af koden <code>j:i:k</code>. Denne liste vil starte i <code>j</code> og lægge <code>i</code> til for hvert element, indtil den kommer til <code>k</code>. Hvis den ikke rammer <code>k</code> præcist, så vil den stoppe før den kommer over. | Her vil du se at man kan lave en liste ved hjælp af koden <code>j:i:k</code>. Denne liste vil starte i <code>j</code> og lægge <code>i</code> til for hvert element, indtil den kommer til <code>k</code>. Hvis den ikke rammer <code>k</code> præcist, så vil den stoppe før den kommer over. | ||
Line 21: | Line 21: | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 2 === | + | === Opgave 1.2 === |
Lad <code>x = [2 5 1 6]</code>. | Lad <code>x = [2 5 1 6]</code>. | ||
− | # | + | # Lav en ny vektor af <code>x</code> ved at addere 16 til hvert element. |
− | # | + | # Lav en ny vektor der indeholder alle ulige-indeks elementerne af <code>x</code>, adderet med 3. |
− | # Udregn kvadratroden af hvert element. | + | # Udregn kvadratroden af hvert element i <code>x</code>. |
− | # Udregn kvadratet af hvert element. | + | # Udregn kvadratet af hvert element i <code>x</code>. |
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
− | For at løse disse opgaver kan det være en god idé at se på | + | For at løse disse opgaver kan det være en god idé at se på "MATLAB® Primer" (tidligere kaldet "Getting Started with MATLAB") bogen, der ligger på Absalon. Læs om arrays fra side 3-21. Vær sikker på at du forstår hvornår man skal bruge punktum foran matematiske operatorer. |
{{hidden end}} | {{hidden end}} | ||
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
− | 1. For at lægge et tal til alle elementerne i et array skal man simpelthen | + | 1. For at lægge et tal til alle elementerne i et array skal man simpelthen bruge et plus. MATLAB forstår godt at et enkelt tal lagt til et array ikke giver mening, og laver derfor operationen på alle elementerne i arrayet: |
− | :<code>x + 16</code> | + | :<code>y = x + 16</code> |
2. For at lægge et tal til kun nogle bestemte elementer i et array skal man lægge det til array'et med indekserne man gerne vil have - skrevet her som en liste: | 2. For at lægge et tal til kun nogle bestemte elementer i et array skal man lægge det til array'et med indekserne man gerne vil have - skrevet her som en liste: | ||
− | :<code>x(1:2:end) + 3</code> | + | :<code>z1 = x(1:2:end) + 3</code> |
+ | |||
+ | alternativt kan man få hele <code>x</code>, hvor der kun er lagt 3 til de ønskede steder: | ||
+ | |||
+ | :<code>z2 = x + 3*[0 1 0 1]</code> | ||
+ | |||
+ | dette kan selvfølgelig også gøres endnu mere generelt ved at bruge loops (det behøver I ikke kunne endnu, men det er en god ting at læse op på!): | ||
+ | |||
+ | :<code>for i = 1:length(x)</code> | ||
+ | ::<code> if mod(i,2) == 0</code> | ||
+ | :::<code> bool = 0; %lige tal</code> | ||
+ | ::<code> else</code> | ||
+ | :::<code> bool = 1; %ulige tal</code> | ||
+ | ::<code> end</code> | ||
+ | ::<code> z3(i) = x(i) + 3*bool;</code> | ||
+ | :<code>end</code> | ||
+ | :<code>z3</code> | ||
3. Kvadratroden er en funktion i MATLAB, og funktioner der fungerer på skalarer fungerer automatisk element-vist. Derfor fås kvadratroden af hvert element i <code>x</code> ved | 3. Kvadratroden er en funktion i MATLAB, og funktioner der fungerer på skalarer fungerer automatisk element-vist. Derfor fås kvadratroden af hvert element i <code>x</code> ved | ||
Line 48: | Line 64: | ||
:<code>x.^2</code> | :<code>x.^2</code> | ||
− | Man kunne også | + | Man kunne også vælge at bruge |
:<code>x.*x</code> | :<code>x.*x</code> | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 3 === | + | === Opgave 1.3 === |
Lad <code>x = [3 2 6 8]'</code> og <code>y = [4 1 3 5]'</code>. (NB. <code>x</code> og <code>y</code> bør være søjlevektorer). | Lad <code>x = [3 2 6 8]'</code> og <code>y = [4 1 3 5]'</code>. (NB. <code>x</code> og <code>y</code> bør være søjlevektorer). | ||
Line 89: | Line 105: | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 4 === | + | === Opgave 1.4 === |
Udregn de følgende MATLAB udtryk i hånden, og brug så MATLAB til at tjekke resultaterne: | Udregn de følgende MATLAB udtryk i hånden, og brug så MATLAB til at tjekke resultaterne: | ||
# <code>2 / 2 * 3</code> | # <code>2 / 2 * 3</code> | ||
# <code>6 - 2 / 5 + 7 ^ 2 - 1</code> | # <code>6 - 2 / 5 + 7 ^ 2 - 1</code> | ||
− | # <code>10 / 2 \ | + | # <code>10 / 2 \ 3 - 3 + 2 * 4</code> |
# <code>3 ^ 2 / 4</code> | # <code>3 ^ 2 / 4</code> | ||
# <code>3 ^ 2 ^ 2</code> | # <code>3 ^ 2 ^ 2</code> | ||
Line 101: | Line 117: | ||
# <code>2 + ceil(6 / 9 + 3 * 2) / 2 - 3</code> | # <code>2 + ceil(6 / 9 + 3 * 2) / 2 - 3</code> | ||
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
− | Det kan hjælpe at skrive udtrykkene ind i MATLAB og tilføje parenteser så de bliver nemmere at læse. Hvis resultatet stadig er det samme efter parenteserne er blevet sat, så har du | + | Det kan hjælpe at skrive udtrykkene ind i MATLAB og tilføje parenteser så de bliver nemmere at læse. Hvis resultatet stadig er det samme efter parenteserne er blevet sat, så har du højst sandsynligt ikke misforstået noget. |
{{hidden end}} | {{hidden end}} | ||
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
Line 108: | Line 124: | ||
#<code>2 / 2 * 3 = (2/2) * 3</code> | #<code>2 / 2 * 3 = (2/2) * 3</code> | ||
#<code>6 - 2 / 5 + 7 ^ 2 - 1 = 6 - (2/5) + (7^2) - 1</code> | #<code>6 - 2 / 5 + 7 ^ 2 - 1 = 6 - (2/5) + (7^2) - 1</code> | ||
− | #<code>10 / 2 \ | + | #<code>10 / 2 \ 3 - 3 + 2 * 4 = 3/(10/2) - 3 + (2*4)</code> |
#<code>3 ^ 2 / 4 = (3^2) / 4</code> | #<code>3 ^ 2 / 4 = (3^2) / 4</code> | ||
#<code>3 ^ 2 ^ 2 = (3^2) ^ 2</code> | #<code>3 ^ 2 ^ 2 = (3^2) ^ 2</code> | ||
Line 118: | Line 134: | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 5 === | + | === Opgave 1.5 === |
Lav en vektor <code>x</code> med elementerne... | Lav en vektor <code>x</code> med elementerne... | ||
− | # <code>2, 4, 6, 8, | + | # <code>2, 4, 6, 8, 10</code> |
# <code>10, 8, 6, 4, 2, 0, -2, -4</code> | # <code>10, 8, 6, 4, 2, 0, -2, -4</code> | ||
− | # <code>1, 1/2, 1/3, 1/4, 1/5, | + | # <code>1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10</code> |
− | # <code>0, 1/2, 2/3, 3/4, 4/5, | + | # <code>0, 1/2, 2/3, 3/4, 4/5, 5/6, 6/7, 7/8, 8/9, 9/10, 10/11</code> |
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
Igen skal man gøre brug af kolon operatoren, mens man i de sidste to løser opgaven nemmest ved at lave flere lister og kombinere dem: | Igen skal man gøre brug af kolon operatoren, mens man i de sidste to løser opgaven nemmest ved at lave flere lister og kombinere dem: | ||
Line 133: | Line 149: | ||
# <code>x = 0:10; y = 1:11; x./y</code> | # <code>x = 0:10; y = 1:11; x./y</code> | ||
− | + | Det er vigtigt i den sidste af opgaverne at man laver de to arrays lige lange - ellers er det ikke muligt at dividere dem med hinanden element-vist. | |
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 6 === | + | === Opgave 1.6 === |
Lav en vektor <code>x</code> med elementerne | Lav en vektor <code>x</code> med elementerne | ||
Line 150: | Line 166: | ||
{{hidden end}} | {{hidden end}} | ||
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
− | Opgaven kan løses ved de følgende tre | + | Opgaven kan løses ved de følgende tre linjer: |
:<code>n = 1:100</code> | :<code>n = 1:100</code> | ||
:<code>x = ( (-1).^(n+1) ) ./ (2*n - 1)</code> | :<code>x = ( (-1).^(n+1) ) ./ (2*n - 1)</code> | ||
Line 156: | Line 172: | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave | + | === Opgave 1.7 === |
Givet en vektor, <code>t</code>, med længde <code>n</code>, lav MATLAB udtryk der vil udregne de følgende udtryk. Test at de virker for <code>t = 1:0.2:2</code>. | Givet en vektor, <code>t</code>, med længde <code>n</code>, lav MATLAB udtryk der vil udregne de følgende udtryk. Test at de virker for <code>t = 1:0.2:2</code>. | ||
Line 162: | Line 178: | ||
# e<sup>t</sup>(1 + cos(3t)) | # e<sup>t</sup>(1 + cos(3t)) | ||
# cos<sup>2</sup>(t) + sin<sup>2</sup>(t) | # cos<sup>2</sup>(t) + sin<sup>2</sup>(t) | ||
− | # tan<sup>-1</sup>( | + | # tan<sup>-1</sup>(t) (dette er den ''inverse'' tangentfunktion) |
# cot(t) | # cot(t) | ||
# sec<sup>2</sup>(t) + cot(t) - 1 | # sec<sup>2</sup>(t) + cot(t) - 1 | ||
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
Alle de typiske matematiske funktioner som cos, sin og exp er allerede standardfunktioner i MATLAB, og de opererer element-vist. Husk dine punktummer når de er nødvendige. | Alle de typiske matematiske funktioner som cos, sin og exp er allerede standardfunktioner i MATLAB, og de opererer element-vist. Husk dine punktummer når de er nødvendige. | ||
+ | |||
+ | Bemærk at inverse trigonometriske funktioner starter med <code>a</code>, som f.eks. <code>acos</code> eller <code>atan</code>. | ||
{{hidden end}} | {{hidden end}} | ||
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
− | Udtrykkene er stort set som man forventer de vil være, når bare man husker sine punktummer hvor de er nødvendige | + | Udtrykkene er stort set som man forventer de vil være, når bare man husker sine punktummer hvor de er nødvendige. |
#<code>log(2+t+t.^2)</code> | #<code>log(2+t+t.^2)</code> | ||
Line 182: | Line 200: | ||
== Simple arrays == | == Simple arrays == | ||
− | === Opgave 1 === | + | === Opgave 2.1 === |
Givet <code>x = [3 1 5 7 9 2 6]</code>, forklar hvad de følgende kommandoer "betyder": | Givet <code>x = [3 1 5 7 9 2 6]</code>, forklar hvad de følgende kommandoer "betyder": | ||
Line 192: | Line 210: | ||
# <code>x([1 6 2 1 1])</code> | # <code>x([1 6 2 1 1])</code> | ||
# <code>sum(x)</code> | # <code>sum(x)</code> | ||
+ | # <code>x([true true false false true true false])</code> | ||
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
#<code>x(3)</code> er element nummer 3 i <code>x</code>. | #<code>x(3)</code> er element nummer 3 i <code>x</code>. | ||
Line 198: | Line 217: | ||
#<code>x(1:end-1)</code> er alle elementer fra og med element 1 til og med det næstsidste element. | #<code>x(1:end-1)</code> er alle elementer fra og med element 1 til og med det næstsidste element. | ||
#<code>x(6:-2:1)</code> er element 6,4,2 - altså alle elementer fra og med 6, med to mindre for hvert tal, indtil man når 1. | #<code>x(6:-2:1)</code> er element 6,4,2 - altså alle elementer fra og med 6, med to mindre for hvert tal, indtil man når 1. | ||
− | #<code>x([1 6 2 1 1])</code> | + | #<code>x([1 6 2 1 1])</code> giver <code>x</code>-elementerne i rækkefølgen element 1, 6, 2, 1 og 1 igen. |
#<code>sum(x)</code> er summen af alle elementer i <code>x</code>. | #<code>sum(x)</code> er summen af alle elementer i <code>x</code>. | ||
+ | #<code>x([true true false false true true false])</code> bruger et logisk array til at bestemme hvilke elementer der skal vises. | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 2 === | + | === Opgave 2.2 === |
Givet array'et <code>A = [ 2 4 1 ; 6 7 2 ; 3 5 9]</code>, find kommandoerne der behøves for at... | Givet array'et <code>A = [ 2 4 1 ; 6 7 2 ; 3 5 9]</code>, find kommandoerne der behøves for at... | ||
Line 212: | Line 232: | ||
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
Her skal du bruge kolon operatoren igen, og bemærke at den foruden at lave lister også kan bruges som et catch-all indeks i et array. Hvis du har et 1D array <code>x</code>, og skriver <code>x(:)</code>, får du bare hele array'et. | Her skal du bruge kolon operatoren igen, og bemærke at den foruden at lave lister også kan bruges som et catch-all indeks i et array. Hvis du har et 1D array <code>x</code>, og skriver <code>x(:)</code>, får du bare hele array'et. | ||
+ | |||
+ | Det kan være en hjælp at læse lidt om funktionen <code>std()</code> i MATLAB hjælpen. | ||
{{hidden end}} | {{hidden end}} | ||
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | {{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}} | ||
Line 221: | Line 243: | ||
{{hidden end}} | {{hidden end}} | ||
− | === Opgave 3 === | + | === Opgave 2.3 === |
Givet arrays'ene <code>x = [1 4 8]</code>, <code>y = [2 1 5]</code> og <code>A = [3 1 6 ; 5 2 7]</code>, find ud af hvilke udtryk der kan udføres korrekt, og giv resultaterne. Hvis udtrykket ikke kan udføres, så find ud af hvorfor. Kommandoen <code>whos</code> kan være smart at bruge her. | Givet arrays'ene <code>x = [1 4 8]</code>, <code>y = [2 1 5]</code> og <code>A = [3 1 6 ; 5 2 7]</code>, find ud af hvilke udtryk der kan udføres korrekt, og giv resultaterne. Hvis udtrykket ikke kan udføres, så find ud af hvorfor. Kommandoen <code>whos</code> kan være smart at bruge her. | ||
Line 240: | Line 262: | ||
# <code>A - 3</code> virker, og trækker 3 fra alle elementer i <code>A</code>. | # <code>A - 3</code> virker, og trækker 3 fra alle elementer i <code>A</code>. | ||
{{hidden end}} | {{hidden end}} | ||
+ | |||
+ | |||
+ | |||
+ | == Samlede løsninger == | ||
+ | * Et samlet dokument med MATLAB kode til at løse alle opgaverne ovenfor kan hentes her: [[Media:opgaver_uge1_1_bucknell.m|opgaver_uge1_1_bucknell.m]] |
Latest revision as of 11:28, 20 April 2014
Disse simple øvelser skal laves som en warm-up til MATLAB. Dem der allerede er trygge ved at bruge MATLAB kan nøjes med at skimme dem igennem - men det anbefales at I går igennem dem alle for at være sikre på at I ved hvad I laver!
Opgaverne er taget fra [1] (Basic syntax and command-line exercises 1-6 og 8, samt Basic array exercises 1-3).
Contents[hide] |
Simpel syntaks og kommando-linje
Opgave 1.1
Lav en vektor bestående af de lige heltal mellem 31 og 75.
Opgave 1.2
Lad x = [2 5 1 6]
.
- Lav en ny vektor af
x
ved at addere 16 til hvert element. - Lav en ny vektor der indeholder alle ulige-indeks elementerne af
x
, adderet med 3. - Udregn kvadratroden af hvert element i
x
. - Udregn kvadratet af hvert element i
x
.
Opgave 1.3
Lad x = [3 2 6 8]'
og y = [4 1 3 5]'
. (NB. x
og y
bør være søjlevektorer).
- Addér summen af elementerne i
x
tily
. - Hæv hvert element af
x
i potensen specificeret af det tilsvarende element iy
. - Dividér hvert element i
y
med det tilsvarende element ix
. - Gang hvert element i
x
med det tilsvarende element iy
, og gem resultatet i den ny variabelz
. - Addér elementerne i
z
og gem resultatet i den ny variabelw
. - Udregn
x'*y - w
og fortolk resultatet.
Opgave 1.4
Udregn de følgende MATLAB udtryk i hånden, og brug så MATLAB til at tjekke resultaterne:
-
2 / 2 * 3
-
6 - 2 / 5 + 7 ^ 2 - 1
-
10 / 2 \ 3 - 3 + 2 * 4
-
3 ^ 2 / 4
-
3 ^ 2 ^ 2
-
2 + round(6 / 9 + 3 * 2) / 2 - 3
-
2 + floor(6 / 9 + 3 * 2) / 2 - 3
-
2 + ceil(6 / 9 + 3 * 2) / 2 - 3
Opgave 1.5
Lav en vektor x
med elementerne...
-
2, 4, 6, 8, 10
-
10, 8, 6, 4, 2, 0, -2, -4
-
1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10
-
0, 1/2, 2/3, 3/4, 4/5, 5/6, 6/7, 7/8, 8/9, 9/10, 10/11
Opgave 1.6
Lav en vektor x
med elementerne
- xn = (-1)n+1/(2n-1)
Summér elementerne i versionen af denne vektor med 100 elementer.
Opgave 1.7
Givet en vektor, t
, med længde n
, lav MATLAB udtryk der vil udregne de følgende udtryk. Test at de virker for t = 1:0.2:2
.
- ln(2 + t + t2)
- et(1 + cos(3t))
- cos2(t) + sin2(t)
- tan-1(t) (dette er den inverse tangentfunktion)
- cot(t)
- sec2(t) + cot(t) - 1
Simple arrays
Opgave 2.1
Givet x = [3 1 5 7 9 2 6]
, forklar hvad de følgende kommandoer "betyder":
-
x(3)
-
x(1:7)
-
x(1:end)
-
x(1:end-1)
-
x(6:-2:1)
-
x([1 6 2 1 1])
-
sum(x)
-
x([true true false false true true false])
Opgave 2.2
Givet array'et A = [ 2 4 1 ; 6 7 2 ; 3 5 9]
, find kommandoerne der behøves for at...
- definere en vektor
x1
der indholder den første række afA
. - definere et array
y
der indeholder de sidste 2 rækker afA
. - udregne summen over kolonnerne i
A
. - udregne summen over rækkerne i
A
. - udregne standardafvigelsen af gennemsnittet for hver kolonne i
A
(NB. standardafvigelsen af gennemsnittet er defineret som standardafvigelsen divideret med kvadratroden af antallet af elementer der bruges til at udregne gennemsnittet).
Opgave 2.3
Givet arrays'ene x = [1 4 8]
, y = [2 1 5]
og A = [3 1 6 ; 5 2 7]
, find ud af hvilke udtryk der kan udføres korrekt, og giv resultaterne. Hvis udtrykket ikke kan udføres, så find ud af hvorfor. Kommandoen whos
kan være smart at bruge her.
-
x + y
-
x + A
-
x' + y
-
A - [x' y']
-
[x ; y']
-
[x ; y]
-
A - 3
Samlede løsninger
- Et samlet dokument med MATLAB kode til at løse alle opgaverne ovenfor kan hentes her: opgaver_uge1_1_bucknell.m