Beräkningsverktyg, FMF180 Tentamensuppgifter 2007

Uppgift 1: Kontrollsiffra

Kontrollera din kontrollsiffra. Sista siffran i ditt personnummer är en kontrollsiffra, som ska försvåra förfalskning och skrivfel. Den beräknas genom att multiplicera varje tal i personnumret med 2 respektive 1. Sedan summeras de talen. Skulle något tal vara över tio, t ex 16, adderas siffrorna i talet, d v s 1+6. Subtrahera sedan entalsdelen av summan från 10. Kontrollsiffran är entalsdelen av föregående resultat.

8  0 0 3 2 1 - 3 0 4
2  1 2 1 2 1 - 2 1 2
1+6 +0 +0 +3 +4 +1  +6 +0 +8 = 29

kontrollsiffra = 10 − 9 = 1

Om kontrollsiffra enligt ovan blir lika med 10 sättes kontrollsiffra till 0, dvs ‘kontrollsiffra = mod(kontrollsiffra,10)’. Skriv ett MATLAB-skript (.m-fil) och beräkna ditt kontrollnummer. Kom ihåg att använda vektoroperationer! Tips på användbar MATLAB-funktion är mod. (Överkurs: Det går att skriva hela programmet på en (lång) rad.)

Uppgift 2: Sombrerohatt

A. Skriv en funktion i MATLAB som beräknar

f(x) = \frac{sin(x)}{x}.

Funktionen ska kunna hantera både enkla tal och matriser som inargument, d v s elementvis operationer behövs.

B. Använd funktionen du gjorde i A och plotta den som en funktion av x i intervallet −11 till 11. Testa gärna andra intervall!

Dags att bygga sombrerohatten! Om du roterar din MATLAB-funktion kring z-axeln i 3-dimensioner, skapar du en snygg sombrero. Detta gör du genom att plotta \frac{sin(r)}{r}, där r = \sqrt{x^{2} + y^{2}}. Låt x och y fortfarande gå mellan −11 och 11. I MATLAB skriver du t ex

