1
Fork 0
mirror of https://github.com/Steffo99/unisteffo.git synced 2024-11-26 01:44:20 +00:00

Fix some more stuff

This commit is contained in:
Steffo 2020-09-02 17:13:18 +02:00
parent 28922b1a3c
commit f8ded5004c
14 changed files with 248 additions and 135 deletions

View file

@ -642,10 +642,6 @@ export default function (props) {
Se è valida questa proprietà, si può dimostrare che l'<b>energia del sistema è sempre
decrescente</b>, e che quindi che tenderà a un punto fisso!
</p>
<p>
<Todo>TODO: Dopo il prof dimostra la relazione tra input netto e overlap, e che il sistema
converge al pattern più simile.</Todo>
</p>
</Panel>
<Panel title={"Overlap di due pattern"}>
<p>

View file

@ -1,4 +1,3 @@
import style from "./00_Intro.less"
import {ILatex, Panel, PLatex, Section} from "bluelib";
import Link from "../../components/Link";
import MenuList from "../../components/MenuList";
@ -30,23 +29,29 @@ export default function () {
<Section title={"Informazioni"}>
<Panel title={"Ripasso di Algebra Lineare"}>
<p>
Prima di iniziare a studiare Calcolo Numerico, potrebbe essere una buona idea ripassare un pochino Algebra Lineare:
Prima di iniziare a studiare Calcolo Numerico, potrebbe essere una buona idea ripassare un
pochino Algebra Lineare:
</p>
<MenuList>
<li>
<a href={"/calcolonumerico/ripassodialgebralineare"}>Ripasso di Algebra Lineare</a> <small>(per studenti sperduti di Calcolo Numerico)</small>
<a href={"/calcolonumerico/ripassodialgebralineare"}>Ripasso di Algebra Lineare</a> <small>(per
studenti sperduti di Calcolo Numerico)</small>
</li>
</MenuList>
</Panel>
<Panel title={"Anki"}>
<p>
Ho provato a fare un deck <Link href={"https://apps.ankiweb.net/"}>Anki</Link> con tutte le formule di Calcolo numerico.
Ho provato a fare un deck <Link href={"https://apps.ankiweb.net/"}>Anki</Link> con tutte le
formule di Calcolo numerico.
</p>
<p>
Sappiatemi dire com'è! <small>Io non l'ho usato moltissimo perchè ho studiato scrivendo questa pagina di Appuntiweb...</small>
Sappiatemi dire com'è! <small>Io non l'ho usato moltissimo perchè ho studiato scrivendo questa
pagina di Appuntiweb...</small>
</p>
<MenuList>
<li><Link href={"https://ryg.s3.fr-par.scw.cloud/builds/anki-decks/formule-di-calcolo-numerico.apkg"}>Scarica il deck Anki</Link></li>
<li><Link
href={"https://ryg.s3.fr-par.scw.cloud/builds/anki-decks/formule-di-calcolo-numerico.apkg"}>Scarica
il deck Anki</Link></li>
</MenuList>
</Panel>
</Section>
@ -120,7 +125,8 @@ export default function () {
<Section>
<Panel title={"Precisione di macchina"}>
<p>
Un numero reale rappresentato in <b>virgola mobile</b> ha un <b>errore relativo</b> minore o uguale alla <i>precisione
Un numero reale rappresentato in <b>virgola mobile</b> ha un <b>errore relativo</b> minore o
uguale alla <i>precisione
di macchina</i>:
</p>
<p>

View file

@ -1,4 +1,3 @@
import style from "./01_SistemiLineari.less"
import {ILatex, Panel, PLatex, Section, Todo} from "bluelib";
import Link from "../../components/Link";
import Example from "../../components/Example";
@ -16,7 +15,9 @@ export default function () {
Dato un sistema di equazioni lineari, si vuole trovare la sua soluzione.
</p>
<p>
In forma matriciale, avrà una <b>matrice dei coefficienti</b> <ILatex>{r`A`}</ILatex>, un <b>vettore dei termini noti</b> <ILatex>{r`b`}</ILatex> e un <b>vettore delle incognite</b> <ILatex>{r`x`}</ILatex>.
In forma matriciale, avrà una <b>matrice dei coefficienti</b> <ILatex>{r`A`}</ILatex>, un <b>vettore
dei termini noti</b> <ILatex>{r`b`}</ILatex> e un <b>vettore delle incognite</b>
<ILatex>{r`x`}</ILatex>.
</p>
<p>
L'equazione matriciale del sistema è:
@ -39,10 +40,12 @@ export default function () {
<Section>
<Panel title={"Metodi diretti"}>
<p>
Metodi che trovano la soluzione esatta<abbr title={"Per quanto possibile nell'algebra di macchina."}>*</abbr> di un sistema lineare.
Metodi che trovano la soluzione esatta<abbr
title={"Per quanto possibile nell'algebra di macchina."}>*</abbr> di un sistema lineare.
</p>
<p>
Tipicamente prevedono la <b>fattorizzazione</b> della matrice dei coefficienti in due sottomatrici più facili da risolvere.
Tipicamente prevedono la <b>fattorizzazione</b> della matrice dei coefficienti in due
sottomatrici più facili da risolvere.
</p>
<p>
Generalmente hanno una complessità temporale <ILatex>{r`O(n^3)`}</ILatex>.
@ -50,10 +53,13 @@ export default function () {
</Panel>
<Panel title={"Metodi iterativi"}>
<p>
Metodi che trovano una soluzione imperfetta<abbr title={"Che però può essere la migliore ottenibile, considerando la precisione di macchina."}>*</abbr> di un sistema lineare.
Metodi che trovano una soluzione imperfetta<abbr
title={"Che però può essere la migliore ottenibile, considerando la precisione di macchina."}>*</abbr> di
un sistema lineare.
</p>
<p>
Tipicamente prevedono l'applicazione ripetuta di un <b>metodo</b>, in base al quale cambia la <b>velocità di convergenza</b> alla soluzione.
Tipicamente prevedono l'applicazione ripetuta di un <b>metodo</b>, in base al quale cambia
la <b>velocità di convergenza</b> alla soluzione.
</p>
<p>
Generalmente hanno una complessità temporale <ILatex>{r`O(n^2)`}</ILatex>.
@ -63,13 +69,17 @@ export default function () {
<Section title={"Metodi diretti"}>
<Panel title={"Divisione"}>
<p>
Se la matrice dei coefficienti del sistema è <b>diagonale</b>, allora è possibile trovare la soluzione <i>dividendo</i> ogni termine noto per l'unico coefficiente diverso da zero presente nella sua riga:
Se la matrice dei coefficienti del sistema è <b>diagonale</b>, allora è possibile trovare la
soluzione <i>dividendo</i> ogni termine noto per l'unico coefficiente diverso da zero presente
nella sua riga:
</p>
<PLatex>{r`x_i = \frac{b_i}{A_{ii}}`}</PLatex>
</Panel>
<Panel title={"Sostituzione"}>
<p>
Se la matrice dei coefficienti del sistema è <b>triangolare</b> inferiore o superiore, allora è possibile trovare la soluzione effettuando una <i>sostituzione</i> all'avanti oppure all'indietro:
Se la matrice dei coefficienti del sistema è <b>triangolare</b> inferiore o superiore, allora è
possibile trovare la soluzione effettuando una <i>sostituzione</i> all'avanti oppure
all'indietro:
</p>
<PLatex>{r`x_i = \frac{b_i - \sum_{k = 1}^{i - 1} (x_k \cdot A_{ik})}{A_{ii}}`}</PLatex>
<PLatex>{r`x_i = \frac{b_i - \sum_{k = i - 1}^{n} (x_k \cdot A_{ik})}{A_{ii}}`}</PLatex>
@ -78,7 +88,10 @@ export default function () {
<Section>
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex></span>}>
<p>
Se tutti i valori sulla diagonale di <ILatex>{r`A`}</ILatex> sono <b>diversi da 0 <small>(eccetto l'ultimo)</small></b> allora è possibile <i>fattorizzarla</i> in due matrici: una <ILatex>{r`L`}</ILatex> <b>triangolare inferiore</b>, e una <ILatex>{r`U`}</ILatex> <b>triangolare superiore</b>.
Se tutti i valori sulla diagonale di <ILatex>{r`A`}</ILatex> sono <b>diversi da 0 <small>(eccetto
l'ultimo)</small></b> allora è possibile <i>fattorizzarla</i> in due matrici:
una <ILatex>{r`L`}</ILatex> <b>triangolare inferiore</b>, e una <ILatex>{r`U`}</ILatex> <b>triangolare
superiore</b>.
</p>
<PLatex>{r`A = L \cdot U`}</PLatex>
<Example>
@ -109,7 +122,8 @@ export default function () {
È la parte triangolare superiore di <ILatex>{r`A`}</ILatex>!
</Example>
<p>
Il sistema può essere poi risolto applicando due volte il metodo di sostituzione (all'avanti e all'indietro):
Il sistema può essere poi risolto applicando due volte il metodo di sostituzione (all'avanti e
all'indietro):
</p>
<PLatex>{r`
\begin{cases}
@ -124,17 +138,21 @@ export default function () {
</Panel>
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex> con pivoting parziale</span>}>
<p>
È possibile applicare la fattorizzazione <ILatex>{r`LU`}</ILatex> a <b>qualsiasi matrice non-singolare</b> permettendo lo scambio (<i>pivoting</i>) delle righe, potenzialmente <b>aumentando la stabilità</b> dell'algoritmo.
È possibile applicare la fattorizzazione <ILatex>{r`LU`}</ILatex> a <b>qualsiasi matrice
non-singolare</b> permettendo lo scambio (<i>pivoting</i>) delle righe, potenzialmente <b>aumentando
la stabilità</b> dell'algoritmo.
</p>
<Example>
Abbiamo fatto questo metodo in Algebra Lineare, chiamandolo <b>metodo di Gauss-Jordan</b>!
</Example>
<p>
Alla formula precedente si aggiunge una <b>matrice di permutazione</b> che indica quali righe sono state scambiate:
Alla formula precedente si aggiunge una <b>matrice di permutazione</b> che indica quali righe
sono state scambiate:
</p>
<PLatex>{r`P \cdot A = L \cdot U`}</PLatex>
<p>
Per massimizzare la stabilità, si cerca di <b>usare come perno l'elemento più grande</b> della colonna.
Per massimizzare la stabilità, si cerca di <b>usare come perno l'elemento più grande</b> della
colonna.
</p>
<p>
Questo metodo ha costo computazionale:
@ -143,11 +161,13 @@ export default function () {
</Panel>
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex> con pivoting totale</span>}>
<p>
È possibile anche permettere il <i>pivoting</i> <b>sulle colonne</b> per <b>aumentare ulteriormente la stabilità</b> dell'algoritmo, a costo di maggiore costo computazionale:
È possibile anche permettere il <i>pivoting</i> <b>sulle colonne</b> per <b>aumentare
ulteriormente la stabilità</b> dell'algoritmo, a costo di maggiore costo computazionale:
</p>
<PLatex>{r`P \cdot A \cdot Q = L \cdot U`}</PLatex>
<p>
Per massimizzare la stabilità, si cerca di <b>ordinare in modo decrescente la diagonale</b>, assicurandoci che il primo perno sia più grande del secondo e così via.
Per massimizzare la stabilità, si cerca di <b>ordinare in modo decrescente la diagonale</b>,
assicurandoci che il primo perno sia più grande del secondo e così via.
</p>
<p>
Questo metodo ha costo computazionale:
@ -158,22 +178,28 @@ export default function () {
<Section>
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex> a banda</span>}>
<p>
Se la matrice <ILatex>{r`A`}</ILatex> è <b>a banda</b>, è possibile risparmiare spazio durante la fattorizzazione, in quanto sia <ILatex>{r`L`}</ILatex> sia <ILatex>{r`U`}</ILatex> saranno a banda!
Se la matrice <ILatex>{r`A`}</ILatex> è <b>a banda</b>, è possibile risparmiare spazio durante
la fattorizzazione, in quanto sia <ILatex>{r`L`}</ILatex> sia <ILatex>{r`U`}</ILatex> saranno a
banda!
</p>
</Panel>
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex> sparsa</span>}>
<p>
Se la matrice <ILatex>{r`A`}</ILatex> è <b>sparsa</b>, non è detto che <ILatex>{r`L`}</ILatex> e <ILatex>{r`U`}</ILatex> siano sparse a loro volta.
Se la matrice <ILatex>{r`A`}</ILatex> è <b>sparsa</b>, non è detto
che <ILatex>{r`L`}</ILatex> e <ILatex>{r`U`}</ILatex> siano sparse a loro volta.
</p>
<p>
Per evitare il <u>fill-in</u>, è necessario <b>riordinare</b> la matrice <ILatex>{r`A`}</ILatex> in modo che sia il più possibile simile a una matrice a banda. <Todo>TODO: Confermare?</Todo>
Per evitare il <u>fill-in</u>, è necessario <b>riordinare</b> la
matrice <ILatex>{r`A`}</ILatex> in modo che sia il più possibile simile a una matrice a
banda.
</p>
</Panel>
</Section>
<Section>
<Panel title={<span>Fattorizzazione <ILatex>{r`LDL^{-1}`}</ILatex></span>}>
<p>
È possibile <b>ridurre la complessità computazionale</b> della fattorizzazione <ILatex>{r`LU`}</ILatex> se la matrice dei coefficienti è <b>simmetrica</b>:
È possibile <b>ridurre la complessità computazionale</b> della
fattorizzazione <ILatex>{r`LU`}</ILatex> se la matrice dei coefficienti è <b>simmetrica</b>:
</p>
<PLatex>{r`A = L \cdot D \cdot L^{-1}`}</PLatex>
<p>
@ -215,7 +241,8 @@ export default function () {
</Panel>
<Panel title={<span>Fattorizzazione <ILatex>{r`\mathcal{L} \mathcal{L}^{-1}`}</ILatex></span>}>
<p>
È possibile dare <b>stabilità forte</b> alla fattorizzazione <ILatex>{r`LDL^{-1}`}</ILatex> se la matrice dei coefficienti è <b>simmetrica definita positiva</b>:
È possibile dare <b>stabilità forte</b> alla fattorizzazione <ILatex>{r`LDL^{-1}`}</ILatex> se
la matrice dei coefficienti è <b>simmetrica definita positiva</b>:
</p>
<PLatex>{r`A = \mathcal{L} \cdot \mathcal{L}^{-1}`}</PLatex>
<p>
@ -237,11 +264,13 @@ export default function () {
<Section>
<Panel title={"Trasformazione di Householder"}>
<p>
Matrice ricavata dalla seguente formula, dove <ILatex>{r`v`}</ILatex> è la colonna di un'altra matrice:
Matrice ricavata dalla seguente formula, dove <ILatex>{r`v`}</ILatex> è la colonna di un'altra
matrice:
</p>
<PLatex>{r`U(v) = \mathbf{I} - \frac{2 \cdot v \cdot v^T}{\| v \|_{(2)}^2}`}</PLatex>
<p>
Se moltiplicata per per la matrice da cui proviene <ILatex>{r`v`}</ILatex>, sostituirà la colonna <ILatex>{r`v`}</ILatex> con la colonna:
Se moltiplicata per per la matrice da cui proviene <ILatex>{r`v`}</ILatex>, sostituirà la
colonna <ILatex>{r`v`}</ILatex> con la colonna:
</p>
<PLatex>{r`
\begin{pmatrix}
@ -258,17 +287,23 @@ export default function () {
</Panel>
<Panel title={<span>Fattorizzazione <ILatex>{r`QR`}</ILatex></span>}>
<p>
Metodo che fornisce una <b>maggiore stabilità</b> a costo di una <b>maggiore complessità computazionale</b>.
Metodo che fornisce una <b>maggiore stabilità</b> a costo di una <b>maggiore complessità
computazionale</b>.
</p>
<p>
La matrice <ILatex>{r`A`}</ILatex> viene <i>fattorizzata</i> in due matrici, una <b>ortogonale</b> <ILatex>{r`Q`}</ILatex> e una <b>triangolare superiore</b> <ILatex>{r`R`}</ILatex>:
La matrice <ILatex>{r`A`}</ILatex> viene <i>fattorizzata</i> in due matrici,
una <b>ortogonale</b> <ILatex>{r`Q`}</ILatex> e una <b>triangolare superiore</b>
<ILatex>{r`R`}</ILatex>:
</p>
<PLatex>{r`A = Q \cdot R`}</PLatex>
<p>
Le matrici si ottengono dal <b>prodotto delle trasformazioni di Householder</b> (che concatenate formano <ILatex>{r`Q`}</ILatex>) sulla matrice <ILatex>{r`A`}</ILatex> necessarie a trasformarla in una matrice triangolare superiore (<ILatex>{r`R`}</ILatex>).
Le matrici si ottengono dal <b>prodotto delle trasformazioni di Householder</b> (che concatenate
formano <ILatex>{r`Q`}</ILatex>) sulla matrice <ILatex>{r`A`}</ILatex> necessarie a trasformarla
in una matrice triangolare superiore (<ILatex>{r`R`}</ILatex>).
</p>
<Example>
C'è un bell'esempietto <Link href={"https://web.archive.org/web/20200828003151/https://rpubs.com/aaronsc32/qr-decomposition-householder"}>qui</Link>.
C'è un bell'esempietto <Link
href={"https://web.archive.org/web/20200828003151/https://rpubs.com/aaronsc32/qr-decomposition-householder"}>qui</Link>.
</Example>
<p>
Una volta fattorizzata, il sistema si può risolvere con:
@ -301,11 +336,13 @@ export default function () {
</p>
<PLatex>{r`x = G \cdot x + c`}</PLatex>
<p>
È particolarmente utile perchè ci permette di definire un <b>algoritmo ricorsivo</b> che trovi <ILatex>{r`x`}</ILatex>:
È particolarmente utile perchè ci permette di definire un <b>algoritmo ricorsivo</b> che
trovi <ILatex>{r`x`}</ILatex>:
</p>
<PLatex>{r`x_{(i+1)} = G \cdot x_{(i)} + c`}</PLatex>
<p>
<ILatex>{r`G`}</ILatex> è il <b>metodo</b>, e in base ad esso cambiano stabilità e velocità di convergenza.
<ILatex>{r`G`}</ILatex> è il <b>metodo</b>, e in base ad esso cambiano stabilità e velocità di
convergenza.
</p>
<p>
Ponendo <ILatex>{r`A = M - N`}</ILatex>, la formula può essere scritta anche in questo modo:
@ -327,15 +364,13 @@ export default function () {
</p>
<PLatex>{r`\rho (M) < 1`}</PLatex>
<p>
(dove <ILatex>{r`\rho`}</ILatex> è il <b>raggio spettrale</b>, il massimo autovalore della matrice)
(dove <ILatex>{r`\rho`}</ILatex> è il <b>raggio spettrale</b>, il massimo autovalore della
matrice)
</p>
<p>
Perchè un metodo sia convergente, è sufficiente che:
</p>
<PLatex>{r`\| M \| < 1`}</PLatex>
<p>
<Todo>TODO: l'algoritmo con tau per le condizioni di arresto</Todo>
</p>
</Panel>
</Section>
<Section>
@ -350,10 +385,12 @@ export default function () {
\end{cases}
`}</PLatex>
<p>
<u>Spostamenti simultanei</u>: Permette di ottenere ogni componente di <ILatex>{r`x`}</ILatex> indipendentemente dagli altri: è <b>parallelizzabile</b>.
<u>Spostamenti simultanei</u>: Permette di ottenere ogni componente
di <ILatex>{r`x`}</ILatex> indipendentemente dagli altri: è <b>parallelizzabile</b>.
</p>
<p>
Se la matrice è <b>diagonale dominante</b>, allora il metodo di Jacobi <b>converge</b> sicuramente.
Se la matrice è <b>diagonale dominante</b>, allora il metodo di
Jacobi <b>converge</b> sicuramente.
</p>
</Panel>
<Panel title={"Metodo di Gauss-Seidel"}>
@ -370,10 +407,12 @@ export default function () {
Ha una velocità di convergenza <b>maggiore o uguale</b> rispetto al metodo di Jacobi.
</p>
<p>
<u>Spostamenti successivi</u>: Non è parallelizzabile, perchè ogni componente <b>dipende da quelle calcolate in precedenza</b>.
<u>Spostamenti successivi</u>: Non è parallelizzabile, perchè ogni componente <b>dipende da
quelle calcolate in precedenza</b>.
</p>
<p>
Se la matrice è <b>diagonale dominante</b>, allora il metodo di Gauss-Seidel <b>converge</b> sicuramente.
Se la matrice è <b>diagonale dominante</b>, allora il metodo di
Gauss-Seidel <b>converge</b> sicuramente.
</p>
</Panel>
</Section>

View file

@ -1,29 +1,32 @@
import style from "./02_ZeriDiFunzione.less";
import {Fragment} from "preact";
import {Section, Panel, ILatex, BLatex, PLatex, Todo} from "bluelib";
import {ILatex, Panel, PLatex, Section} from "bluelib";
import Example from "../../components/Example";
const r = String.raw;
export default function (props) {
export default function () {
return (
<Fragment>
<Section title={"Problema: Ricerca degli zeri di funzione"}>
<Panel title={"Descrizione"}>
<p>
Si vogliono trovare i punti (<i>zeri</i>) in cui una funzione <b>continua</b> <ILatex>f : [a, b] \to R</ILatex> vale <ILatex>0</ILatex>.
Si vogliono trovare i punti (<i>zeri</i>) in cui una funzione <b>continua</b> <ILatex>f : [a, b]
\to R</ILatex> vale <ILatex>0</ILatex>.
</p>
<p>
Per il <b>teorema del valore medio</b>, se <ILatex>{r`f(a) \cdot f(b) \leq 0`}</ILatex>, allora esiste sicuramente un punto in cui la funzione vale 0.
Per il <b>teorema del valore medio</b>, se <ILatex>{r`f(a) \cdot f(b) \leq 0`}</ILatex>, allora
esiste sicuramente un punto in cui la funzione vale 0.
</p>
<p>
Denominiamo il punto in cui la funzione vale <ILatex>0</ILatex> come <ILatex>{r`x_{(\star)}`}</ILatex>.
Denominiamo il punto in cui la funzione
vale <ILatex>0</ILatex> come <ILatex>{r`x_{(\star)}`}</ILatex>.
</p>
</Panel>
<Panel title={"Condizionamento"}>
<p>
Più la <b>derivata prima</b> della funzione <b>si avvicina allo 0</b>, <b>peggio</b> il problema sarà condizionato.
Più la <b>derivata prima</b> della funzione <b>si avvicina allo 0</b>, <b>peggio</b> il problema
sarà condizionato.
</p>
<PLatex>{r`f'(x_{(\star)}) \simeq 0 \implies mal\ condizionato`}</PLatex>
</Panel>
@ -31,14 +34,19 @@ export default function (props) {
<Section>
<Panel title={"Ordine di convergenza"}>
<p>
Indice <ILatex>{r`{\color{Orange} p}`}</ILatex> di quanto in fretta una successione converge alla soluzione.
Indice <ILatex>{r`{\color{Orange} p}`}</ILatex> di quanto in fretta una successione converge
alla soluzione.
</p>
<PLatex>{r`\lim_{i \to +\infty} \frac{ \left| x_{(i+1)} - x_{(\star)} \right| }{ \left| x_{(k)} - x_{(\star)} \right|^{\color{Orange} p}}`}</PLatex>
<ul>
<li><u>Convergenza lineare</u>: <ILatex>{r`p = 1`}</ILatex> e <ILatex>{r`0 < C < 1`}</ILatex></li>
<li><u>Convergenza superlineare</u>: <ILatex>{r`p = 1`}</ILatex> e <ILatex>{r`C = 0`}</ILatex></li>
<li><u>Convergenza quadratica</u>: <ILatex>{r`p = 2`}</ILatex> e <ILatex>{r`0 < C < 1`}</ILatex></li>
<li><u>Convergenza superquadratica</u>: <ILatex>{r`p = 2`}</ILatex> e <ILatex>{r`C = 0`}</ILatex></li>
<li><u>Convergenza lineare</u>: <ILatex>{r`p = 1`}</ILatex> e <ILatex>{r`0 < C < 1`}</ILatex>
</li>
<li><u>Convergenza superlineare</u>: <ILatex>{r`p = 1`}</ILatex> e <ILatex>{r`C = 0`}</ILatex>
</li>
<li><u>Convergenza quadratica</u>: <ILatex>{r`p = 2`}</ILatex> e <ILatex>{r`0 < C < 1`}</ILatex>
</li>
<li><u>Convergenza
superquadratica</u>: <ILatex>{r`p = 2`}</ILatex> e <ILatex>{r`C = 0`}</ILatex></li>
<li>...</li>
</ul>
</Panel>
@ -46,7 +54,8 @@ export default function (props) {
<Section title={"Metodi dicotomici"}>
<Panel title={"Cosa sono?"}>
<p>
Sono <b>metodi iterativi</b> in grado di ridurre sempre di più l'intervallo in cui è definita la funzione, facendolo convergere allo zero desiderato.
Sono <b>metodi iterativi</b> in grado di ridurre sempre di più l'intervallo in cui è definita la
funzione, facendolo convergere allo zero desiderato.
</p>
<p>
Alcuni di essi sono il <i>metodo dicotomico</i> e il <i>metodo regula falsi</i>.
@ -55,18 +64,22 @@ export default function (props) {
Richiedono <b>una valutazione di funzione non-lineare</b> ad ogni iterazione.
</p>
<p>
Ad ogni iterazione, l'intervallo viene sempre <i>almeno</i> <b>dimezzato</b>; si ha, pertanto, che:
Ad ogni iterazione, l'intervallo viene sempre <i>almeno</i> <b>dimezzato</b>; si ha, pertanto,
che:
</p>
<PLatex>{r`b_{(i)} - a_{(i)} = \frac{b - a}{2^{i - 1}}`}</PLatex>
<p>
Hanno quindi <b>convergenza lineare</b> (<ILatex>{r`C = \frac{1}{2}, p = 1`}</ILatex>).
</p>
<p>
Il loro <i>criterio di arresto</i> è un <b>numero di iterazioni prefissato</b> che dipende dalla <b>tolleranza</b> sull'errore:
Il loro <i>criterio di arresto</i> è un <b>numero di iterazioni prefissato</b> che dipende
dalla <b>tolleranza</b> sull'errore:
</p>
<PLatex>{r`i \geq \log_2 \left( \frac{b - a}{\tau} \right)`}</PLatex>
<Example>
Dividi l'intervallo <ILatex>{r`[a, b]`}</ILatex> in tante parti grandi quanto la tolleranza. L'algoritmo di bisezione ne escluderà metà ad ogni iterazione; la tolleranza sarà raggiunta quando rimarrà una parte sola!
Dividi l'intervallo <ILatex>{r`[a, b]`}</ILatex> in tante parti grandi quanto la tolleranza.
L'algoritmo di bisezione ne escluderà metà ad ogni iterazione; la tolleranza sarà raggiunta
quando rimarrà una parte sola!
</Example>
</Panel>
</Section>
@ -76,7 +89,8 @@ export default function (props) {
<li>Finchè non sono state compiute il numero di iterazioni prefissate:
<ol>
<li>
Calcoliamo il <b>punto medio</b> dell'intervallo <ILatex>{r`[a_{(n)}, b_{(n)}]`}</ILatex>:
Calcoliamo il <b>punto
medio</b> dell'intervallo <ILatex>{r`[a_{(n)}, b_{(n)}]`}</ILatex>:
<PLatex>{r`c_{(n)} = a_{(n)} + \frac{b_{(n)} - a_{(n)}}{2}`}</PLatex>
</li>
<li>
@ -87,7 +101,8 @@ export default function (props) {
</ul>
</li>
<li>
Teniamo l'intervallo in cui i valori della funzione ai due estremi sono discordi, e rinominiamolo in <ILatex>{r`[a_{(n+1)}, b_{(n+1)}]`}</ILatex>.
Teniamo l'intervallo in cui i valori della funzione ai due estremi sono discordi, e
rinominiamolo in <ILatex>{r`[a_{(n+1)}, b_{(n+1)}]`}</ILatex>.
</li>
</ol>
</li>
@ -98,7 +113,8 @@ export default function (props) {
<li>Finchè non sono state compiute il numero di iterazioni prefissate:
<ol>
<li>
Calcoliamo l'<b>intersezione</b> tra la <b>retta che congiunge i due estremi</b> <ILatex>{r`a_{(n)}, b_{(n)}`}</ILatex> e l'<b>asse X</b>:
Calcoliamo l'<b>intersezione</b> tra la <b>retta che congiunge i due estremi</b>
<ILatex>{r`a_{(n)}, b_{(n)}`}</ILatex> e l'<b>asse X</b>:
<PLatex>{r`c_{(n)} = b_{(n)} - \frac{f(b_{(n)})}{\frac{f(b_{(n)}) - f(a_{(n)})}{b_{(n)} - a_{(n)}}}`}</PLatex>
</li>
<li>
@ -109,7 +125,8 @@ export default function (props) {
</ul>
</li>
<li>
Teniamo l'intervallo in cui i valori della funzione ai due estremi sono discordi, e rinominiamolo in <ILatex>{r`[a_{(n+1)}, b_{(n+1)}]`}</ILatex>.
Teniamo l'intervallo in cui i valori della funzione ai due estremi sono discordi, e
rinominiamolo in <ILatex>{r`[a_{(n+1)}, b_{(n+1)}]`}</ILatex>.
</li>
</ol>
</li>
@ -119,7 +136,8 @@ export default function (props) {
<Section title={"Metodo delle approssimazioni successive"}>
<Panel title={"Metodi delle approssimazioni successive"}>
<p>
Sono <b>metodi iterativi</b> che funzionano in modo molto simile ai metodi iterativi per i sistemi lineari, utilizzando una funzione <ILatex>{r`\phi`}</ILatex> come "metodo".
Sono <b>metodi iterativi</b> che funzionano in modo molto simile ai metodi iterativi per i
sistemi lineari, utilizzando una funzione <ILatex>{r`\phi`}</ILatex> come "metodo".
</p>
<PLatex>{r`x = x - \phi(x) \cdot f(x)`}</PLatex>
<p>
@ -127,8 +145,10 @@ export default function (props) {
</p>
<PLatex>{r`x_{(k+1)} = g( x_{(k)} )`}</PLatex>
<p>
Sfruttano i <b>punti fissi</b> <ILatex>{r`g(x_{(\star)}) = x_{(\star)}`}</ILatex> della funzione <ILatex>{r`f`}</ILatex> per convergere:<br/>
se <ILatex>{r`\phi(x)`}</ILatex> non ha zeri, allora i punti fissi <b>coincideranno</b> con gli <b>zeri</b> della funzione <ILatex>{r`f`}</ILatex>.
Sfruttano i <b>punti fissi</b> <ILatex>{r`g(x_{(\star)}) = x_{(\star)}`}</ILatex> della
funzione <ILatex>{r`f`}</ILatex> per convergere:<br/>
se <ILatex>{r`\phi(x)`}</ILatex> non ha zeri, allora i punti fissi <b>coincideranno</b> con
gli <b>zeri</b> della funzione <ILatex>{r`f`}</ILatex>.
</p>
<PLatex>{r`g(x) = x - \phi(x) \cdot f(x)`}</PLatex>
<p>
@ -136,11 +156,16 @@ export default function (props) {
</p>
<PLatex>{r`x_{(k+1)} = g( x_{(k)} )`}</PLatex>
<p>
Non si conosce in anticipo il numero di iterazioni necessarie per soddisfare la tolleranza <ILatex>{r`\tau`}</ILatex>; ad ogni iterazione, si controlla se la tolleranza è soddisfatta:
Non si conosce in anticipo il numero di iterazioni necessarie per soddisfare la
tolleranza <ILatex>{r`\tau`}</ILatex>; ad ogni iterazione, si controlla se la tolleranza è
soddisfatta:
</p>
<ul>
<li>Nella differenza tra due iterate: <ILatex>{r`\frac{\left| x_{(k+1)} - x_{(k)} \right|}{\left| x_{(k+1)} \right|} \leq \tau`}</ILatex></li>
<li>Nel <i>residuo</i> del problema: <ILatex>{r`\left| f(x_{(k)}) \right| \leq \tau`}</ILatex></li>
<li>Nella differenza tra due
iterate: <ILatex>{r`\frac{\left| x_{(k+1)} - x_{(k)} \right|}{\left| x_{(k+1)} \right|} \leq \tau`}</ILatex>
</li>
<li>Nel <i>residuo</i> del problema: <ILatex>{r`\left| f(x_{(k)}) \right| \leq \tau`}</ILatex>
</li>
</ul>
</Panel>
<Panel title={"Teorema della mappa contrattiva"}>
@ -149,12 +174,14 @@ export default function (props) {
</p>
<ul>
<li>
Tutti i valori restituiti dalla funzione <ILatex>{r`g`}</ILatex> rientrano nel suo stesso dominio:
Tutti i valori restituiti dalla funzione <ILatex>{r`g`}</ILatex> rientrano nel suo stesso
dominio:
<PLatex>{r`g : [a, b] \to [a, b]`}</PLatex>
</li>
<li>
<p>
La funzione <ILatex>{r`g`}</ILatex> è una contrazione, ovvero restringe l'intervallo <ILatex>{r`[a, b]`}</ILatex>:
La funzione <ILatex>{r`g`}</ILatex> è una contrazione, ovvero restringe
l'intervallo <ILatex>{r`[a, b]`}</ILatex>:
</p>
<PLatex>{r`\forall (x, y) \in [a, b], | g(x) - g(y) | \leq L \cdot | x - y |`}</PLatex>
<p>
@ -186,7 +213,8 @@ export default function (props) {
Più è piccolo <ILatex>L</ILatex>, più il metodo convergerà in fretta.
</p>
<Example>
<ILatex>L</ILatex> è molto simile al raggio spettrale <ILatex>{r`\rho(M)`}</ILatex> dei metodi iterativi per i sistemi lineari!
<ILatex>L</ILatex> è molto simile al raggio spettrale <ILatex>{r`\rho(M)`}</ILatex> dei metodi
iterativi per i sistemi lineari!
</Example>
</Panel>
</Section>
@ -198,7 +226,10 @@ export default function (props) {
<PLatex>{r`\phi (x) = \frac{1}{f' (x)}`}</PLatex>
<PLatex>{r`x_{(k+1)} = x_{(k)} - \frac{ f(x_{(k)}) }{ f'(x_{(k)}) }`}</PLatex>
<Example>
Geometricamente, corrisponde a prolungare una retta nel punto <ILatex>{r`(x_{(k)}, f(x_{(k)}))`}</ILatex> con pendenza <ILatex>{r`f'(x_{(k)})`}</ILatex>, e prendendo come nuovo punto la sua intersezione con l'asse X e la sua corrispettiva immagine nella funzione.
Geometricamente, corrisponde a prolungare una retta nel
punto <ILatex>{r`(x_{(k)}, f(x_{(k)}))`}</ILatex> con pendenza <ILatex>{r`f'(x_{(k)})`}</ILatex>,
e prendendo come nuovo punto la sua intersezione con l'asse X e la sua corrispettiva immagine
nella funzione.
</Example>
<p>
Ha costo computazionale di <b>2 valutazioni di funzione</b> più <b>2 valutazioni di derivata</b>.
@ -209,12 +240,16 @@ export default function (props) {
</Panel>
<Panel title={"Metodo delle secanti"}>
<p>
È come il metodo di Newton, ma usa il <b>rapporto incrementale</b>, in modo da poter essere applicato a funzioni non continue.
È come il metodo di Newton, ma usa il <b>rapporto incrementale</b>, in modo da poter essere
applicato a funzioni non continue.
</p>
<PLatex>{r`\phi (x) = \frac{ 1 }{ \frac{ f(x_{(k)}) - f(x_{(k-1)}) }{ x_{(k)} - x_{(k-1)} } }`}</PLatex>
<PLatex>{r`x_{(k+1)} = x_{(k)} - \frac{ f(x_{(k)}) }{ \frac{ f(x_{(k)}) - f(x_{(k-1)}) }{ x_{(k)} - x_{(k-1)} } }`}</PLatex>
<Example>
Geometricamente, corrisponde a costruire una retta che attraversa i punti <ILatex>{r`(x_{(k)}, f(x_{(k)}))`}</ILatex> e <ILatex>{r`(x_{(k-1)}, f(x_{(k-1)}))`}</ILatex>, e prendendo come nuovo punto la sua intersezione con l'asse X e la sua corrispettiva immagine nella funzione.
Geometricamente, corrisponde a costruire una retta che attraversa i
punti <ILatex>{r`(x_{(k)}, f(x_{(k)}))`}</ILatex> e <ILatex>{r`(x_{(k-1)}, f(x_{(k-1)}))`}</ILatex>,
e prendendo come nuovo punto la sua intersezione con l'asse X e la sua corrispettiva immagine
nella funzione.
</Example>
<p>
Ha costo computazionale di <b>3 valutazioni di funzione</b>.

View file

@ -1,24 +1,25 @@
import style from "./03_Interpolazione.less";
import {Fragment} from "preact";
import {Section, Panel, ILatex, BLatex, PLatex, Todo} from "bluelib";
import {ILatex, Panel, PLatex, Section, Todo} from "bluelib";
import Example from "../../components/Example";
const r = String.raw;
export default function (props) {
export default function () {
return (
<Fragment>
<Section title={"Problema: Interpolazione"}>
<Panel title={"Descrizione"}>
<p>
Si vuole trovare una funzione in grado di <b>approssimarne</b> un'altra, di cui si conoscono però solo alcuni punti.
Si vuole trovare una funzione in grado di <b>approssimarne</b> un'altra, di cui si conoscono
però solo alcuni punti.
</p>
<Example>
È utile in un sacco di casi! Ad esempio, quando si vuole scalare un'immagine.
</Example>
<p>
I punti sono detti <b>nodi</b> <ILatex>{r`(x_i, y_i)`}</ILatex>, mentre la funzione costruita su di essi è detta <b>interpolante</b> <ILatex>{r`g`}</ILatex>:
I punti sono detti <b>nodi</b> <ILatex>{r`(x_i, y_i)`}</ILatex>, mentre la funzione costruita su
di essi è detta <b>interpolante</b> <ILatex>{r`g`}</ILatex>:
</p>
<PLatex>{r`g(x_i) = y_i`}</PLatex>
<p>
@ -27,10 +28,12 @@ export default function (props) {
</Panel>
<Panel title={"Interpolazione polinomiale"}>
<p>
Il <u>teorema fondamentale dell'algebra</u> dice che <b>esiste una sola interpolante <i>polinomiale</i></b> che interpola un dato insieme di punti.
Il <u>teorema fondamentale dell'algebra</u> dice che <b>esiste una sola
interpolante <i>polinomiale</i></b> che interpola un dato insieme di punti.
</p>
<p>
Con <ILatex>n+1</ILatex> punti, l'interpolante sarà al massimo di grado <ILatex>n</ILatex>, e viene detta <ILatex>{r`p_n`}</ILatex>.
Con <ILatex>n+1</ILatex> punti, l'interpolante sarà al massimo di grado <ILatex>n</ILatex>, e
viene detta <ILatex>{r`p_n`}</ILatex>.
</p>
<p>
La sua <b>forma canonica</b> sarà:
@ -87,20 +90,25 @@ export default function (props) {
Per trovare il polinomio di interpolazione è sufficiente risolvere il problema!
</Example>
<p>
È efficace perchè una volta calcolati i coefficienti essi <b>valgono per tutti i punti</b>, ma ha come svantaggio che la matrice di Vandermonde è <b>spesso malcondizionata.</b>
È efficace perchè una volta calcolati i coefficienti essi <b>valgono per tutti i punti</b>, ma
ha come svantaggio che la matrice di Vandermonde è <b>spesso malcondizionata.</b>
</p>
</Panel>
<Panel title={"Metodo di Lagrange"}>
<p>
È possibile scrivere il polinomio di interpolazione <b>raccogliendo le <ILatex>{r`y`}</ILatex></b>:
È possibile scrivere il polinomio di interpolazione <b>raccogliendo
le <ILatex>{r`y`}</ILatex></b>:
</p>
<PLatex>{r`p_n (x) = y_0 L_0 + y_1 L_1 + y_2 L_2 + \dots + y_n L_n`}</PLatex>
<p>
I polinomi <ILatex>{r`L_k`}</ILatex> sono detti <b>polinomi di Lagrange</b>, e hanno le seguenti proprietà:
I polinomi <ILatex>{r`L_k`}</ILatex> sono detti <b>polinomi di Lagrange</b>, e hanno le seguenti
proprietà:
</p>
<ul>
<li>
Valgono <ILatex>1</ILatex> in corrispondenza del nodo con lo stesso indice, <ILatex>0</ILatex> in corrispondenza dei nodi con indice diverso e <ILatex>{r`0 < n < 1`}</ILatex> in tutti gli altri casi.
Valgono <ILatex>1</ILatex> in corrispondenza del nodo con lo stesso
indice, <ILatex>0</ILatex> in corrispondenza dei nodi con indice diverso
e <ILatex>{r`0 < n < 1`}</ILatex> in tutti gli altri casi.
<PLatex>{r`
\begin{cases}
@ -120,11 +128,13 @@ export default function (props) {
</p>
<Example>Si chiama base perchè sono <b>linearmente indipendenti</b>!</Example>
<p>
Questo metodo permette di calcolare il valore del polinomio di interpolazione <b>in un singolo punto</b>:
Questo metodo permette di calcolare il valore del polinomio di interpolazione <b>in un singolo
punto</b>:
</p>
<Example>
<p>
Si può risparmiare tempo di calcolo calcolando una singola volta il numeratore con <i>tutti</i> i termini:
Si può risparmiare tempo di calcolo calcolando una singola volta il numeratore
con <i>tutti</i> i termini:
</p>
<PLatex>{r`\omega_n = (x - x_0) \cdot (x - x_1) \cdot \dots \cdot (x - x_n)`}</PLatex>
<p>
@ -147,17 +157,16 @@ export default function (props) {
</p>
<PLatex>{r`R_n(x) = f(x) - p_n(x)`}</PLatex>
<p>
In particolare, è interessante la sua norma a infinito, <ILatex>{r`\| f - p_n \|_\infty`}</ILatex>, che corrisponde alla distanza massima tra le due funzioni.
In particolare, è interessante la sua norma a
infinito, <ILatex>{r`\| f - p_n \|_\infty`}</ILatex>, che corrisponde alla distanza massima tra
le due funzioni.
</p>
<p>
Un teorema dice che esso è uguale a: <Todo>TODO: Non credo serva.</Todo>
Un teorema dice che esso è uguale a:
</p>
<PLatex>{r`R_n(x) = \frac{ \omega_n(x) }{ (n + 1)! } \cdot f^{(n+1)}(\xi)`}</PLatex>
</Panel>
<Panel title={"Stima"}>
<p>
<Todo>TODO: Tutta la dimostrazione di queste due affermazioni.</Todo>
</p>
<p>
L'errore nell'interpolazione dipende principalmente da due fattori:
</p>
@ -170,10 +179,12 @@ export default function (props) {
<Section>
<Panel title={"Fenomeno di Runge"}>
<p>
Fenomeno che si verifica cercando di interpolare la <i>funzione di Runge</i> (<ILatex>{r`\frac{1}{1 + 25x^2}`}</ILatex>).
Fenomeno che si verifica cercando di interpolare la <i>funzione di
Runge</i> (<ILatex>{r`\frac{1}{1 + 25x^2}`}</ILatex>).
</p>
<p>
Scegliendo <b>nodi equispaziati</b>, l'errore di interpolazione sarà <b>enorme</b> vicino ai due estremi dell'intervallo.
Scegliendo <b>nodi equispaziati</b>, l'errore di interpolazione sarà <b>enorme</b> vicino ai due
estremi dell'intervallo.
</p>
<Example>
Addirittura, più nodi verranno scelti, più esso sarà alto!
@ -184,7 +195,8 @@ export default function (props) {
</Panel>
<Panel title={"Nodi di Chebychev"}>
<p>
Nodi ottenuti partizionando una <b>semicirconferenza</b>, e proiettando le partizioni sul diametro.
Nodi ottenuti partizionando una <b>semicirconferenza</b>, e proiettando le partizioni sul
diametro.
</p>
<p>
La formula usata per ottenere <ILatex>{r`n`}</ILatex> punti è:

View file

@ -1,18 +1,18 @@
import style from "./04_InterpolazioneATratti.less";
import {Fragment} from "preact";
import {Section, Panel, ILatex, BLatex, PLatex, Todo} from "bluelib";
import {ILatex, Panel, PLatex, Section} from "bluelib";
import Example from "../../components/Example";
const r = String.raw;
export default function (props) {
export default function () {
return (
<Fragment>
<Section title={"Problema: Interpolazione a tratti"}>
<Panel title={"Come funziona?"}>
<p>
Invece che costruire una singola funzione che interpola tutti i punti, per <b>ogni intervallo tra due punti</b> (<i>sottointervallo</i>) si costruisce <b>una funzione apposta</b>.
Invece che costruire una singola funzione che interpola tutti i punti, per <b>ogni intervallo
tra due punti</b> (<i>sottointervallo</i>) si costruisce <b>una funzione apposta</b>.
</p>
</Panel>
</Section>
@ -24,12 +24,15 @@ export default function (props) {
<ul>
<li>sono <b>polinomiali</b> di grado massimo <ILatex>{r`n`}</ILatex></li>
<li>sono <b>continue</b> fino al grado <ILatex>{r`n - 1`}</ILatex></li>
<li>connettono <ILatex>{r`m + 2`}</ILatex> punti, e hanno <ILatex>{r`m`}</ILatex> sottointervalli</li>
<li>connettono <ILatex>{r`m + 2`}</ILatex> punti, e
hanno <ILatex>{r`m`}</ILatex> sottointervalli
</li>
<li>hanno funzioni <b>definite appositamente</b> per ogni sottointervallo</li>
</ul>
<Example>
<p>
Significa che agli estremi dell'intervallo, i valori di tutte le derivate fino al grado <ILatex>{r`n - 1`}</ILatex> devono essere uguali:
Significa che agli estremi dell'intervallo, i valori di tutte le derivate fino al
grado <ILatex>{r`n - 1`}</ILatex> devono essere uguali:
</p>
<PLatex>{r`\forall \ k \leq n-1, \forall \ i \in \{intervalli\}, \quad s_i^{(k)} (x_{i+1}) = s_i^{(k)} (x_{i+1})`}</PLatex>
</Example>
@ -58,7 +61,8 @@ export default function (props) {
</p>
<PLatex>{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`}</PLatex>
<p>
Ha come vantaggi complessità computazionale <b>molto più bassa</b> e l'<b>assenza</b> del fenomeno di Runge, ma allo stesso tempo si <b>perde la derivabilità della funzione.</b>
Ha come vantaggi complessità computazionale <b>molto più bassa</b> e l'<b>assenza</b> del
fenomeno di Runge, ma allo stesso tempo si <b>perde la derivabilità della funzione.</b>
</p>
<p>
<b>Non</b> hanno gradi di libertà.
@ -87,7 +91,8 @@ export default function (props) {
</p>
<PLatex>{r`s_i(x) = \alpha_i + \beta_i \ ( x - x_i ) + \gamma_i \ ( x - x_i )^2 + \delta_i \ ( x - x_i )^3`}</PLatex>
<Example>
Spesso si indica con <ILatex>{r`h`}</ILatex> la distanza orizzontale tra due punti di un sottointervallo.
Spesso si indica con <ILatex>{r`h`}</ILatex> la distanza orizzontale tra due punti di un
sottointervallo.
</Example>
</Panel>
</Section>
@ -171,7 +176,10 @@ export default function (props) {
Classe di spline cubiche in cui:
</p>
<ul>
<li>Negli intervalli <ILatex>{r`[x_0, x_2]`}</ILatex> e <ILatex>{r`[x_{m-1}, x_{m+1}]`}</ILatex> si presenta <b>obbligatoriamente</b> un polinomio di <b>grado 3</b>.</li>
<li>Negli
intervalli <ILatex>{r`[x_0, x_2]`}</ILatex> e <ILatex>{r`[x_{m-1}, x_{m+1}]`}</ILatex> si
presenta <b>obbligatoriamente</b> un polinomio di <b>grado 3</b>.
</li>
</ul>
<p>
È <b>unica</b>.
@ -181,7 +189,8 @@ export default function (props) {
<Section>
<Panel title={"Proprietà di minima curvatura"}>
<p>
Tra tutte le funzioni che interpolano dei punti, le tre classi di funzioni sopraelencate sono quelle che interpolano la funzione più "dolcemente".
Tra tutte le funzioni che interpolano dei punti, le tre classi di funzioni sopraelencate sono
quelle che interpolano la funzione più "dolcemente".
</p>
<p>
Per loro è valida la seguente proprietà:

View file

@ -1,12 +1,11 @@
import style from "./05_ApprossimazioneDatiSperimentali.less";
import {Fragment} from "preact";
import {Section, Panel, ILatex, BLatex, PLatex} from "bluelib";
import {ILatex, Panel, PLatex, Section} from "bluelib";
import Example from "../../components/Example";
const r = String.raw;
export default function (props) {
export default function () {
return (
<Fragment>
<Section title={"Problema: Approssimazione di dati sperimentali"}>
@ -15,15 +14,21 @@ export default function (props) {
Interpolare dati sperimentali non fornisce quasi mai un modello del fenomeno.
</p>
<p>
Vogliamo costruire una <b>funzione di regressione</b> che, dati molti più dati del grado della funzione, minimizzi il quadrato della distanza tra i punti sperimentali e i punti della funzione di regressione.
Vogliamo costruire una <b>funzione di regressione</b> che, dati molti più dati del grado della
funzione, minimizzi il quadrato della distanza tra i punti sperimentali e i punti della funzione
di regressione.
</p>
<p>
Denominiamo:
</p>
<ul>
<li><ILatex>{r`{\color{Orange} f}`}</ILatex>: la <b>funzione "effettiva"</b> del fenomeno</li>
<li><ILatex>{r`{\color{Yellow} q}`}</ILatex>: la <b>funzione di regressione</b> che costruiamo per approssimarlo</li>
<li><ILatex>{r`{\color{Red} Q }`}</ILatex>: la <b>funzione "errore di regressione"</b> da minimizzare</li>
<li><ILatex>{r`{\color{Yellow} q}`}</ILatex>: la <b>funzione di regressione</b> che costruiamo
per approssimarlo
</li>
<li><ILatex>{r`{\color{Red} Q }`}</ILatex>: la <b>funzione "errore di regressione"</b> da
minimizzare
</li>
<li><ILatex>{r`(\ x_i, f(x_i)\ )`}</ILatex>: i <b>punti sperimentali</b></li>
</ul>
<p>
@ -35,10 +40,12 @@ export default function (props) {
<Section>
<Panel title={"Regressione lineare"}>
<p>
Trova la <b>retta</b> <ILatex>{r`{\color{Yellow} q}`}</ILatex> che meglio approssima tutti gli <ILatex>{r`m`}</ILatex> dati sperimentali.
Trova la <b>retta</b> <ILatex>{r`{\color{Yellow} q}`}</ILatex> che meglio approssima tutti
gli <ILatex>{r`m`}</ILatex> dati sperimentali.
</p>
<p>
Essendo una retta, avrà <b>due parametri</b>: il termine noto <ILatex>{r`a_0`}</ILatex>, e la pendenza <ILatex>{`a_1`}</ILatex>.
Essendo una retta, avrà <b>due parametri</b>: il termine noto <ILatex>{r`a_0`}</ILatex>, e la
pendenza <ILatex>{`a_1`}</ILatex>.
</p>
<PLatex>{r`{\color{Yellow} q(x) } = a_0 + a_1 \cdot {\color{Green} x}`}</PLatex>
<p>
@ -50,7 +57,8 @@ export default function (props) {
</Panel>
<Panel title={"Regressione lineare matriciale"}>
<p>
Possiamo costruire una <b>matrice di regressione</b> <ILatex>{r`A`}</ILatex> contenente tutti i <b>punti sperimentali</b>:
Possiamo costruire una <b>matrice di regressione</b> <ILatex>{r`A`}</ILatex> contenente tutti
i <b>punti sperimentali</b>:
</p>
<PLatex>{r`
A =
@ -84,7 +92,9 @@ export default function (props) {
<Section>
<Panel title={"Regressione polinomiale"}>
<p>
Trova il <b>polinomio</b> <ILatex>{r`{\color{Yellow} q}`}</ILatex> di grado <ILatex>{r`n-1`}</ILatex> che meglio approssima tutti gli <ILatex>{r`m`}</ILatex> dati sperimentali.
Trova il <b>polinomio</b> <ILatex>{r`{\color{Yellow} q}`}</ILatex> di
grado <ILatex>{r`n-1`}</ILatex> che meglio approssima tutti gli <ILatex>{r`m`}</ILatex> dati
sperimentali.
</p>
<p>
Essendo un polinomio di grado <ILatex>{r`n-1`}</ILatex>, avrà <ILatex>{r`n`}</ILatex> parametri.
@ -92,7 +102,8 @@ export default function (props) {
<PLatex>{r`{\color{Yellow} q(x) } = a_0 + a_1 \cdot {\color{Green} x} + a_2 \cdot {\color{Green} x^2} +\ \dots \ + a_{n-1} \cdot {\color{Green} x^{n-1}`}</PLatex>
<Example>
<p>
La regressione lineare è un caso particolare di regressione generale in cui i parametri sono 2!
La regressione lineare è un caso particolare di regressione generale in cui i parametri sono
2!
</p>
</Example>
<p>
@ -104,7 +115,8 @@ export default function (props) {
</Panel>
<Panel title={"Regressione polinomiale matriciale"}>
<p>
Possiamo costruire una <b>matrice di regressione</b> <ILatex>{r`A`}</ILatex> contenente tutti i <b>punti sperimentali</b> a tutti i gradi del polinomio:
Possiamo costruire una <b>matrice di regressione</b> <ILatex>{r`A`}</ILatex> contenente tutti
i <b>punti sperimentali</b> a tutti i gradi del polinomio:
</p>
<PLatex>{r`
A =
@ -136,14 +148,18 @@ export default function (props) {
</p>
<PLatex>{r`{\color{Red} Q } = \| A \cdot \alpha - y \|^2`}</PLatex>
<Example>
Normalmente, i dati sono molti di più, ma se il numero di parametri <ILatex>{r`n`}</ILatex> fosse uguale al numero di dati <ILatex>{r`m`}</ILatex>, allora si otterrebbe il <b>polinomio di interpolazione</b>!
Normalmente, i dati sono molti di più, ma se il numero di
parametri <ILatex>{r`n`}</ILatex> fosse uguale al numero di dati <ILatex>{r`m`}</ILatex>, allora
si otterrebbe il <b>polinomio di interpolazione</b>!
</Example>
</Panel>
</Section>
<Section>
<Panel title={"Regressione generale"}>
<p>
Trova i <b>coefficienti della combinazione lineare</b> <ILatex>{r`{\color{Yellow} q}`}</ILatex> che meglio approssima tutti gli <ILatex>{r`m`}</ILatex> dati sperimentali.
Trova i <b>coefficienti della combinazione lineare</b>
<ILatex>{r`{\color{Yellow} q}`}</ILatex> che meglio approssima tutti
gli <ILatex>{r`m`}</ILatex> dati sperimentali.
</p>
<PLatex>{r`{\color{Yellow} q(x) } = a_0 \cdot {\color{Green} \phi_0 (x)} + a_1 \cdot {\color{Green} \phi_1 (x)} + \dots + a_2 \cdot {\color{Green} \phi_2 (x)} +\ \dots\ + a_{n-1} \cdot {\color{Green} \phi_{n-1} (x)}`}</PLatex>
<Example>
@ -161,7 +177,8 @@ export default function (props) {
</Panel>
<Panel title={"Regressione polinomiale generale"}>
<p>
Possiamo costruire una <b>matrice di regressione</b> <ILatex>{r`A`}</ILatex> contenente tutti i <b>punti sperimentali</b> a tutti i gradi del polinomio:
Possiamo costruire una <b>matrice di regressione</b> <ILatex>{r`A`}</ILatex> contenente tutti
i <b>punti sperimentali</b> a tutti i gradi del polinomio:
</p>
<PLatex>{r`
A =
@ -208,7 +225,9 @@ export default function (props) {
<ul>
<li>Fattorizziamo <ILatex>{r`A = Q \cdot \begin{pmatrix} R\\ 0 \end{pmatrix}`}</ILatex>.</li>
<li>Calcoliamo <ILatex>{r`w = Q^T \cdot y`}</ILatex>.</li>
<li>Teniamo solo i primi <ILatex>n</ILatex> valori di <ILatex>{r`w`}</ILatex> e mettiamoli in <ILatex>{r`w_1`}</ILatex>.</li>
<li>Teniamo solo i primi <ILatex>n</ILatex> valori di <ILatex>{r`w`}</ILatex> e mettiamoli
in <ILatex>{r`w_1`}</ILatex>.
</li>
<li>Calcoliamo <ILatex>{r`R \cdot \alpha = w_1`}</ILatex>.</li>
</ul>
</Panel>
@ -220,13 +239,15 @@ export default function (props) {
Ci sono <b>infinite</b> soluzioni, con <ILatex>{`n-k`}</ILatex> gradi di libertà.
</p>
<p>
Si cerca sempre di trovare la <i>soluzione di norma minima</i>, che, se <ILatex>{r`k \leq n \leq m`}</ILatex>, allora è <b>unica</b>.
Si cerca sempre di trovare la <i>soluzione di norma minima</i>, che,
se <ILatex>{r`k \leq n \leq m`}</ILatex>, allora è <b>unica</b>.
</p>
<p>
Per trovarla:
</p>
<ul>
<li>Fattorizziamo <ILatex>{r`A = U \cdot \Sigma \cdot V^T`}</ILatex> con la <i>fattorizzazione SVD</i></li>
<li>Fattorizziamo <ILatex>{r`A = U \cdot \Sigma \cdot V^T`}</ILatex> con la <i>fattorizzazione
SVD</i></li>
<li>Calcoliamo <ILatex>{r`\zeta = U^T \cdot y`}</ILatex></li>
<li>
<p>
@ -250,7 +271,8 @@ export default function (props) {
<li>Calcoliamo <ILatex>{r`\alpha = V \cdot \gamma`}</ILatex></li>
</ul>
<Example>
Gli zeri nella <ILatex>{r`\gamma`}</ILatex> sono i gradi di libertà, sono zero in modo che essi diano la norma minima.
Gli zeri nella <ILatex>{r`\gamma`}</ILatex> sono i gradi di libertà, sono zero in modo che essi
diano la norma minima.
</Example>
</Panel>
</Section>

View file

@ -287,12 +287,6 @@ export default function () {
</p>
<PLatex>{r`\| f \|_\infty = max | f(x) |`}</PLatex>
</Panel>
<Panel title={"Norma a 1"}>
<Todo>TODO: Esiste?</Todo>
</Panel>
<Panel title={"Norma a 2"}>
<Todo>TODO: Esiste?</Todo>
</Panel>
</Section>
<Section title={"Errori"}>
<Panel title={"Errore relativo tra vettori e matrici"}>