Dat kan ik beamen. Het enige verschil tussen wiskunde en informatica in mijn tijd (in '93 begonnen) was dat de informatici nog veel slechter waren in mechanica dan de wiskundigen. Ik heb mijn dosis ouderwetsche programmeertalen toen wel gehad (pascal, pdp11, fortran). Tegenwoordig alleen nog bezig met (PL-)SQL, python en php/html/css/js.
Oh, dat is wel verrassend. Ik zat nog te denken of een sparse matrix-aanpak de boel nog versnelt, aangezien de matrix vrij simpel van vorm is. Dat zal de orde-performance niet veranderen neem ik aan.
spoiler:Even afgezien van de condensatie om het aantal regels te minimaliseren, komt het neer op de matrix-notatie van de recursieve functies. Bij elke tijdstap geldt:
vis(bevalt over 0 dagen,tijdstip t+1)=vis(bevalt over 1 dag ,tijdstip t)
vis(bevalt over 1 dag ,tijdstip t+1)=vis(bevalt over 2 dagen,tijdstip t)
vis(bevalt over 2 dagen,tijdstip t+1)=vis(bevalt over 3 dagen,tijdstip t)
vis(bevalt over 3 dagen,tijdstip t+1)=vis(bevalt over 4 dagen,tijdstip t)
vis(bevalt over 4 dagen,tijdstip t+1)=vis(bevalt over 5 dagen,tijdstip t)
vis(bevalt over 5 dagen,tijdstip t+1)=vis(bevalt over 6 dagen,tijdstip t)
vis(bevalt over 6 dagen,tijdstip t+1)=vis(bevalt over 7 dagen,tijdstip t)+vis(bevalt over 0 dagen,tijdstip t)
vis(bevalt over 7 dagen,tijdstip t+1)=vis(bevalt over 8 dage,tijdstip tn)
vis(bevalt over 8 dagen,tijdstip t+1)=vis(bevalt over 0 dagen,tijdstip t)
In matrix vorm wordt dit:
vissen(tijdstap t+1)= [
[0,1,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0],
[0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,1,0,0,0],
[0,0,0,0,0,0,1,0,0],
[1,0,0,0,0,0,0,1,0],
[0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0]
]*vissen(tijdstap t)
waarbij vissen een vector is ter grootte 9 met alle stadia van zwangerschap.
Als je dit herhaaldelijk toepast, krijg je een matrixvermenigvuldiging (np.linalg.matrix_power operatie)
tenslotte laat je deze matrix los op de begin-vector van vissen (.dot operatie)