x=-11:.1:11;
y=-11:.1:11;
[X,Y]=meshgrid(x,y);
mesh(X,Y,f(\sqrt{X^{2} + Y^{2}})

Vad händer när du använder meshgrid? (skriv t ex ut X och Y när du bara har ett fåtal element i x och y). Testa också kommandot contour.

Uppgift 3: Slumtalsmatriser

Slumpmatristeori är ett viktigt redskap inom kvantkaosteori. Kvantkaos studerar kvantmekaniska system som i sin klassiska motsvarighet är kaotiska (ungefär olinjära system som är mycket känsliga för begynnelsevillkor). Utifrån symmetrierna hos en matris kan man göra utlåtanden om fördelningen av matrisens egenvärden.

Slumpmatriser

Studera matriser av typen

H = H_{0} + ΔH_{1}, Δ ∈ [0, 1]

där matriselementen i delmatriserna ges av

(H_{0})_{ij} = G (0, \sqrt{\frac{1}{N}} ) ,  i = j
(H_{0})_{ij} = 0,  i ≠ j
(H_{1})_{ij} = G (0, \sqrt{\frac{2}{N}} ) ,  i > j
(H_{1})_{ji} = (H_{1})_{ij},  i > j
(H_{1})_{ij} = 0,  i = j

där G(m, s) betecknar normalfördelade slumptal med medelvärde m och standardavvikelse s. I MATLAB skapas dessa med kommandot randn.

Skriv ett program som skapar en N ×N-slumpmatris med storleken N = 400 enligt ovanstående (använd gärna funktioner). Beräkna egenvärdena till matrisen för några olika värden på konstanten Δ = 0, 0.002 och 1.

Hu_{k} = e_{k}u_{k}

där e_{k} och u_{k} är egenvärden och egenvektorer till matrisen H. Se till att egenvärdena blir sorterade i storleksordning (Ledning: se kommandot sort).

För att undvika randvärdesproblem använd i fortsättningen enbart de 200 mest centrala egenvärdena, dvs e_{k} där k = 100..300.

Studera den så kallade ”Nearest Neighbor”-distributionen. Den innebär att man undersöker avståndet mellan närliggande egenvärden. Skapa vektorn

x_{i} = \frac{e_{i+1} − e_{i}}{⟨e_{j+1} − e_{j}⟩_{j}}

där nämnaren är medelvärdet av egenvärdesskillnaden för alla egenvärden (Ledning: kommandot diff kan vara användbart). Plotta fördelningen av talen i vektorn x (jfr. histogram), dvs dela in reella axeln i ett antal ekvidistanta områden och räkna hur många tal i vektorn x som hamnar i vardera område. Normalisera fördelningsfunktionen så att summan över alla områden blir 1.

Man kan härleda två analytiska gränser för detta problem, Δ = 0 och Δ = 1. Jämför slumpmatrisen med de två analytiska gränserna

P_{Δ=0}(x) = e^{−x} P_{Δ=1}(x) = \frac{π}{2} xe^{−πx^{2}/4}

Plotta alla 5 linjerna i samma fönster med olika färger och markörer. Namnge alla linjer tydligt med hjälp av en legend. Glöm inte variabelnamn på axlarna. Testa även att göra resultaten tydligare genom att göra 20 realiseringar och medelvärdesbilda.

Fysikanknytning: Väteatomen

Fördelningen av energinivåer i en väteatom i ett magnetfält kan beskrivas med hjälp av slumpmatriser. Inget magnetfält motsvarar i vårt fall Δ = 0. Då motsvarar väteatomen ett klassiskt integrabelt system, dvs dess mekanik styrs av enkla linjära ekvationer. Ett starkt magnetfält motsvarar att Δ → 1 och då blir väteatomen kaotisk och komplicerad att beskriva. Dock kan man ganska enkelt beskriva fördelningen av energitillstånd med hjälp av slumpmatristeori.

Uppgift 4: Kast med boll

Uppgift 4a: Boll utan luftmotstånd

Beräkna banan för en boll som påverkas av gravitationskraften. Bollens position betecknas \overrightarrow{r} = (x, y). Från Newtons andra lag (\overrightarrow{F} = m\overrightarrow{a}) fås ett samband mellan bollens acceleration och de krafter som verkar på den. Gravitations kraften verkar i vertikal-led och kan skrivas som

\overrightarrow{F}_{grav} = −mg (0, 1) .

Ställ upp differentialekvationer i x och y-led och lös dem med hjälp av MATLABs ODE-funktioner. Bollen antas ha massan m = 0.5 kg och g = 9.81 m/s^{2}. Plotta bollens bana och undersök vid vilken utgångsvinkel mot horisontalplanet (40^{∘},45^{∘} eller 50^{∘}) som bollen kommer längst för en utgångsfart på 10 m/s. Svara både med den maximala vinkeln samt motsvarande sträcka.

Uppgift 4b: Boll med luftmotstånd

Gör om föregående uppgift men ta även hänsyn till luftmotståndet. Luftmotståndet är proportionellt mot farten i kvadrat och verkar i rakt motsatt riktning till hastigheten,

\overrightarrow{F}_{luft} = −c |\overrightarrow{v}|^{2} \frac{\overrightarrow{v}}{|\overrightarrow{v}|} = −c |\overrightarrow{v}| \overrightarrow{v}.

Använd värdet c = 0.05 kg/m.

Uppgift 4c: Boll med luftmotstånd och vind

Samma uppgift igen men undersök de två fallen med 10 m/s medvind respektive motvind. Kraften på bollen från vinden är proportionell mot vindstyrkan i kvadrat,

\overrightarrow{F}_{vind} = c |\overrightarrow{v}_{vind}|^{2} \begin{matrix}\overrightarrow{v} & vind \\ | & \overrightarrow{v} & vind & | \end{matrix} = c |\overrightarrow{v}_{vind}| \overrightarrow{v}_{vind}.

Använd samma värde på c som tidigare och låt vinden blåsa endast i xriktningen.