• No results found

Programmeren en Wetenschappelijk Rekenen in Python Wi1205AE I.A.M. Goddijn, Faculteit EWI 15 mei 2014

N/A
N/A
Protected

Academic year: 2021

Share "Programmeren en Wetenschappelijk Rekenen in Python Wi1205AE I.A.M. Goddijn, Faculteit EWI 15 mei 2014"

Copied!
20
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Programmeren en Wetenschappelijk Rekenen in Python

Wi1205AE I.A.M. Goddijn, Faculteit EWI

15 mei 2014

(2)

Bijeenkomst 8

Onderwerpen

Het sneller maken van een programma

Het gebruik van tijd, gebeurtenissen (muisklik,indrukken toets van het toetsenbord) in een loop

Informatie over de competitie

(3)

Het vectoriseren van code

Vectoriseren betekent dat (wiskundige) operaties worden toegepast op een volledig array en niet met behulp van een for-loop op de elementen daarvan.

Dit kan omdat alle elementen van een array van hetzelfde type zijn, in een lijst hoeft dat niet het geval te zijn.

De snelheidswinst kan enorm zijn.

I.A.M. Goddijn Faculteit EWI

15 mei 2014 2

(4)

Voorbeeld

Gegeven zijn n massa’s ([kg ]) die bewegen in een plat vlak met een daarop werkende bekende kracht (zwaartekracht) ([N]) De massa’s zijn opgeslagen in een array m ([kg ]), de posities in de arrays x en y ([m]), de snelheden in de arrays vx , vy ([m/s], de versnellingen in de arrays ax en ay ([m/s2]) en de bekende krachten in arrays Fx en Fy

Stel dat de posities, snelheden en versnellingen op een zeker tijdstip bekend zijn. Dan vinden we posities, snelheden en versnellingen van de massa’s na een tijdstap dt als volgt:

(5)

for i in range ( 0, n ):

x [i ]

|{z}

nieuw

= x [i ]

|{z}

oud

+ vx [i ]

| {z }

oud

dt y [i ]

|{z}

nieuw

= y [i ]

|{z}

oud

+ vy [i ]

| {z }

oud

dt

vx [i ]

| {z }

nieuw

= vx [i ]

| {z }

oud

+ ax [i ]

| {z }

oud

dt

vy [i ]

| {z }

nieuw

= vy [i ]

| {z }

oud

+ ay [i ]

| {z }

oud

dt

I.A.M. Goddijn Faculteit EWI

15 mei 2014 4

(6)

Fx [i ]

| {z }

nieuw

en Fy [i ]

| {z }

nieuw

worden bepaald

(zij hangen bijvoorbeeld af van vx [i ] en vy [i ]).

ax [i ]

| {z }

nieuw

= Fx [i ]

| {z }

nieuw

m[i ]

ay [i ]

| {z }

nieuw

= Fy [i ]

| {z }

nieuw

m[i ]

(7)

En nu gevectoriseerd:

x

|{z}

nieuw

= x

|{z}

oud

+ vx

|{z}

oud

dt y

|{z}

nieuw

= y

|{z}

oud

+ vy

|{z}

oud

dt vx

|{z}

nieuw

= vx

|{z}

oud

+ ax

|{z}

oud

dt vy

|{z}

nieuw

= vy

|{z}

oud

+ ay

|{z}

oud

dt

I.A.M. Goddijn Faculteit EWI

15 mei 2014 6

(8)

Fx

|{z}

nieuw

en Fy

|{z}

nieuw

worden bepaald

(zij hangen bijvoorbeeld af van vx en vy ).

ax

|{z}

nieuw

= Fx

|{z}

nieuw

m

ay

|{z}

nieuw

= Fy

|{z}

nieuw

m

(9)

Voorbeelden

vb-1.xhtml: arrays, eenvoudige operaties die werken op arrays

vb-2.xhtml: arrays en reshape, astype, where en select vb-3.xhtml: arrays en het gebruik van een voorwaarde als index

vb-4.xhtml: arrays en Project Euler, probleem 1

I.A.M. Goddijn Faculteit EWI

15 mei 2014 8

(10)

Waarheidstabel

p q p ∨ q p ∧ q

True True True True True False True False False True True False False False False False

p ∨ q betekent p of q en p ∧ q betekent p en q.

Past Numpy dit toe op alle elementen van een vector dan worden respectievelijk + en ∗ gebruikt.

(11)

Over spelen gesproken...

Typische loop in een spel

running = True while running

. . . .

if (er een gebeurtenis plaats vindt, bijv. een klik op de ESC-toets)

running =False

I.A.M. Goddijn Faculteit EWI

15 mei 2014 10

(12)

Quit de loop

keys = pg.keys.get pressed() if keys[pg.K ESCAPE]:

running =False for event in pg.event.get( ):

if event.type = pg. QUIT:

running =False if dead:

running =False

(13)

Tijd

Plaats vlak voordat de loop wordt ingegegaan de opdracht:

t = 0.001*pg.time.get ticks( ) t0 = t

en vervolgens in de loop:

t = 0.001*pg.time.get ticks( ) dt = t − t0

t0 = t

I.A.M. Goddijn Faculteit EWI

15 mei 2014 12

(14)

Huishouden

Wanneer een nieuw scherm (met inhoud) is gemaakt gebruik dan de opdracht:

pg.display.flip( )

en aan het einde van de loop (of het begin):

pg.event.pump( )

anders kan je programma gaan ‘hangen’.

En vergeet niet de schermfunctie blit te gebruiken wanneer plaatjes geladen moeten worden.

(15)

Spyder IDE (Integrated Development Engine) of Spyder

Bij het maken van grotere programma’s kan het gebruik van een andere ontwikkelomgeving zoals Spyder of Pycharm, handig zijn.

Voor kleine programma’s, zoals die voor ‘Project Euler’ is IDLE prima.

I.A.M. Goddijn Faculteit EWI

15 mei 2014 14

(16)

Opgave: Asteoriden

Maak je eigen spel: Asteoriden!

Laat het schip onder in het scherm starten Voeg controle toe over de bewegingen (door gebruik te maken van de pijltjestoetsen)

Vermijd het vallen van de asteoriden vanuit de top

Plaatjes zijn te vinden op Blackboard

(17)

Opgave: Probeer ‘Project Euler’, probleem 87 op te lossen

Hoeveel natuurlijke getallen kleiner dan 50 miljoen kunnen worden geschreven als de som van het kwadraat van een priemgetal, de derde macht van een priemgetal en de vierde macht van een priemgetal bijv:

28 = 22+ 23+ 34 33 = 32+ 23+ 24 49 = 52+ 23+ 24 47 = 22+ 33+ 24

Deze opgave kan ook niet gevectoriseerd gemaakt worden.

Ga verder met andere opgaven uit ‘Project Euler’

I.A.M. Goddijn Faculteit EWI

15 mei 2014 16

(18)

Hints

Bepaal eerst de priemgetallen tot 50 miljoen Bepaal alle mogelijke sommen

Bepaal de totalen

Verwijder dubbele totalen met de set( ) functie en bepaal dan het aantal elementen van de verzameling.

(19)

AE2105

Programming Competition

Using multiple files and programming style

(20)

Competitie regels

Een inzending die voldoende origineel is en van voldoende niveau is wordt beloond met een halve bonuspunt.

Er kan alleen worden gewerkt of met een team bestaand uit maximaal twee personen.

Er vallen per groep twee prijzen te verdienen (dus 4 × 2 = 8 prijzen)

Inzendingen worden via Blackboard met elkaar gedeeld.

De ‘run time’ en de code zijn van belang (gebruik meerdere bestanden).

Referenties

GERELATEERDE DOCUMENTEN

De stroom die gemeten wordt tussen het aluminiumfolie en aarde kan dus niet veroorzaakt worden door elektronen die door het glas gaan. In figuur 6 is een spoor tussen de elektrode

Daarvoor worden de ionen door een elektrische spanning vanuit stilstand op een snelheid van 16·10 3 m/s gebracht. Met die snelheid vliegen ze de

Zuwe Zorg Regio de Ronde Venen e.o. Zuwe Zorg Preventie & Welzijn Zuwe Zorg Preventie & Welzijn

een lijst begint en eindigt met een rechte haak, de elementen van de lijst worden gescheiden door een

Is bijvoorbeeld een functie sumabs gemaakt, die is opgeslagen in het bestand sumabs.py importeer dit dan met de opdracht:..

Om het resultaat van een tekening of een plaatje vanuit het geheugen naar het scherm te kopi¨ eren wordt de functie flip bij de module display gebruikt. # Plaatje is klaar, laat zien

De melding “Runtime Error” zegt dus dat er iets fout is gelopen tijdens het werken van het programma...

De methode van Newton-Raphson Het benaderen van een bepaalde integraal. De methode van Euler