LMA310 Analys, fortsättningskurs

MATLABprogrammering

VT 2005

1. I den här uppgiften skall vi undersöka ett öppet matematiskt problem. Det handlar om iterationer av en funktion f som är definierad på de positiva heltalen genom att f(n) = n/2 om n är jämt och f(n) = 3n+1 om n är udda. Hypotesen är att man, oberoende av vilket tal man startar med, efter tillräckligt många iterationer av funktionen får talet 1.

Exempel:

3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
84 → 42 → 21 → 64 → 32 → 16 → 8 → 4 → 2 → 1

Hypotesen kallas för Collatz problem eller 3x + 1-problemet. Du kan hitta en hel del information om detta problem på webben, t.ex. på sidan

http://www.cecm.sfu.ca/organics/papers/lagarias/index.html .

Deluppgift 1. Skriv en funktionsfil som för ett givet heltal n returnerar n/2 om n är jämt och 3n + 1 om n är udda.

Deluppgift 2. Skriv en ny funktion som som för ett givet n returnerar antalet iterationer som krävs för komma till 1.

Deluppgift 3. Skriv en kommandofil som verifierar hypotesen för alla tal mellan 1 och 1000 genom att returnera en vektor med 1000 element som innehåller antalet iterationer som krävs för att komma till 1.

Deluppgift 4. Vilket (eller vilka) tal mellan 1 och 1000 kräver störst antal iterationer. Hur ser följden (följderna ut)?