opgaver:Uge1mandag

From Eksperimentel Fysik WIKI
(Difference between revisions)
Jump to: navigation, search
m (moved opgaver:Uge 1 mandag to opgaver:Uge1mandag over redirect)
 
(11 intermediate revisions by 2 users not shown)
Line 4: Line 4:
  
  
== Simpel syntaks og kommando-linie ==
+
== Simpel syntaks og kommando-linje ==
  
 
=== Opgave 1.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 ''Getting Started with MATLAB'' bogen, der ligger på Absalon.
+
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 25: Line 25:
  
 
# Lav en ny vektor af <code>x</code> ved at addere 16 til hvert element.
 
# Lav en ny vektor af <code>x</code> ved at addere 16 til hvert element.
# Addér 3 til alle ulige-indeks elementerne.
+
# 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å ''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.
+
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 skrive
+
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:
 
alternativt kan man få hele <code>x</code>, hvor der kun er lagt 3 til de ønskede steder:
  
:<code>x + 3*[0 1 0 1]</code>
+
:<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å!):
 
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å!):
Line 52: Line 52:
 
:::<code>        bool = 1;  %ulige tal</code>
 
:::<code>        bool = 1;  %ulige tal</code>
 
::<code>    end</code>
 
::<code>    end</code>
::<code>    y(i) = x(i) + 3*bool;</code>
+
::<code>    z3(i) = x(i) + 3*bool;</code>
 
:<code>end</code>
 
:<code>end</code>
:<code>y</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 64: Line 64:
 
:<code>x.^2</code>
 
:<code>x.^2</code>
  
Man kunne også vælde at bruge
+
Man kunne også vælge at bruge
  
 
:<code>x.*x</code>
 
:<code>x.*x</code>
Line 110: Line 110:
 
# <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 \ 5 - 3 + 2 * 4</code>
+
# <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 117: 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 højest sandsynligt ikke misforstået noget.
+
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 124: 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 \ 5 - 3 + 2 * 4 = (10/2)/5 - 3 + (2*4)</code>
+
#<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 137: Line 137:
 
Lav en vektor <code>x</code> med elementerne...
 
Lav en vektor <code>x</code> med elementerne...
  
# <code>2, 4, 6, 8, ...</code>
+
# <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>
+
# <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>
+
# <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 149: Line 149:
 
# <code>x = 0:10; y = 1:11; x./y</code>
 
# <code>x = 0:10; y = 1:11; x./y</code>
  
I de uendelige lister vælger man selvfølgelig bare selv sit maksimum. Det er dog 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.
+
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}}
  
Line 166: 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 linier:
+
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 172: Line 172:
 
{{hidden end}}
 
{{hidden end}}
  
=== Opgave 1.8 ===  
+
=== 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 178: 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>(1) (dette er den ''inverse'' tangentfunktion)
+
# 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. Bemærk at inverse trigonometriske funktioner starter med <code>a</code>, som f.eks. <code>acos</code> eller <code>atan</code>.
+
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 208: 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 214: 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> er giver <code>x</code>-elementerne i rækkefølgen element 1, 6, 2, 1 og 1 igen.
+
#<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}}
  
Line 228: 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}}

Latest revision as of 10: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

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].

  1. Lav en ny vektor af x ved at addere 16 til hvert element.
  2. Lav en ny vektor der indeholder alle ulige-indeks elementerne af x, adderet med 3.
  3. Udregn kvadratroden af hvert element i x.
  4. 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).

  1. Addér summen af elementerne i x til y.
  2. Hæv hvert element af x i potensen specificeret af det tilsvarende element i y.
  3. Dividér hvert element i y med det tilsvarende element i x.
  4. Gang hvert element i x med det tilsvarende element i y, og gem resultatet i den ny variabel z.
  5. Addér elementerne i z og gem resultatet i den ny variabel w.
  6. 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:

  1. 2 / 2 * 3
  2. 6 - 2 / 5 + 7 ^ 2 - 1
  3. 10 / 2 \ 3 - 3 + 2 * 4
  4. 3 ^ 2 / 4
  5. 3 ^ 2 ^ 2
  6. 2 + round(6 / 9 + 3 * 2) / 2 - 3
  7. 2 + floor(6 / 9 + 3 * 2) / 2 - 3
  8. 2 + ceil(6 / 9 + 3 * 2) / 2 - 3

Opgave 1.5

Lav en vektor x med elementerne...

  1. 2, 4, 6, 8, 10
  2. 10, 8, 6, 4, 2, 0, -2, -4
  3. 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10
  4. 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.

  1. ln(2 + t + t2)
  2. et(1 + cos(3t))
  3. cos2(t) + sin2(t)
  4. tan-1(t) (dette er den inverse tangentfunktion)
  5. cot(t)
  6. 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":

  1. x(3)
  2. x(1:7)
  3. x(1:end)
  4. x(1:end-1)
  5. x(6:-2:1)
  6. x([1 6 2 1 1])
  7. sum(x)
  8. 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...

  1. definere en vektor x1 der indholder den første række af A.
  2. definere et array y der indeholder de sidste 2 rækker af A.
  3. udregne summen over kolonnerne i A.
  4. udregne summen over rækkerne i A.
  5. 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.

  1. x + y
  2. x + A
  3. x' + y
  4. A - [x' y']
  5. [x ; y']
  6. [x ; y]
  7. A - 3


Samlede løsninger



Personal tools
Namespaces
Variants
Actions
Navigation
Opgaver
Andet
Toolbox
Commercial