Categorie:Profielwerkstukken
Deze lijst wordt bijgehouden door medewerkers van het ICIS (Institute for Computing and Information Science) van de Radboud Universiteit Nijmegen (faculteit Natuurwetenschappen, Wiskunde en Informatica, NWI).
Voor concrete adviezen voor het maken van een profielwerkstuk, gelieve contact op te nemen met het EXO steunpunt van de faculteit NWI.
Inhoud
- 1 Dramatische gevolgen van softwarefouten
- 2 Internetbeveiliging
- 3 Software problemen in de transportsector
- 4 Het jaar-2000-softwareprobleem (Y2K)
- 5 Onderzoek het Web als een graaf
- 6 Onderzoek "sudoku"-puzzels met de computer
- 7 Rekenen met getallen die "te groot" zijn
- 8 Onderzoek de "edit-afstand" van strings
- 9 Doe een onderzoekje naar kleurperceptie
- 10 Klokrekenen en het discrete log - cryptosysteem implementeren
- 11 Autoriteit verdelen via drempelschema's
- 12 Teksten "inpakken"
- 13 Planetaria, tandwielstelsels vereenvoudigen, en kettingbreuken.
- 14 Fibonaccigetallen en hun snelle berekening
- 15 Hexadecimaal rekenen en het getal "Pi"
- 16 Hopfield Netwerk
Dramatische gevolgen van softwarefouten
Soms hebben kleine fouten in software grote gevolgen. Twee bekende voorbeelden zijn:
- De fout in het besturingssysteem van de Ariane 5 raket, waardoor deze op 4 juni 1996 veertig seconden na lancering plotseling uit de koers raakte en zichzelf opblies. Het probleem bleek dat de conversie van een 64-bit floating point getal naar een 16-bit geheel getal waarde niet goed werkte voor grote getallen. Een raket van 500 miljoen dollar ging verloren, waaraan ESA zo'n tien jaar had gewerkt en waarin zeven miljard dollar aan ontwikkelkosten was geinvesteerd.
Link: Ariane software fout op wikipedia en videos op youtube: lang kort
- De fout die Intel in 1994 maakte in de nieuwe Pentium chip. De deeloperatie was fout geimplementeerd op de chip. Die fout was wel al in hardware gegoten -- op een chip -- en miljoenen keren verspreid. Intel probeerde de `bug' af te doen als een `flaw' -- een vergissinkje -- maar via het internet verspreidde het verhaal zich snel met grote reputatieschade en dalende aandelenkoersen voor Intel als gevolg.
Link: Pentium bug op wikipedia
Voor beide fouten (of voor andere, er zijn er legio te vinden op het web) kun je je het volgende afvragen.
- Wat was er precies fout? Is het wel echt een software fout?
- Wat waren de gevolgen?
- Hoe ging het bedrijf daarmee om?
- Hoe had dit voorkomen kunnen worden?
Dit bestaat uit een literatuurstudie en misschien een stukje "code onderzoek" en proberen de precieze situatie in kaart te brengen.
Internetbeveiliging
Het slotje rechtsonder in je webbrowser geeft aan dat je een "beveiligde" internetbeveiliging hebt.
- Hoe werkt deze beveiliging?
- Wat houdt deze beveiliging precies in?
Software problemen in de transportsector
De besturing en de veiligheid van vliegtuigen, treinen en auto's is steeds meer afhankelijk van software. Op dat vlak ontstaan soms grote problemen. Zie de onderstaande link. Link: Forum On Risks To The Public In Computers And Related Systems
Het jaar-2000-softwareprobleem (Y2K)
Rond de overgang van 1999 naar 2000 verwachtte men groet problemen met software en electronische gegevens, omdat een jaartal op een computer meestal (zeker in oudere software waar geheugenruimte zeer beperkt was) wordt weergeven met twee cijfers. (Dus "64" in plaats van "1964".) Door doemdenkers werd voorspeld dat ons hele adiministratieve systeem rond 1 januari 2000 een grote warboel zou zijn, met grote veiligheidsrisico's. Door verschillende bedrijven is daarom hard gewerkt aan het identificeren van zulke potentiele problemen en aan "software renovatie". De doemscenario's zijn niet uitgekomen. Een paar interessante vragen:
- Wat is nou eigenlijk het probleem als je een jaartal door twee cijfgers weergeeft? Wat kan er concreet fout gaan?
- In welke situaties en sectoren heeft dat mogelijk gevolgen?
- Waarom hebben we er niets van gemerkt? Was er zulk goed "reparatiewerk" verricht? Is het probleem schromelijk overdreven?
- Hoe werkt "software renovatie"?
Link: Het jaar 2000 probleem op wikipedia
Dit bestaat uit een "historische" literatuurstudie, een stukje "code onderzoek", proberen de precieze situatie in kaart te brengen en eventueel een onderzoek naar "software renovatie".
Onderzoek het Web als een graaf
Neem de pagina's als knopen en de links als kanten. Definieer een "kliek" als een groep pagina's waarbij je van iedere pagina in de groep door te klikken naar een andere in die groep kunt komen. Hoe groot is de grootste kliek in het Web? En de een na grootste? Probeer te achterhalen hoeveel klieken er ongeveer in het Web zullen zijn. Probeer te achterhalen hoe groot de "diameter" van de grootste kliek ongeveer is. (Dat wil zeggen: hoe groot is het maximum van het aantal kliks nodig om van een pagina naar een andere te komen?)
Link: De graaf structuur van het web Engels wetenschappelijk artikel.
Dit is vooral een opdracht in het achterhalen van informatie via het web, want dit zelf meten is niet doenlijk in een kleinschalig project.
Onderzoek "sudoku"-puzzels met de computer
Maak een programma dat telt hoeveel oplossingen een gegeven puzzel heeft. (In het bijzonder is er de vraag hoeveel oplossingen de "lege puzzel" heeft, d.w.z., hoeveel sudoku's er ueberhaupt bestaan.) Vaak kun je een puzzel helemaal oplossen door "flauwe" zetten te doen: je kijkt voor ieder vakje bij welke van de negen cijfers er nog kunnen staan, en als een cijfer dan nog maar bij een vakje in een groep van negen mogelijk is, vul je hem meteen in. Definieer de "moeilijkheidsgraad" van een sudoku puzzel als het aantal "niet-flauwe" zetten dat er nodig is om hem in te vullen. Maak een programma die de moeilijkheidsgraad van een puzzel bepaalt.
Link: sudoku op wikipedia
Dit is vooral een programmeeropdracht.
Rekenen met getallen die "te groot" zijn
Maak een programma om "bignum" aritmetiek mee te doen: rekenen met getallen met zoveel cijfers dat ze niet in een "integer" passen. Representeer dit soort "grote" getallen door een array van "gewone" integers. Maak routines om dit soort grote getallen te lezen, te schrijven, op te tellen, te vermenigvuldigen. Hoeveel stappen kost het je programma om twee getallen met n cijfers te vermenigvuldigen? Kun je dit ook in minder dan "orde n kwadraat" stappen voor elkaar krijgen?
Een interessante -- want snelle -- vermenigvuldigmethode voor "grote getallen" is van Karatsuba. Voor een informele uitleg van "Karatsuba", zie http://www.cs.ru.nl/~bolke/Poster.html.
Link: "bignum" op wikipedia
Dit is een combinatie van een programmeeropdracht met een kleine literatuurstudie naar algoritmen voor efficient vermenigvuldigen.
Onderzoek de "edit-afstand" van strings
Dit is technologie die bijv. wordt gebruikt om DNA sequenties te vergelijken.
In een editor kun je een string editten door een teken weg te halen, een teken te veranderen, of een teken toe te voegen. Maak een programma dat het minimale aantal van dit soort operaties telt om van een string naar een andere te komen. Beargumenteer waarom je programma de minimale oplossing vindt. Laat je programma de edit operaties compact weergeven.
Link: "edit distance" op wikipedia
Dit is een programmeeropdracht met een sterk algoritmische component.
Doe een onderzoekje naar kleurperceptie
Maak software waarmee je een proefpersoon kan testen op hoe hij kleuren relateert:
- welke van twee kleuren donkerder is dan de andere,
- welke van twee kleuren er dichter zit bij een gegeven kleur,
- welke van een gegeven kleurnaam het best past bij een gegeven kleur.
Probeer formules te vinden die de uitkomsten van wat er uit dit soort testjes komt voorspellen. Vergelijk je formules met bestaande formules, zoals die van de Lab kleurenstandaard.
Link: kleuren theorie op wikipedia, Lab kleurenafstand op wikipedia.
Dit is een combinatie van een programmeeropdracht, het wiskundig modelleren van data, en het bestuderen van literatuur (te zoeken via het web, waarschijnlijk.)
Klokrekenen en het discrete log - cryptosysteem implementeren
We bestuderen ten eerste modulorekenen en enkele stellingen (kleine stelling van Fermat, primitieve elementen).
Ten tweede, de principes van public key cryptosystemen.
We implementeren het discrete-log cryptosysteem en het El-Gamal protocol en sturen daarmee (gesimuleerd)
een boodschap over.
Er komt een projectverslag.
Startinformatie bv. op http://www.iusmentis.com/technologie/encryptie/
Autoriteit verdelen via drempelschema's
Te bestuderen onderwerpen : modulo rekenen;
trekken van vloeiende curven door een aantal punten (interpolatie);
Shamirs drempelschema-systeem.
Erg goede scholieren zouden nog verder kunnen met de "robuustheid" van dit laatste systeem.
Er komt een projectverslag.
Startinformatie bv. op http://www.cs.ru.nl/~bolke/crypto.ps
Teksten "inpakken"
Hoe comprimeer ik bestanden tot minder dan de halve grootte?
We implementeren de Huffman-methode en eventueel een eenvoudige verrsie
van Ziv-Lempel. We proberen uit hoe goed deze methoden werken.
Er komt een projectverslag.
Startinformatie bv. op http://nl.wikipedia.org/wiki/Huffmancodering
Planetaria, tandwielstelsels vereenvoudigen, en kettingbreuken.
Planetaria waren enkele eeuwen geleden een soort computers die de loop van de planeten konden simuleren. Ze werkten met tandwielen.
Die mochten niet teveel tandjes hebben, en de vraag was hoe de ingewikkelde verhoudingen tussen de omlooptijden van de
planeten toch nauwkeurig te realiseren. Christiaan Huygens vond de beste manier : zogenaamde kettingbreuken.
De scholieren bestuderen de geschiedenis van planetaria, de eenvoudigste theorie van kettingbreuken, en enkele interessante eigenschappen
en toepassingen daarvan.
Mogelijke uitbreiding: een programmaatje dat "het optimale planetarium bij gegeven precisie" berekent.
Er komt een projectverslag.
Startinformatie bv. op:
http://www.museumboerhaave.nl/collectie/voorwerpen/planetarium.html
http://www.novaplein.nl/vavo/wiskunde/kettingbreuken.pdf
http://wwwhome.math.utwente.nl/~kerstenphm/klok/klokken.pdf
Fibonaccigetallen en hun snelle berekening
We bestuderen tweetermsrecursies waaronder die der Fibonaccigetallen en de rij van Lucas..
We zoeken in de literatuur en het internet leuke eigenschappen en plaatsen waar deze getallen voorkomen in de Informatica
en de cryptografie..
Er bestaat een snelle manier om Fibonaccigetallen e.d. uit te rekenen met een "verdeel-en-heers"-methode.
In het projectverslag wordt deze uitgelegd en vooral aandacht besteed aan wat je eigenlijk onder "snel" moet verstaan.
Startinformatie bv. op:
http://nl.wikipedia.org/wiki/Rij_van_Fibonacci
http://nl.wikipedia.org/wiki/Rij_van_Lucas
Zoek ook onder "Mersenne".
Hexadecimaal rekenen en het getal "Pi"
Sinds enige jaren is bekend dat je de honderdmiljardste hexadecimaal van Pi "snel" kunt uitrekenen zonder
de 99999999999 voorgaande te bepalen.
Om "vele" decimalen van Pi te vinden moet je helaas in volle precisie werken...
Moderne algorithmen om dit te doen zien er eenvoudig uit, maar zijn meestal moeilijk te vinden.
Een oude manier om Pi te berekenen is via het gooien van een naald op een bord met lijntjes (de Bouffon).
Doel is, een verslag te schrijven over manieren om Pi te berekenen, met aandacht voor rekensnelheid
en geheugengebruik, en een implementatie te maken van een van deze algorithmen,
bijvoorbeeld die van de Bouffon.
Startinformatie bv. op:
http://www.escape.com/~paulg53/math/pi/links.html
http://www.nersc.gov/~dhb/
http://www.cecm.sfu.ca/~pborwein/
http://pi2.cc.u-tokyo.ac.jp/index.html
Hopfield Netwerk
Je hersenen bestaan uit heel veel neuronen (tussen de 10 en 1000 miljard) die onderling met elkaar verbonden zijn. Op de een of andere manier kan die grijze smurrie daardoor heel veel dingen doen waartoe een computer (nog) niet in staat is. Om een computer dit wel te kunnen laten doen kun je proberen om een computer de werking van het brein te laten simuleren m.b.v. een software programma. Dit wordt een kunstmatig neuraal netwerk genoemd.
Een van de eenvoudigste neurale netwerken is het zogenaamde Hopfield netwerk. Neuronen in dit netwerk kunnen in 2 toestanden zijn: aan of uit. Het Hopfield netwerk werkt als een soort geheugen. Door de sterkte van de verbindingen tussen neuronen te leren, kun je plaatjes opslaan. Wanneer je dan een onnauwkeurig beeld aanbiedt, slaagt het netwerk erin het sterkst gelijkende opgeslagen plaatje te terug te vinden.
Het Hopfield netwerk is zeker niet de meest efficiente manier om plaatjes op te slaan, maar heeft wel een aantal interessante eigenschappen die overeenkomen met de manier waarop je hersenen ook werken. Bijvoorbeeld, wanneer een groot aantal van de verbindingen worden "weggesneden" blijft het netwerk nog steeds goed functioneren.
Opdracht:
- Bestudeer de wiskunde achter het Hopfield netwerk (zie bijvoorbeeld wikipedia als startpunt).
- Schrijf een computerprogramma dat een Hopfield netwerk simuleert.
- Laat zien dat het Hopfield netwerk inderdaad plaatjes op kan slaan en kan reconstrueren.
- Onderzoek in hoeverre het Hopfield netwerk goed blijft functioneren als verbindingen kapot gaan of neuronen fouten maken.
Pagina’s in categorie "Profielwerkstukken"
Deze categorie bevat de volgende pagina.