mirror of
https://github.com/Steffo99/unisteffo.git
synced 2024-11-26 18:04:20 +00:00
Split page into subpages
This commit is contained in:
parent
28c2d80542
commit
fda3a41cbe
10 changed files with 612 additions and 546 deletions
|
@ -1,546 +0,0 @@
|
||||||
import {ILatex, Panel, PLatex, Section, Timer, Todo} from "bluelib";
|
|
||||||
import Example from "../components/Example";
|
|
||||||
import Link from "../components/Link";
|
|
||||||
import MenuList from "../components/MenuList";
|
|
||||||
|
|
||||||
const r = String.raw;
|
|
||||||
|
|
||||||
|
|
||||||
export default function (props) {
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<h1>Calcolo Numerico</h1>
|
|
||||||
<Section title={"Esame"}>
|
|
||||||
<Panel title={"Contatti"}>
|
|
||||||
<ul>
|
|
||||||
<li><Link href={"mailto:silvia.bonettini@unimore.it"}>Prof.ssa Silvia Bonettini</Link></li>
|
|
||||||
</ul>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Orale"}>
|
|
||||||
<p>
|
|
||||||
E' composto da:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>2 domande sugli argomenti teorici</li>
|
|
||||||
<li>1 domanda di implementazione algoritmo in MATLAB</li>
|
|
||||||
</ul>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Prossimi appelli"}>
|
|
||||||
<ol>
|
|
||||||
<li><Timer to={"2020-08-31 09:00"}/></li>
|
|
||||||
<li><Timer to={"2020-09-14 09:00"}/></li>
|
|
||||||
</ol>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<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:
|
|
||||||
</p>
|
|
||||||
<MenuList>
|
|
||||||
<li>
|
|
||||||
<a href={"/calcolonumerico/ripassodialgebralineare"}>Ripasso di Algebra Lineare</a> <small>(per studenti sperduti di Calcolo Numerico)</small>
|
|
||||||
</li>
|
|
||||||
</MenuList>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Algoritmi"}>
|
|
||||||
<Panel title={"Algoritmi numerici"}>
|
|
||||||
<p>
|
|
||||||
Particolari algoritmi che hanno:
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>numeri reali in input e output</li>
|
|
||||||
<li>successioni delle quattro operazioni aritmetiche fondamentali come passi</li>
|
|
||||||
</ul>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Errore di rappresentazione"}>
|
|
||||||
<Panel title={"Cos'è?"}>
|
|
||||||
<p>
|
|
||||||
Con i numeri floating point può capitare che un certo numero <ILatex>{r`\alpha`}</ILatex> non
|
|
||||||
sia rappresentato correttamente.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
In tal caso, il numero si indica con <ILatex>{r`\alpha^*`}</ILatex>.
|
|
||||||
</p>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Errore assoluto"}>
|
|
||||||
<p>
|
|
||||||
È la differenza tra il numero desiderato e il numero rappresentato:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`E_a = \left | \alpha - \alpha^* \right |`}</PLatex>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Errore relativo"}>
|
|
||||||
<p>
|
|
||||||
Indica quanto il numero rappresentato differisce dal numero desiderato:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`\forall \alpha \neq 0, E_r = \frac{E_a}{\left | \alpha \right |}`}</PLatex>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Troncamento"}>
|
|
||||||
<p>
|
|
||||||
Metodo con cui gestire gli <b>underflow floating point</b>: le cifre meno significative
|
|
||||||
vengono <b>rimosse</b>.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
<pre>
|
|
||||||
1.00 → 1.0<br/>
|
|
||||||
1.01 → 1.0<br/>
|
|
||||||
1.10 → 1.1<br/>
|
|
||||||
1.11 → 1.1
|
|
||||||
</pre>
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Arrotondamento"}>
|
|
||||||
<p>
|
|
||||||
Metodo con cui gestire gli <b>underflow floating point</b>: se la cifra più significativa di
|
|
||||||
quelle che devono essere rimosse è 1, allora <b>aumenta di 1</b> anche quella meno signficativa
|
|
||||||
che viene tenuta.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
<pre>
|
|
||||||
1.00 → 1.0<br/>
|
|
||||||
1.01 → 1.0<br/>
|
|
||||||
1.10 → 1.1<br/>
|
|
||||||
1.11 → 10.
|
|
||||||
</pre>
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<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
|
|
||||||
di macchina</i>:
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<ILatex>{r`E_r \leq k \cdot \beta^{1-t}`}</ILatex>
|
|
||||||
</p>
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<ILatex>\beta</ILatex> è uguale alla base utilizzata (solitamente 2).
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<ILatex>t</ILatex> è uguale al numero di cifre della mantissa.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<ILatex>k</ILatex> è uguale a <ILatex>1</ILatex> se il numero viene rappresentato per
|
|
||||||
troncamento oppure a <ILatex>{r`\frac{1}{2}`}</ILatex> se viene rappresentato per
|
|
||||||
arrotondamento.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"La funzione fl"}>
|
|
||||||
<p>
|
|
||||||
Associa un valore reale al suo <b>corrispondente valore floating point</b>, utilizzando uno dei
|
|
||||||
due metodi di gestione dell'undeflow.
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`fl(x) = (x)(1 + \epsilon_x)`}</PLatex>
|
|
||||||
<Example>
|
|
||||||
Indica che un valore è soggetto alla precisione di macchina.
|
|
||||||
<PLatex>{r`fl(1.11) = 1.1`}</PLatex>
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Un nuovo insieme"}>
|
|
||||||
<p>
|
|
||||||
L'insieme <ILatex>{r`\mathbb{F}`}</ILatex> è il sottoinsieme dei numeri reali rappresentabili in
|
|
||||||
floating point dalla macchina che stiamo usando.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Operazioni tra elementi di <ILatex>{r`\mathbb{F}`}</ILatex> producono risultati
|
|
||||||
in <ILatex>{r`\mathbb{R}`}</ILatex>, che però decaderanno nuovamente a elementi
|
|
||||||
di <ILatex>{r`\mathbb{F}`}</ILatex>, perdendo informazioni.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Il teorema della precisione di macchina si applica quindi anche ai risultati delle operazioni.
|
|
||||||
</p>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Caratteristiche delle operazioni di macchina"}>
|
|
||||||
<ul>
|
|
||||||
<li>Hanno <b>più elementi neutri</b>.</li>
|
|
||||||
<li>Un numero ha <b>più opposti</b>.</li>
|
|
||||||
<li><b>Non</b> sono associative.</li>
|
|
||||||
<li><b>Non</b> sono distributive.</li>
|
|
||||||
<li><b>Non</b> vale la legge di annullamento del prodotto.</li>
|
|
||||||
</ul>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Errori nelle operazioni di macchina"}>
|
|
||||||
<Panel title={"Errore inerente"}>
|
|
||||||
<p>
|
|
||||||
Errore derivato da underflow sui <b>dati</b>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Si indica con <ILatex>{r`\epsilon_{nome\_var}`}</ILatex>.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
L'errore sulla variabile <ILatex>x</ILatex> si indica con <ILatex>{r`\epsilon_{x}`}</ILatex>.
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Errore algoritmico"}>
|
|
||||||
<p>
|
|
||||||
Errore derivato da underflow durante l'<b>esecuzione dell'algoritmo</b>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Si indica con <ILatex>{r`\epsilon_{num\_passo}`}</ILatex>.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
L'errore al primo passo dell'algoritmo si indica con <ILatex>{r`\epsilon_{1}`}</ILatex>.
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Condizionamento"}>
|
|
||||||
<p>
|
|
||||||
Sensibilità di un problema all'<b>errore inerente</b>.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
<ILatex>{r`y = \frac{1}{x}`}</ILatex> è mal condizionato intorno allo 0 e ben condizionato
|
|
||||||
lontano dallo 0.
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Stabilità"}>
|
|
||||||
<p>
|
|
||||||
Sensibilità di un problema all'<b>errore algoritmico</b>.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
<p>
|
|
||||||
Cerchiamo un algoritmo che risolva <ILatex>{r`2x^* = 4`}</ILatex>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Calcolare prima <ILatex>{r`t = fl \left( \frac{1}{4} \right)`}</ILatex> e
|
|
||||||
poi <ILatex>{r`x = fl ( 2 \cdot t )`}</ILatex> porta a una perdita di precisione.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Calcolare direttamente <ILatex>{r`x = fl \left( \frac{2}{4} \right)`}</ILatex> non ha alcuna
|
|
||||||
perdita di precisione e rende l'algoritmo <b>più stabile</b> del precedente.
|
|
||||||
</p>
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Indice di condizionamento"}>
|
|
||||||
<p>
|
|
||||||
È il coefficiente di proporzionalità tra i dati e l'<b>errore inerente</b>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Essendo sempre maggiore di uno, si può dire che sia un coefficiente di amplificazione.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Minore è l'indice di condizionamento, meglio condizionato è un problema.
|
|
||||||
</p>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Indice algoritmico"}>
|
|
||||||
<p>
|
|
||||||
È il coefficiente di proporzionalità tra i dati e l'<b>errore algoritmico</b>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Essendo sempre maggiore di uno, si può dire che sia un coefficiente di amplificazione.
|
|
||||||
</p>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Problema: Risoluzione di sistemi lineari"}>
|
|
||||||
<Panel title={"Descrizione"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Condizionamento"}>
|
|
||||||
<p>
|
|
||||||
Il condizionamento della risoluzione di sistemi lineari è:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`\frac{{\color{yellow} \|A\| \cdot \|A^{-1}\|} \cdot \| \Delta b \|}{\| b \|}`}</PLatex>
|
|
||||||
<p>
|
|
||||||
In particolare, è segnato in giallo nella formula il <b>numero di condizionamento</b>:
|
|
||||||
</p>
|
|
||||||
<PLatex>
|
|
||||||
{r`k(A) = \| A \| \cdot \| A^{-1} \|`}
|
|
||||||
</PLatex>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<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.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
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>.
|
|
||||||
</p>
|
|
||||||
</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.
|
|
||||||
</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.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Generalmente hanno una complessità temporale <ILatex>{r`O(n^2)`}</ILatex>.
|
|
||||||
</p>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<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:
|
|
||||||
</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:
|
|
||||||
</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>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex></span>}>
|
|
||||||
<p>
|
|
||||||
Se la matrice dei coefficienti del sistema <b>non ha <Link href={"https://it.wikipedia.org/wiki/Minore_(algebra_lineare)"}>minori</Link> uguali a 0 <small>(eccetto l'ultimo)</small></b> allora è possibile <i>fattorizzarla</i> in due matrici: una <ILatex>{r`L`}</ILatex> triangolare inferiore, e una <ILatex>{r`U`}</ILatex> triangolare superiore.
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`A = L \cdot U`}</PLatex>
|
|
||||||
<Example>
|
|
||||||
Abbiamo fatto questo metodo in Algebra Lineare, chiamandolo <b>metodo di Gauss</b>.
|
|
||||||
</Example>
|
|
||||||
<p>
|
|
||||||
La matrice <ILatex>{r`L`}</ILatex> è così composta:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
L_{ii} = 1 \qquad \qquad (diagonale)\\
|
|
||||||
L_{ik} = -\frac{A_{ik}}{A_{kk}} \qquad (tri.\ infer.)
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<Example>
|
|
||||||
Sono i moltiplicatori usati per rendere annullare il triangolo inferiore!
|
|
||||||
</Example>
|
|
||||||
<p>
|
|
||||||
La matrice <ILatex>{r`U`}</ILatex> è così composta:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
U_{ik} = A_{ik} \quad se\ i \leq k \quad (tri.\ super.)\\
|
|
||||||
U_{ik} = 0 \qquad se\ i > k \quad (tri.\ infer.)
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Il sistema può essere poi risolto applicando due volte il metodo di sostituzione:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
L \cdot y = b\\
|
|
||||||
U \cdot x = y
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Questo metodo ha costo computazionale:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`{\color{Yellow} O\left(\frac{n^3}{3}\right)} + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
|
||||||
</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.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
Abbiamo fatto questo metodo in Algebra Lineare, chiamandolo <b>metodo di Gauss-Jordan</b>!
|
|
||||||
</Example>
|
|
||||||
<p>
|
|
||||||
Alla formula precedente si aggiunge una <Link href={"https://it.wikipedia.org/wiki/Matrice_di_permutazione"}>matrice di permutazione</Link> che indica quali righe sono state scambiate:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`P \cdot A = L \cdot U`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Questo metodo ha costo computazionale:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`{\color{Yellow} O\left(\frac{n^2}{2}\right)} + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
|
||||||
</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:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`P \cdot A \cdot Q = L \cdot U`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Questo metodo ha costo computazionale:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`{\color{Yellow} O\left(\frac{n^3}{3}\right)} + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
|
||||||
</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>:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`A = L \cdot D \cdot L^{-1}`}</PLatex>
|
|
||||||
<p>
|
|
||||||
In questo caso, si calcola solo la matrice L, utilizzando il <b>metodo di pavimentazione</b>.
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
d_{ii} = A_{ii} - \sum_{k=1}^{i-1} ( d_{kk} \cdot (l_{jk})^2 )\\
|
|
||||||
l_{ij} = \frac{A_{ij} - \sum_{k=1}^{j-1} l_{ik} \cdot d_{kk} \cdot l_{jk}}{d_ii}
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<Example>
|
|
||||||
<p>
|
|
||||||
La prima colonna della matrice sarà:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
d_{11} = A_{11}
|
|
||||||
l_{i1} = \frac{A_{i1}}{d_{11}}
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<p>
|
|
||||||
La seconda colonna della matrice sarà:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
d_{22} = A_{22} - d_{11} \cdot (l_{21})^2\\
|
|
||||||
l_{i2} = \frac{A_{i2} - l_{i1} \cdot d_{11} \cdot l_{21}}{d_ii}
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
</Example>
|
|
||||||
<p>
|
|
||||||
Questo metodo ha costo computazionale:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`{\color{Yellow} O\left(\frac{n^3}{6}\right)} + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
|
||||||
</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>:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`A = \mathcal{L} \cdot \mathcal{L}^{-1}`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Il <b>metodo di pavimentazione</b> diventa:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
l_{ii} = \sqrt{A_{ii} - \sum_{k=1}^{i-1} (l_{ik})^2 }\\
|
|
||||||
l_{ij} = \frac{A_{ij} - \sum_{k=1}^{j-1} l_{ik} \cdot l_{jk}}{l_ii}
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Questo metodo ha costo computazionale:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`O\left(\frac{n^3}{3}\right) + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Trasformazione di Householder"}>
|
|
||||||
<p>
|
|
||||||
Matrice ricavata dalla seguente formula:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`U(v) = I - \frac{1}{\alpha} \cdot v \cdot v^T`}</PLatex>
|
|
||||||
<PLatex>{r`\alpha = \frac{1}{2} \| v \|_{(2)}^2`}</PLatex>
|
|
||||||
</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>.
|
|
||||||
</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>:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`A = Q \cdot R`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Le matrici si ottengono dal prodotto delle trasformazioni di Householder (<ILatex>{r`Q`}</ILatex> sulle colonne della matrice <ILatex>{r`A`}</ILatex>, trasformandola in una matrice triangolare superiore (<ILatex>{r`R`}</ILatex>).
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Una volta fattorizzata, il sistema si può risolvere con:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`
|
|
||||||
\begin{cases}
|
|
||||||
y = Q^T \cdot b\\
|
|
||||||
R \cdot x = y
|
|
||||||
\end{cases}
|
|
||||||
`}</PLatex>
|
|
||||||
<p>
|
|
||||||
Questo metodo ha costo computazionale:
|
|
||||||
</p>
|
|
||||||
<PLatex>{r`{\color{Yellow} O\left(\frac{2 \cdot n^3}{3}\right)} + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
|
||||||
<p>
|
|
||||||
<Todo>TODO: l'algoritmo con tau per ricavare la q se non è in memoria</Todo>
|
|
||||||
</p>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Metodi iterativi"}>
|
|
||||||
<Panel title={"Metodo di Jacobi"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Metodo di Gauss-Seidel"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Problema: Ricerca degli zeri di funzione"}>
|
|
||||||
<Panel title={"Descrizione"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Condizionamento"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<Panel title={"Metodi dicotomici"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Metodo delle approssimazioni successive"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Metodi dicotomici"}>
|
|
||||||
<Panel title={"Metodo di bisezione"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Metodo regula falsi"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Metodo delle approssimazioni successive"}>
|
|
||||||
<Panel title={"Metodo generale"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Metodo di Newton"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<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.
|
|
||||||
</p>
|
|
||||||
<Example>
|
|
||||||
È utile in un sacco di casi! Ad esempio, quando si vuole scalare un'immagine.
|
|
||||||
</Example>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Metodi di interpolazione"}>
|
|
||||||
<Panel title={"Metodo dei coefficienti indeterminati"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Metodo di Lagrange"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
<Section title={"Resto di interpolazione"}>
|
|
||||||
<Panel title={"Definizione"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Stima"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Fenomeno di Runge"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
<Panel title={"Nodi di Chebychev"}>
|
|
||||||
<Todo>TODO</Todo>
|
|
||||||
</Panel>
|
|
||||||
</Section>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
251
src/routes/CalcoloNumerico/00_Intro.js
Normal file
251
src/routes/CalcoloNumerico/00_Intro.js
Normal file
|
@ -0,0 +1,251 @@
|
||||||
|
import style from "./00_Intro.less"
|
||||||
|
import {ILatex, Panel, PLatex, Section, Timer} from "bluelib";
|
||||||
|
import Link from "../../components/Link";
|
||||||
|
import MenuList from "../../components/MenuList";
|
||||||
|
import Example from "../../components/Example";
|
||||||
|
import {Fragment} from "preact";
|
||||||
|
|
||||||
|
const r = String.raw;
|
||||||
|
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<Section title={"Esame"}>
|
||||||
|
<Panel title={"Contatti"}>
|
||||||
|
<ul>
|
||||||
|
<li><Link href={"mailto:silvia.bonettini@unimore.it"}>Prof.ssa Silvia Bonettini</Link></li>
|
||||||
|
</ul>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Orale"}>
|
||||||
|
<p>
|
||||||
|
E' composto da:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>2 domande sugli argomenti teorici</li>
|
||||||
|
<li>1 domanda di implementazione algoritmo in MATLAB</li>
|
||||||
|
</ul>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Prossimi appelli"}>
|
||||||
|
<ol>
|
||||||
|
<li><Timer to={"2020-08-31 09:00"}/></li>
|
||||||
|
<li><Timer to={"2020-09-14 09:00"}/></li>
|
||||||
|
</ol>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<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:
|
||||||
|
</p>
|
||||||
|
<MenuList>
|
||||||
|
<li>
|
||||||
|
<a href={"/calcolonumerico/ripassodialgebralineare"}>Ripasso di Algebra Lineare</a> <small>(per studenti sperduti di Calcolo Numerico)</small>
|
||||||
|
</li>
|
||||||
|
</MenuList>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Algoritmi"}>
|
||||||
|
<Panel title={"Algoritmi numerici"}>
|
||||||
|
<p>
|
||||||
|
Particolari algoritmi che hanno:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>numeri reali in input e output</li>
|
||||||
|
<li>successioni delle quattro operazioni aritmetiche fondamentali come passi</li>
|
||||||
|
</ul>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Errore di rappresentazione"}>
|
||||||
|
<Panel title={"Cos'è?"}>
|
||||||
|
<p>
|
||||||
|
Con i numeri floating point può capitare che un certo numero <ILatex>{r`\alpha`}</ILatex> non
|
||||||
|
sia rappresentato correttamente.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
In tal caso, il numero si indica con <ILatex>{r`\alpha^*`}</ILatex>.
|
||||||
|
</p>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Errore assoluto"}>
|
||||||
|
<p>
|
||||||
|
È la differenza tra il numero desiderato e il numero rappresentato:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`E_a = \left | \alpha - \alpha^* \right |`}</PLatex>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Errore relativo"}>
|
||||||
|
<p>
|
||||||
|
Indica quanto il numero rappresentato differisce dal numero desiderato:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`\forall \alpha \neq 0, E_r = \frac{E_a}{\left | \alpha \right |}`}</PLatex>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Troncamento"}>
|
||||||
|
<p>
|
||||||
|
Metodo con cui gestire gli <b>underflow floating point</b>: le cifre meno significative
|
||||||
|
vengono <b>rimosse</b>.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
<pre>
|
||||||
|
1.00 → 1.0<br/>
|
||||||
|
1.01 → 1.0<br/>
|
||||||
|
1.10 → 1.1<br/>
|
||||||
|
1.11 → 1.1
|
||||||
|
</pre>
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Arrotondamento"}>
|
||||||
|
<p>
|
||||||
|
Metodo con cui gestire gli <b>underflow floating point</b>: se la cifra più significativa di
|
||||||
|
quelle che devono essere rimosse è 1, allora <b>aumenta di 1</b> anche quella meno signficativa
|
||||||
|
che viene tenuta.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
<pre>
|
||||||
|
1.00 → 1.0<br/>
|
||||||
|
1.01 → 1.0<br/>
|
||||||
|
1.10 → 1.1<br/>
|
||||||
|
1.11 → 10.
|
||||||
|
</pre>
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<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
|
||||||
|
di macchina</i>:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<ILatex>{r`E_r \leq k \cdot \beta^{1-t}`}</ILatex>
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<ILatex>\beta</ILatex> è uguale alla base utilizzata (solitamente 2).
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<ILatex>t</ILatex> è uguale al numero di cifre della mantissa.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<ILatex>k</ILatex> è uguale a <ILatex>1</ILatex> se il numero viene rappresentato per
|
||||||
|
troncamento oppure a <ILatex>{r`\frac{1}{2}`}</ILatex> se viene rappresentato per
|
||||||
|
arrotondamento.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"La funzione fl"}>
|
||||||
|
<p>
|
||||||
|
Associa un valore reale al suo <b>corrispondente valore floating point</b>, utilizzando uno dei
|
||||||
|
due metodi di gestione dell'undeflow.
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`fl(x) = (x)(1 + \epsilon_x)`}</PLatex>
|
||||||
|
<Example>
|
||||||
|
Indica che un valore è soggetto alla precisione di macchina.
|
||||||
|
<PLatex>{r`fl(1.11) = 1.1`}</PLatex>
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Un nuovo insieme"}>
|
||||||
|
<p>
|
||||||
|
L'insieme <ILatex>{r`\mathbb{F}`}</ILatex> è il sottoinsieme dei numeri reali rappresentabili in
|
||||||
|
floating point dalla macchina che stiamo usando.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Operazioni tra elementi di <ILatex>{r`\mathbb{F}`}</ILatex> producono risultati
|
||||||
|
in <ILatex>{r`\mathbb{R}`}</ILatex>, che però decaderanno nuovamente a elementi
|
||||||
|
di <ILatex>{r`\mathbb{F}`}</ILatex>, perdendo informazioni.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Il teorema della precisione di macchina si applica quindi anche ai risultati delle operazioni.
|
||||||
|
</p>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Caratteristiche delle operazioni di macchina"}>
|
||||||
|
<ul>
|
||||||
|
<li>Hanno <b>più elementi neutri</b>.</li>
|
||||||
|
<li>Un numero ha <b>più opposti</b>.</li>
|
||||||
|
<li><b>Non</b> sono associative.</li>
|
||||||
|
<li><b>Non</b> sono distributive.</li>
|
||||||
|
<li><b>Non</b> vale la legge di annullamento del prodotto.</li>
|
||||||
|
</ul>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Errori nelle operazioni di macchina"}>
|
||||||
|
<Panel title={"Errore inerente"}>
|
||||||
|
<p>
|
||||||
|
Errore derivato da underflow sui <b>dati</b>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Si indica con <ILatex>{r`\epsilon_{nome\_var}`}</ILatex>.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
L'errore sulla variabile <ILatex>x</ILatex> si indica con <ILatex>{r`\epsilon_{x}`}</ILatex>.
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Errore algoritmico"}>
|
||||||
|
<p>
|
||||||
|
Errore derivato da underflow durante l'<b>esecuzione dell'algoritmo</b>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Si indica con <ILatex>{r`\epsilon_{num\_passo}`}</ILatex>.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
L'errore al primo passo dell'algoritmo si indica con <ILatex>{r`\epsilon_{1}`}</ILatex>.
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Condizionamento"}>
|
||||||
|
<p>
|
||||||
|
Sensibilità di un problema all'<b>errore inerente</b>.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
<ILatex>{r`y = \frac{1}{x}`}</ILatex> è mal condizionato intorno allo 0 e ben condizionato
|
||||||
|
lontano dallo 0.
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Stabilità"}>
|
||||||
|
<p>
|
||||||
|
Sensibilità di un problema all'<b>errore algoritmico</b>.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
<p>
|
||||||
|
Cerchiamo un algoritmo che risolva <ILatex>{r`2x^* = 4`}</ILatex>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Calcolare prima <ILatex>{r`t = fl \left( \frac{1}{4} \right)`}</ILatex> e
|
||||||
|
poi <ILatex>{r`x = fl ( 2 \cdot t )`}</ILatex> porta a una perdita di precisione.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Calcolare direttamente <ILatex>{r`x = fl \left( \frac{2}{4} \right)`}</ILatex> non ha alcuna
|
||||||
|
perdita di precisione e rende l'algoritmo <b>più stabile</b> del precedente.
|
||||||
|
</p>
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Indice di condizionamento"}>
|
||||||
|
<p>
|
||||||
|
È il coefficiente di proporzionalità tra i dati e l'<b>errore inerente</b>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Essendo sempre maggiore di uno, si può dire che sia un coefficiente di amplificazione.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Minore è l'indice di condizionamento, meglio condizionato è un problema.
|
||||||
|
</p>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Indice algoritmico"}>
|
||||||
|
<p>
|
||||||
|
È il coefficiente di proporzionalità tra i dati e l'<b>errore algoritmico</b>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Essendo sempre maggiore di uno, si può dire che sia un coefficiente di amplificazione.
|
||||||
|
</p>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
</Fragment>
|
||||||
|
)
|
||||||
|
}
|
0
src/routes/CalcoloNumerico/00_Intro.less
Normal file
0
src/routes/CalcoloNumerico/00_Intro.less
Normal file
247
src/routes/CalcoloNumerico/01_SistemiLineari.js
Normal file
247
src/routes/CalcoloNumerico/01_SistemiLineari.js
Normal file
|
@ -0,0 +1,247 @@
|
||||||
|
import style from "./01_SistemiLineari.less"
|
||||||
|
import {ILatex, Panel, PLatex, Section, Todo} from "bluelib";
|
||||||
|
import Link from "../../components/Link";
|
||||||
|
import Example from "../../components/Example";
|
||||||
|
import {Fragment} from "preact";
|
||||||
|
|
||||||
|
const r = String.raw;
|
||||||
|
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<Section title={"Problema: Risoluzione di sistemi lineari"}>
|
||||||
|
<Panel title={"Descrizione"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Condizionamento"}>
|
||||||
|
<p>
|
||||||
|
Il condizionamento della risoluzione di sistemi lineari è:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`\frac{{\color{yellow} \|A\| \cdot \|A^{-1}\|} \cdot \| \Delta b \|}{\| b \|}`}</PLatex>
|
||||||
|
<p>
|
||||||
|
In particolare, è segnato in giallo nella formula il <b>numero di condizionamento</b>:
|
||||||
|
</p>
|
||||||
|
<PLatex>
|
||||||
|
{r`k(A) = \| A \| \cdot \| A^{-1} \|`}
|
||||||
|
</PLatex>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<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.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
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>.
|
||||||
|
</p>
|
||||||
|
</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.
|
||||||
|
</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.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Generalmente hanno una complessità temporale <ILatex>{r`O(n^2)`}</ILatex>.
|
||||||
|
</p>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<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:
|
||||||
|
</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:
|
||||||
|
</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>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={<span>Fattorizzazione <ILatex>{r`LU`}</ILatex></span>}>
|
||||||
|
<p>
|
||||||
|
Se la matrice dei coefficienti del sistema <b>non ha <Link href={"https://it.wikipedia.org/wiki/Minore_(algebra_lineare)"}>minori</Link> uguali a 0 <small>(eccetto l'ultimo)</small></b> allora è possibile <i>fattorizzarla</i> in due matrici: una <ILatex>{r`L`}</ILatex> triangolare inferiore, e una <ILatex>{r`U`}</ILatex> triangolare superiore.
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`A = L \cdot U`}</PLatex>
|
||||||
|
<Example>
|
||||||
|
Abbiamo fatto questo metodo in Algebra Lineare, chiamandolo <b>metodo di Gauss</b>.
|
||||||
|
</Example>
|
||||||
|
<p>
|
||||||
|
La matrice <ILatex>{r`L`}</ILatex> è così composta:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
L_{ii} = 1 \qquad \qquad (diagonale)\\
|
||||||
|
L_{ik} = -\frac{A_{ik}}{A_{kk}} \qquad (tri.\ infer.)
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<Example>
|
||||||
|
Sono i moltiplicatori usati per rendere annullare il triangolo inferiore!
|
||||||
|
</Example>
|
||||||
|
<p>
|
||||||
|
La matrice <ILatex>{r`U`}</ILatex> è così composta:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
U_{ik} = A_{ik} \quad se\ i \leq k \quad (tri.\ super.)\\
|
||||||
|
U_{ik} = 0 \qquad se\ i > k \quad (tri.\ infer.)
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Il sistema può essere poi risolto applicando due volte il metodo di sostituzione:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
L \cdot y = b\\
|
||||||
|
U \cdot x = y
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Questo metodo ha costo computazionale:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`{\color{Yellow} O\left(\frac{n^3}{3}\right)} + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
||||||
|
</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.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
Abbiamo fatto questo metodo in Algebra Lineare, chiamandolo <b>metodo di Gauss-Jordan</b>!
|
||||||
|
</Example>
|
||||||
|
<p>
|
||||||
|
Alla formula precedente si aggiunge una <Link href={"https://it.wikipedia.org/wiki/Matrice_di_permutazione"}>matrice di permutazione</Link> che indica quali righe sono state scambiate:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`P \cdot A = L \cdot U`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Questo metodo ha costo computazionale:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`{\color{Yellow} O\left(\frac{n^2}{2}\right)} + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
||||||
|
</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:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`P \cdot A \cdot Q = L \cdot U`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Questo metodo ha costo computazionale:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`{\color{Yellow} O\left(\frac{n^3}{3}\right)} + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
||||||
|
</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>:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`A = L \cdot D \cdot L^{-1}`}</PLatex>
|
||||||
|
<p>
|
||||||
|
In questo caso, si calcola solo la matrice L, utilizzando il <b>metodo di pavimentazione</b>.
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
d_{ii} = A_{ii} - \sum_{k=1}^{i-1} ( d_{kk} \cdot (l_{jk})^2 )\\
|
||||||
|
l_{ij} = \frac{A_{ij} - \sum_{k=1}^{j-1} l_{ik} \cdot d_{kk} \cdot l_{jk}}{d_ii}
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<Example>
|
||||||
|
<p>
|
||||||
|
La prima colonna della matrice sarà:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
d_{11} = A_{11}
|
||||||
|
l_{i1} = \frac{A_{i1}}{d_{11}}
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<p>
|
||||||
|
La seconda colonna della matrice sarà:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
d_{22} = A_{22} - d_{11} \cdot (l_{21})^2\\
|
||||||
|
l_{i2} = \frac{A_{i2} - l_{i1} \cdot d_{11} \cdot l_{21}}{d_ii}
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
</Example>
|
||||||
|
<p>
|
||||||
|
Questo metodo ha costo computazionale:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`{\color{Yellow} O\left(\frac{n^3}{6}\right)} + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
||||||
|
</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>:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`A = \mathcal{L} \cdot \mathcal{L}^{-1}`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Il <b>metodo di pavimentazione</b> diventa:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
l_{ii} = \sqrt{A_{ii} - \sum_{k=1}^{i-1} (l_{ik})^2 }\\
|
||||||
|
l_{ij} = \frac{A_{ij} - \sum_{k=1}^{j-1} l_{ik} \cdot l_{jk}}{l_ii}
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Questo metodo ha costo computazionale:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`O\left(\frac{n^3}{3}\right) + O\left(\frac{n^3}{3}\right) + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Trasformazione di Householder"}>
|
||||||
|
<p>
|
||||||
|
Matrice ricavata dalla seguente formula:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`U(v) = I - \frac{1}{\alpha} \cdot v \cdot v^T`}</PLatex>
|
||||||
|
<PLatex>{r`\alpha = \frac{1}{2} \| v \|_{(2)}^2`}</PLatex>
|
||||||
|
</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>.
|
||||||
|
</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>:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`A = Q \cdot R`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Le matrici si ottengono dal prodotto delle trasformazioni di Householder (<ILatex>{r`Q`}</ILatex> sulle colonne della matrice <ILatex>{r`A`}</ILatex>, trasformandola in una matrice triangolare superiore (<ILatex>{r`R`}</ILatex>).
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Una volta fattorizzata, il sistema si può risolvere con:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`
|
||||||
|
\begin{cases}
|
||||||
|
y = Q^T \cdot b\\
|
||||||
|
R \cdot x = y
|
||||||
|
\end{cases}
|
||||||
|
`}</PLatex>
|
||||||
|
<p>
|
||||||
|
Questo metodo ha costo computazionale:
|
||||||
|
</p>
|
||||||
|
<PLatex>{r`{\color{Yellow} O\left(\frac{2 \cdot n^3}{3}\right)} + 2 \cdot O\left(\frac{n^2}{2}\right)`}</PLatex>
|
||||||
|
<p>
|
||||||
|
<Todo>TODO: l'algoritmo con tau per ricavare la q se non è in memoria</Todo>
|
||||||
|
</p>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Metodi iterativi"}>
|
||||||
|
<Panel title={"Metodo di Jacobi"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Metodo di Gauss-Seidel"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
</Fragment>
|
||||||
|
)
|
||||||
|
}
|
0
src/routes/CalcoloNumerico/01_SistemiLineari.less
Normal file
0
src/routes/CalcoloNumerico/01_SistemiLineari.less
Normal file
45
src/routes/CalcoloNumerico/02_ZeriDiFunzione.js
Normal file
45
src/routes/CalcoloNumerico/02_ZeriDiFunzione.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import style from "./02_ZeriDiFunzione.less";
|
||||||
|
import {Fragment} from "preact";
|
||||||
|
import {Section, Panel, ILatex, BLatex, PLatex, Todo} from "bluelib";
|
||||||
|
|
||||||
|
const r = String.raw;
|
||||||
|
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<Section title={"Problema: Ricerca degli zeri di funzione"}>
|
||||||
|
<Panel title={"Descrizione"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Condizionamento"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section>
|
||||||
|
<Panel title={"Metodi dicotomici"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Metodo delle approssimazioni successive"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Metodi dicotomici"}>
|
||||||
|
<Panel title={"Metodo di bisezione"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Metodo regula falsi"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Metodo delle approssimazioni successive"}>
|
||||||
|
<Panel title={"Metodo generale"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Metodo di Newton"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
</Fragment>
|
||||||
|
)
|
||||||
|
}
|
0
src/routes/CalcoloNumerico/02_ZeriDiFunzione.less
Normal file
0
src/routes/CalcoloNumerico/02_ZeriDiFunzione.less
Normal file
46
src/routes/CalcoloNumerico/03_Interpolazione.js
Normal file
46
src/routes/CalcoloNumerico/03_Interpolazione.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
import style from "./03_Interpolazione.less";
|
||||||
|
import {Fragment} from "preact";
|
||||||
|
import {Section, Panel, ILatex, BLatex, PLatex, Todo} from "bluelib";
|
||||||
|
import Example from "../../components/Example";
|
||||||
|
|
||||||
|
const r = String.raw;
|
||||||
|
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
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.
|
||||||
|
</p>
|
||||||
|
<Example>
|
||||||
|
È utile in un sacco di casi! Ad esempio, quando si vuole scalare un'immagine.
|
||||||
|
</Example>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Metodi di interpolazione"}>
|
||||||
|
<Panel title={"Metodo dei coefficienti indeterminati"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Metodo di Lagrange"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
<Section title={"Resto di interpolazione"}>
|
||||||
|
<Panel title={"Definizione"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Stima"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Fenomeno di Runge"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
<Panel title={"Nodi di Chebychev"}>
|
||||||
|
<Todo>TODO</Todo>
|
||||||
|
</Panel>
|
||||||
|
</Section>
|
||||||
|
</Fragment>
|
||||||
|
)
|
||||||
|
}
|
0
src/routes/CalcoloNumerico/03_Interpolazione.less
Normal file
0
src/routes/CalcoloNumerico/03_Interpolazione.less
Normal file
23
src/routes/CalcoloNumerico/index.js
Normal file
23
src/routes/CalcoloNumerico/index.js
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
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";
|
||||||
|
|
||||||
|
const r = String.raw;
|
||||||
|
|
||||||
|
|
||||||
|
export default function (props) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<h1>Calcolo Numerico</h1>
|
||||||
|
<Intro/>
|
||||||
|
<SistemiLineari/>
|
||||||
|
<ZeriDiFunzione/>
|
||||||
|
<Interpolazione/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
Loading…
Reference in a new issue