From ad96023477e98963a37442dca9e2de37dbde1577 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 25 Aug 2020 16:54:42 +0200 Subject: [PATCH] Altri progressi --- .../CalcoloNumerico/03_Interpolazione.js | 19 ++- .../04_InterpolazioneATratti.js | 137 ++++++++++++++++++ .../04_InterpolazioneATratti.less | 0 src/routes/CalcoloNumerico/index.js | 6 +- 4 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 src/routes/CalcoloNumerico/04_InterpolazioneATratti.js create mode 100644 src/routes/CalcoloNumerico/04_InterpolazioneATratti.less diff --git a/src/routes/CalcoloNumerico/03_Interpolazione.js b/src/routes/CalcoloNumerico/03_Interpolazione.js index ba2b1ef..3fca8aa 100644 --- a/src/routes/CalcoloNumerico/03_Interpolazione.js +++ b/src/routes/CalcoloNumerico/03_Interpolazione.js @@ -166,12 +166,14 @@ export default function (props) {
  • Il grado del polinomio di interpolazione
  • + +

    - Fenomeno che si verifica cercando di interpolare la funzione di Runge ({r`\frac{1}{1 + 25x^2}`}). + Fenomeno che si verifica cercando di interpolare la funzione di Runge ({r`\frac{1}{1 + 25x^2}`}).

    - Scegliendo nodi equispaziati, l'errore di interpolazione sarà ENORME vicino ai due estremi dell'intervallo. + Scegliendo nodi equispaziati, l'errore di interpolazione sarà enorme vicino ai due estremi dell'intervallo.

    Addirittura, più nodi verranno scelti, più esso sarà alto! @@ -182,15 +184,20 @@ export default function (props) {

    - La scelta ottimale dei punti di interpolazione. -

    -

    - Consiste nel partizionare una semicirconferenza, e proiettare le partizioni sul diametro. + Nodi ottenuti partizionando una semicirconferenza, e proiettando le partizioni sul diametro.

    La formula usata per ottenere {r`n`} punti è:

    {r`x_i = \cos \left( \frac{ (2 \cdot i + 1) \cdot \pi }{ 2 \cdot (n+1) } \right)`} +

    + Proprietà di min-max: sono la scelta ottimale dei punti di interpolazione. +

    + {r`\omega_n(\star) = \max_{x \in [a, b]} \left| \omega_n(x) \right|`} +

    + In particolare, si ha che: +

    + {r`\omega_n(\star) = 2 \left( \frac{b-a}{4} \right)^{n+1}`}
    diff --git a/src/routes/CalcoloNumerico/04_InterpolazioneATratti.js b/src/routes/CalcoloNumerico/04_InterpolazioneATratti.js new file mode 100644 index 0000000..33992ec --- /dev/null +++ b/src/routes/CalcoloNumerico/04_InterpolazioneATratti.js @@ -0,0 +1,137 @@ +import style from "./04_InterpolazioneATratti.less"; +import {Fragment} from "preact"; +import {Section, Panel, ILatex, BLatex, PLatex} from "bluelib"; +import Example from "../../components/Example"; + +const r = String.raw; + + +export default function (props) { + return ( + +
    + +

    + Invece che costruire una singola funzione che interpola tutti i punti, per ogni intervallo tra due punti (sottointervallo) si costruisce una funzione apposta. +

    +
    +
    +
    + +

    + Interpolanti che: +

    +
      +
    • sono polinomiali di grado massimo {r`n`}
    • +
    • sono continue fino al grado {r`n - 1`}
    • +
    • connettono {r`m + 2`} punti, e hanno {r`m`} sottointervalli
    • +
    • hanno funzioni definite appositamente per ogni sottointervallo
    • +
    + +

    + Significa che agli estremi dell'intervallo, i valori di tutte le derivate fino al grado {r`n - 1`} devono essere uguali: +

    + {r`\forall \ k \leq n-1, \forall \ i \in \{intervalli\}, \quad s_i^{(k)} (x_{i+1}) = s_i^{(k)} (x_{i+1})`} +
    +

    + Hanno {r`n + m + 1`} gradi di libertà. +

    + + Esistono infinite spline di grado {r`n \geq 2`}! + +
    +
    +
    + + + Sono anche dette interpolanti lineari a tratti. + +

    + Per ogni sottointervallo, costruiamo una funzione lineare passante per i due estremi: +

    + {r`s_i(x) = y_i + \frac{ y_{i + 1} - y_i }{ x_{i + 1} - x_i } \cdot (x - x_i)`} + + È una linea spezzata! + +

    + Il loro errore è: +

    + {r`\| R \|_\infty = \| f - s \|_\infty \leq \frac{1}{8} \cdot \max_{y \in [a, b]} \left| f''(y) \right| \cdot \left( \max_{i \in \{intervalli\}} (x_{i+1} - x_{i}) \right)^2`} +

    + Ha come vantaggi complessità computazionale molto più bassa e l'assenza del fenomeno di Runge, ma allo stesso tempo si perde la derivabilità della funzione. +

    +

    + Non hanno gradi di libertà. +

    +
    + +

    + Spline con {r`n = 3`}, che soddisfano le seguenti uguaglianze: +

    + {r` + \forall \ i \in \{0,\ \dots\ ,\ m - 1\},\ + \begin{cases} + s_i (x_{i+1}) = s_{i+1} (x_{i+1})\\\\ + s'_i (x_{i+1}) = s'_{i+1} (x_{i+1})\\\\ + s''_i (x_{i+1}) = s''_{i+1} (x_{i+1}) + \end{cases} + `} + {r` + \forall \ i \in \{0,\ \dots\ ,\ m + 1\},\ + \begin{cases} + s_i(x_i) = y_i + \end{cases} + `} +

    + Esse hanno la seguente equazione: +

    + {r`s_i(x) = \alpha_i + \beta_i \ ( x - x_i ) + \gamma_i \ ( x - x_i )^2 + \delta_i \ ( x - x_i )^3`} +
    +
    +
    + +

    + Classe di spline cubiche in cui: +

    +
      +
    • {r`s''(x_0) = s''(x_{m+1}) = 0`}
    • +
    +

    + È unica. +

    +
    + +

    + Classe di spline cubiche in cui: +

    +
      +
    • {r`s(x) = s(m+1)`}
    • +
    • {r`s'(x) = s'(m+1)`}
    • +
    • {r`s''(x) = s''(m+1)`}
    • +
    +

    + È unica. +

    +
    + +

    + Classe di spline cubiche in cui: +

    +
      +
    • Negli intervalli {r`[x_0, x_2]`} e {r`[x_{m-1}, x_{m+1}]`} si presenta obbligatoriamente un polinomio di grado 3.
    • +
    +

    + È unica. +

    +
    +
    +
    + +

    + Se +

    +
    +
    +
    + ) +} diff --git a/src/routes/CalcoloNumerico/04_InterpolazioneATratti.less b/src/routes/CalcoloNumerico/04_InterpolazioneATratti.less new file mode 100644 index 0000000..e69de29 diff --git a/src/routes/CalcoloNumerico/index.js b/src/routes/CalcoloNumerico/index.js index 41816d2..a23137e 100644 --- a/src/routes/CalcoloNumerico/index.js +++ b/src/routes/CalcoloNumerico/index.js @@ -1,11 +1,8 @@ -import {ILatex, Panel, PLatex, Section, Timer, Todo} from "bluelib"; -import Example from "../../components/Example"; -import Link from "../../components/Link"; -import MenuList from "../../components/MenuList"; import Intro from "./00_Intro"; import SistemiLineari from "./01_SistemiLineari"; import ZeriDiFunzione from "./02_ZeriDiFunzione"; import Interpolazione from "./03_Interpolazione"; +import InterpolazioneATratti from "./04_InterpolazioneATratti"; const r = String.raw; @@ -18,6 +15,7 @@ export default function (props) { + ) }