{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "568bde50",
   "metadata": {},
   "source": [
    "# Innlevering 2 &mdash; Logistisk differensligning\n",
    "\n",
    "**TMA4400 Matematikk 1: Kalkulus og lineær algebra**\n",
    "\n",
    "Innleveringsfrist: **03. oktober 2025, klokka 16.00**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ac87d8fd",
   "metadata": {},
   "source": [
    "---\n",
    "\n",
    "_Du **skal** levere besvarelsen din som en pdf-fil. Der skal du også legge ved all kode du eventuelt bruker._ \n",
    "\n",
    "_Du kan ta utgangspunkt i denne Jupyter notebook-en, endre den, lagre den som pdf, og levere den inn._\n",
    "\n",
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c84ef29d",
   "metadata": {},
   "source": [
    "En likning på formen \n",
    "$$\n",
    "u_{n+1} = u_n + f(u_n)\n",
    "$$\n",
    "er et eksempel på en rekursjon. \n",
    "Funksjonen $f$ gir endringen fra $u_n$ til $u_{n+1}$,\n",
    "og i denne øvingen skal vi studere følger $\\{u_n\\}_{n=0}^\\infty$ gitt ved en startverdi $u_0$ og en rekursjon.\n",
    "I en typisk biologibok vil forfatteren bruke bakterievekst som motiverende eksempel -\n",
    "en gjennomsnittlig E. Coli-bakterie deler seg omtrent hvert tjuende minutt ved kroppstemperatur, \n",
    "så om $u_n$ er E. Coli-bestanden ved ett tidspunkt, \n",
    "er $u_{n+1}$ bestanden tjue minutter senere.\n",
    "Se [her](https://www.youtube.com/watch?v=gEwzDydciWc) for en illustrasjon.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42fd2f4a",
   "metadata": {},
   "source": [
    "1. Hva blir $f$ dersom $u_{n+1}$ skal være dobbelt så stor som $u_n$?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62c60e5d",
   "metadata": {},
   "source": [
    "\n",
    "Nå deler ikke bakterier seg på sekundet hvert tjuende minutt,\n",
    "så en bedre modell er å sette $f(u)=r u$, \n",
    "slik at \n",
    "$$\n",
    "u_{n+1} = (1+r)u_n\n",
    "$$\n",
    "og så kan man bestemme vekstraten $r$ empirisk under forskjellige kontrollerte forhold - \n",
    "temperatur og mattilgang og så videre.\n",
    "I TMA4400 har vi ikke tilgang på lab, \n",
    "så vi får fikle litt med python istedet.  \n",
    "Under er finner du pythonkode for å plotte $(n,u_n)$ der $n\\in\\{0,1,2,\\ldots\\}$ gitt $u_0$ og $r$. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a8aa4e4",
   "metadata": {},
   "source": [
    "2. Sett $u_0=1$ og plott følgen for $=-1/2$, $r=0$ og $r=1/2$. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7f9716e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "def beregn_folge(\n",
    "        r,      # vekstfaktor\n",
    "        u0,     # startverdi\n",
    "        nmax    # antall iterasjoner\n",
    "    ):    \n",
    "\n",
    "    u = np.zeros(nmax+1) \n",
    "    u[0] = u0 \n",
    "    for i in range(0, nmax):\n",
    "        u[i+1] = u[i]+r*u[i]\n",
    "    return u\n",
    "\n",
    "\n",
    "def plott_folge(u):\n",
    "\n",
    "    naturlige_tall = np.arange(0.0, len(u), 1) \n",
    "    newparams = {'figure.figsize': (8.0, 4.0), 'axes.grid': True,\n",
    "                'lines.markersize': 8, 'lines.linewidth': 2,\n",
    "                'font.size': 14}\n",
    "    plt.rcParams.update(newparams)\n",
    "    plt.xlim([0,len(u)])\n",
    "    plt.ylim([0,1.1])\n",
    "    plt.plot(naturlige_tall, u, 'bo') \n",
    "\n",
    "\n",
    "u = beregn_folge(r=1, u0=.25, nmax=10)\n",
    "plott_folge(u)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "96167cc4",
   "metadata": {},
   "source": [
    "Thomas Malthus påpekte i [\"An Essay on the Principle of Population\"](https://en.wikipedia.org/wiki/An_Essay_on_the_Principle_of_Population)\n",
    "at organismer har en lei tendens til å formere seg eksponensielt fra generasjon til generasjon,\n",
    "og siden matproduksjonskapasiteten i et typisk jordbrukssamfunn ikke øker eksponensielt over tid, \n",
    "mente han at Homo Sapiens var dømt til gjentagende sultkatastrofer. \n",
    "Dette essayet var viktig for Charles Darwin når han formulerte evolusjonsteorien i 1859 -\n",
    "eksponensiell vekst kalles ofte [malthusisk vekst](https://en.wikipedia.org/wiki/Malthusian_growth_model) i biologi. \n",
    "Men som David Attenborough pleier å si (sitatets opprinnelse er uklar):\n",
    "\n",
    "\"Anyone who thinks that you can have infinite growth in a finite environment is either a madman or an economist.\"\n",
    "\n",
    "Dersom en organisme ikke kan formere seg ubegrenset, \n",
    "for eksempel når en bakteriekultur dyrkes i enn lukket beholder,\n",
    "er det bedre å bytte ut $r$ med en funksjon som synker med økende bestand.\n",
    "Den enkleste modellen som gjør dette er \n",
    "[den diskrete logistiske likningen](https://en.wikipedia.org/wiki/Logistic_function)\n",
    "$$u_{n+1}=u_n+r(K-u_n)u_n$$ \n",
    "der vekstfaktoren $r$, bærekapasiteten $K$ og startverdien $u_0$ er gitt."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9730680",
   "metadata": {},
   "source": [
    "3. Modifiser koden over til å plotte følgen gitt av den logistiske rekursjonen. La $r=1/2$ og $K=1$ og plot $(n,u_n)$ der $n\\in\\{0,1,2,\\ldots\\}$ for initialverdiene $u_0=0,1/4,1/2,3/4,1$. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "043c7a44",
   "metadata": {},
   "source": [
    "4. Gjenta eksperimentet for andre verdier av $r$ og K$ og\n",
    "forklar hvorfor $r$ kalles vekstraten og $K$ bærekapasiteten. "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f295011",
   "metadata": {},
   "source": [
    "5. La $0\\lt r \\lt 1$, $K=1$ og $0\\lt u_0 \\lt 1$.\n",
    "Vis ved induksjon at $0 \\lt u_n \\lt 1$ og at\n",
    "$u_{n+1}> u_n$ for alle $n\\in\\{0,1,\\ldots\\}$. \n",
    "Regn ut $\\lim_{n\\to\\infty}u_n.$\n",
    "Hint: Grensa $u$ må tilfredsstille $0=ru(1-u)$."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc68da23",
   "metadata": {},
   "source": [
    "Gode matematiske modeller fungerer slik at de spår korrekt oppførsel for det de modellerer dersom parametrene er satt riktig,\n",
    "men for noen parametre kan oppførselen til modellen fremstå som uforutsigbar selv om den strengt tatt ikke er det. \n",
    "Dette kalles [kaos](https://en.wikipedia.org/wiki/Chaos_theory), \n",
    "og ble oppdaget på 60-tallet av Edward Lorenz. \n",
    "Han brukte en [LPG-30](https://en.wikipedia.org/wiki/LGP-30) til å\n",
    "eksperimentere med enkle [værmodeller](https://en.wikipedia.org/wiki/Edward_Norton_Lorenz#Numerical_weather_prediction),\n",
    "og oppdaget at dersom han startet to modellkjøringer \n",
    "med bittesmå forskjeller i initialverdiene,\n",
    "ble langtidsværmeldingene helt forskjellige. \n",
    "\n",
    "![alt text](kaos.jpg \"Title\")\n",
    "\n",
    "(Kilde: [James Gleick: Chaos](https://en.wikipedia.org/wiki/Chaos:_Making_a_New_Science) )\n",
    "\n",
    "Dette er et ganske vanlig fenomen i fysikk,\n",
    "og stikkordet er sensitivitet med hensyn på initialbetingelser.\n",
    "I oppgave 3 ser man tydelig at små forskjeller i initialverdiene stort sett gir samme langtidsoppførsel,\n",
    "men den logistiske rekursjonen viser kaotisk oppførsel for noen valg av $r$ og $K$. \n",
    "La oss sette $r=4$ og $K=3/4$.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68f022f2",
   "metadata": {},
   "source": [
    "\n",
    "6. Plot $(n,u_n)$ for $u_0=0.100$ og $u_0=0.101$ i samme figur."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "599a3934",
   "metadata": {},
   "source": [
    "7. Vis at $u_n=\\sin^2(2^n)$ løser den logistiske likningen dersom $u_0=\\sin^2(1)$. Konvergerer $u_n$?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1fd8efbe",
   "metadata": {},
   "source": [
    "8. Hva skjer om $u_0=\\frac{5-\\sqrt{5}}{8}$?\n",
    "(Hint: Regn ut $u_1$, $u_2$ og $u_3$.)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
