Archive for mars, 2010

Överraskningar

mars 31, 2010

Hemkommen från fjället upptäcker jag två saker, en nyutslagen ros och en mystisk paket-avi.

Ros som återuppstått

Återuppstånden ros

Rosen har vuxit ifrån en köpt ros som jag låtit stå och torka i vatten. Jag missade nog dess glansdagar men det var ändå en trevlig överraskning.

Paketavin visade sig vara ett paket innehållandes Programming the COMMODORE 64, den definitiva guiden till programmering av C64:an enligt säkra källor.

Ur förordet:

Programming the  Commodore 64 is the definitive guide. It covers virtually every aspect of the Commodore 64, from simple BASIC commands to complex machine language techniques. Every explanation is written in depth and with clarity. The result is a comprehensive, easy-to-understand reference that thoroughly explains the 64’s capabilities.

Utöver bokens egna försäkran har jag läst bra recensioner av den på (luft-hartass) nätet (slut-luft-hartass). Jag köpte den mest för det stora avsnittet om C64:ans ljudkretsar och hur ljudrutiner skapas. Boken bjuder på annat som verkar intressant, t.ex Vocabulary of the 6510 chip (lista över assembler instruktioner för MOS6510-processorn) och The VIC-II chip (64:ans grafikchip).

"The encyclopedoc reference guide to the Commodore 64 computer" säger allt

Annonser

Out of office

mars 23, 2010

… närmare bestämt i Vemdalen.

Många alternativ har man

Många alternativ har man

Jag åker skidor efter allehanda leder och måste väl kanske erkänna att min teknik inte är den bästa, men på platta områden har jag nytta av mina långa ben. Imorgon bryts längdturerna med en dag i backen men efter det blir det dagsturer på skidor.

Jag har för tillfället oändligt med träningsvärk och är osäker om jag tar mig ur sängen imorgon men det är morgondagen… nu väntar ett tappert försök att släpa min kropp från soffan till sängen.

gnuplot

mars 20, 2010

På begäran från johan har jag nu plottat stegen det tar att stega ner till ett från 1- 1 000 000 med Collatz metod.

Steg för talen 1- 1 000 000

Steg för talen 1- 1 000 000

Detta samt tidigare plot gjordes med hjälp av gnuplot, ett verktyg för att plotta data.

Gnuplot tar tabulerad data och använder dessa som x-y-koordinater för att sätta ut punkter/linjer i en graf.

Nedan syns ett utdrag ur filen som användes för ovanstående plot:

#startvalue,  #steps
1   0
2   1
3   7
4   2
5   5
6   8
7   16
8   3
9   19
10    6
11    14
12    9
13    9
14    17
15    17
16    4

Gnuplot är kommando-baserat, dvs. när man startar gnuplot får man en prompt där man kan skriva kommandon.

Gnuplot efter uppstart

För att plotta min data kör jag då:

set xlabel start value
set ylabel steps
plot ‘steps.csv’ with dots

Detta plottar upp ovanstående graf på skärmen, för att spara på fil måste vi välja terminalformat, dvs hur gnuplot ska plotta datat:

set terminal ‘png’

png kan vara ett antal olika format (t.ex, jpeg, postscript eller latex)

Sedan väljer vi filnamn och plottar igen:

set output ‘steps1M.png’
plot ‘steps.csv’ with dots

detta plottar värdena med punkter ifall man ersätter dots med lines får man en linjegraf

Man kan också enkelt välja region att plotta genom att ange regionen med [start:stop]

set output ‘steps1k.png’
plot [0:1000] ‘steps.csv’ with dots

Detta plottar startvärdena 0 – 1000.

Steg för området 1 - 1000

Steg för området 1 - 1000

Gnuplot är väldigt smidigt ifall man har enkla dataserier man vill visualisera och inte orkar plocka upp excel. Jag har aldrig riktigt kommit överens med detta Microsoft-program så jag väljer gärna detta alternativ. Det är ett ganska kraftfullt verktyg och ifall man använder datorer för beräkningar är det ett kraftfullt verktyg eftersom det med hjälp av shellscript enkelt kan kopplas ihop med andra program. Programmet har mycket fler funktioner än jag ens kan komma på att söka efter, så jag har hitintills bara skrapat på ytan.

Det ensamma skriptet

mars 9, 2010

XKCD Fredag 5/2 -10

Collaz problem (mer info på engelska) är ett matematiskt problem som hävdar att ifall man tar ett tal, ifall det är jämt delar det med 2 och om det är udda multiplicerar man med 3 och lägger till 1 och upprepar processen med det nya talet får man till slut 1.

Jag skrev ett litet skript som simulerade den stackars person som XKCD beskriver här ovan:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import os, sys, math

class collatz:
  def __init__(self, startVal):
    self.val = int(startVal)

  def step(self):
    if (int(self.val) % 2) == 0:
      self.val = self.val / 2
    else:
      self.val = (self.val * 3) + 1

  def current(self):
    return self.val

if __name__ == "__main__":
  if len(sys.argv) < 2:
    print "Please enter start number"
  else:
    colNum = collatz(sys.argv[1])
    stepNumber = 0
#   print "Step\tValue"
    while(colNum.current() != 1):
      colNum.step()
      stepNumber += 1
      print str(stepNumber) + "\t" + str(colNum.current())

Det har inte kunnat bevisats att proceduren i samtliga fall stabiliseras till 1 annat än experimentellt för finita (om än stora) talserier.

Graf för talet 123456

Graf över talet 123456 väg mot 1