Scarica CALCOLO NUMERICO INTR e più Dispense in PDF di Calcolo Numerico solo su Docsity!
ALCUNI ESEMPI DI^ ALCUNI ESEMPI DI
ALGORITMI DI CALCOLO NUMERICOALGORITMI DI CALCOLO NUMERICO La risoluzione di modelli matematici complessi richiedespesso l’uso di metodi di
calcolo approssimato
calcolo “numerico”
Riferimenti Bibliografici:^ ^ L.M. Barone, E. Marinari, G. Organtini, F. Ricci-Tersenghi,^ Programmazione Scientifica
, Pearson Education,
Milano, 2006 G. Monegato,
Fondamenti di Calcolo Numerico
Libreria Editrice Universitaria Levrotto&Bella, Torino
CALCOLO NUMERICO^ CALCOLO NUMERICO
^ Si usa quando:^ ^ non
esistono
algoritmi esatti di risoluzione
, oppure
^ gli algoritmi esatti
non sono efficienti
(tempo, memoria): alto
costo computazionale Soluzione di problemi attraverso
algoritmi euristici o
approssimanti
^ Determinano soluzioni "approssimate" del problema Ad esempio, si basano su tecniche del tipo: ^ discretizzazione
di domini continui in domini discreti
^ approssimazioni successive
=> metodi
iterativi
APPROSSIMAZIONI SUCCESSIVE^ APPROSSIMAZIONI SUCCESSIVE ^ valore iniziale V
(di primo tentativo) 0 ^ formula iterativa => ottengo V
1
^ valore di secondo tentativo V
1
^ formula iterativa => ottengo V
2
^ valore di terzo tentativo V
2
....... L'algoritmo termina quando due valori consecutivi V
e Vi^ i+
sono^ "sufficientemente vicini"
^ | V^ i+
- V^ |<= i^
ε^
scarto assolutoscarto assoluto
^ | (V
- V) / V i+1 i
| <=^ ε i+
scartoscarto relativo
relativo
Il valore
ε^ rappresenta la precisione desiderata e vienestabilito arbitrariamente
Note:^ ^ Il^
valore di primo tentativo
dovrebbe essere stimato nel
modo migliore possibile
(conoscenza del problema, ordine
di grandezza, segno, …) Se ogni successiva approssimazione è più vicina allarisposta corretta e la differenza tende a calare ad ognipasso, l'iterazione converge
(come capirlo su un numero
APPROSSIMAZIONI SUCCESSIVE^ APPROSSIMAZIONI SUCCESSIVE finito di iterazioni?)^ ^ Non tutte le iterazioni convergono (divergenti) o^ convergono in modo soddisfacente per essere utili
CALCOLO DELLA RADICE QUADRATA^ CALCOLO DELLA RADICE QUADRATAEsempio
: R = 9 Q1 = 9/2 = 4.5 Q2 = (4.5 + 9/4.5)/2 = (6.5)/2 = 3.25 Q3=(3.25+9/(3.25))=(3.25+ 2.769)/2=(6.019)/2=3.0095 .......
Radice Quadrata: ALGORITMO IN C^ Radice Quadrata: ALGORITMO IN C^ #include <stdio.h>#include <math.h>#define MAX 1000#define EPS 0.00001double radice_q(double R){^ double Q, Qold;int i, fine=0;Qold=R/2;for (i=0; i<MAX && !fine; i++){
Q=(Qold + R/Qold)/2;if (abs((Q-Qold)/Q)<EPS)
fine=1; else Qold=Q;} if (i>=MAX)
printf("Numero iterazioni eccessivo\n"); return Q;}
ESEMPIO: seno() DI UN ANGOLO^ ESEMPIO: seno() DI UN ANGOLO ^ Dato un angolo X espresso in radianti, calcolare:
S = seno(X)
^ Sviluppo in Serie di Taylor:^3 X^ S = X^ −^ +3!^
57 X X^ −^ 5!^ 7!
+^ ...^ =^
Xi (^) (−1). 2 i^ +^1 (2 i +^ 1)!
∞ ∑ i =^0
⇒^ S^ =^
∞ T ∑ i i =^0
T =^ (−1) i^
2 i^ +^1 X (^) i (2 i +^ 1)!
i^ = −(−1) 2( iX (^) − 1 −1)+^1 ⋅^ (2( i − 1)^ +^ 1)!^
(^2) X =(2 i + 1)2 i^
= − Ti^ −^1 ⋅
(^2) X (^) (2 i + 1)2 i
SENO DI UN ANGOLO^ SENO DI UN ANGOLO
Si arresta lo sviluppo in serie dopo M termini,con M (<= MAXITER) tale che:Passo iterativo:^ ^ Termine i-esimo:^ Ti = (-1)
i^ 2i+1^ X^ / (2i+1)!
i-1= -(-1)
2(i-1)+1(X^
/(2(i-1)+1)! ) *
2 X /((2i+1)2i)
2 = - X /((2i+1)2i )* T
i- se^ S
=^ (−1)
2 i^ +^1 MX i ∑( 2 i +^ 1)! i = 0
2 M^ +^1 X ≤(2 M^ +^ 1)!^
INVOCAZIONE^ INVOCAZIONE
Ad esempio: main(){^ double
v; printf("Dammi
x:^ "); scanf("%lf",
&v); printf("Seno
di^ %lf:
%lf^ (valore
atteso
%lf)\n",
v,^ seno(v),
sin(v));
}
EQUAZIONI: SOLUZIONI APPROSSIMATE^ EQUAZIONI: SOLUZIONI APPROSSIMATE^ ^ In problemi di ingegneria
(e anche talora di ingegneria
chimica…)
è necessario spesso trovare i valori delle
radici di un'equazione Per equazioni lineari o quadratiche la soluzione èsemplice
(esiste forma analitica chiusa)
^ aX + b = 0 ==>
X = -b/a
2 aX + bX + c = 0 ==> X = -( b + SQRT(b 1
2 -4ac))/2a
X^ = -( b - SQRT(b^2
2 -4ac))/2a
[^ Hp: ^
2 ∆ = (b
-4ac) >= 0 ]
FUNZIONI CONTINUE: PROPRIETÀ^ FUNZIONI CONTINUE: PROPRIET
À
Proprietà
Se una funzione continua
f(x)^ assume in due punti
a^ e^ b
valori di segno opposto
,^ esiste almeno un valore
ξ^ (o
un numero dispari di punti)
compreso fra a e b in cui
f(x)=
a^
b
f
x
METODO DELLA BISEZIONE^ METODO DELLA BISEZIONE
^ Dividiamo l'intervallo [a,b] a metà
c = (a + b)/
->^ calcoliamo
f(c)
^ Se f(c) = 0, la radice è trovata (procedimento terminato) ^ Se f(c) > 0, trascuriamo l'intervallo destro [c, b], poniamo
b = c
e^ ripetiamo la procedura nel nuovo intervallo [a, b] Se f(c) < 0, trascuriamo l'intervallo sinistro [a, c], poniamo
a =
c^ e^ ripetiamo la procedura nel nuovo intervallo [a, b] Proseguendo in questo modo o si trova la radice esatta o siraggiunge un intervallo
[a, b] < 2
ε
dove^ ε^ è la precisione desiderata
^ In^ pratica,
si^ approssima
la^ funzione
con^ la
retta^
che
passa per i punti (a, sign(f(a))), (b, sign(f(b)))
a^
b
c
f
x
… for^ (i=0;
i<JMAX
&&^ !fine;
i++){
Fa=myfun(Xa);
Fb=myfun(Xb); Xm=(Xa+Xb)0.5;Fm=myfun(Xm);if^ (FmFa<0)
else^ Xa=Xm;if (Xa!=Xm) Xb=Xm; if^ ((abs(Xb-Xa)<
xacc) ||^ (Fm==0))
fine=1;
} if (fine)^ return
Xm; else{ printf("troppe
iterazioni\n"); exit();
METODO DELLA BISEZIONE^ METODO DELLA BISEZIONE
CALCOLO DELLE RADICI:^ CALCOLO DELLE RADICI:
CORDE, SECANTI, NEWTON-CORDE, SECANTI, NEWTON
-RAPHSONRAPHSON
Idea di Base:^ Detto
ξ^ lo zero di
f^ (appartenente all’intervallo [a,b]), sia
x^ una arbitraria approssimazione dello zero^0
nell’intervallo [a,b]: Si approssima la funzione con una retta passante per( x^ ,f(x^ ))0,^0
la cui equazione è^ y=K
(x-x^ ) +f(x 0 0
^ L’intersezione tra la retta e l’asse delle ascisse dà originealla nuova approssimazione
x della radice^1
f
x