La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Calcolo dell’arcoseno col metodo dicotomico

Presentazioni simili


Presentazione sul tema: "Calcolo dell’arcoseno col metodo dicotomico"— Transcript della presentazione:

1 Calcolo dell’arcoseno col metodo dicotomico
INVSIN Calcolo dell’arcoseno col metodo dicotomico

2 Esercitazione 6, esercizio 7
Si realizzi un algoritmo in grado di tabulare il valore della funzione arcsin(x) per x compreso nell'intervallo [a,b] con passo c. I valori di a, b, c siano forniti in input da tastiera. Non si utilizzi a tale scopo la funzione arcsin() di libreria, ma si realizzi una funzione invsin(z1,z2,k,e) in grado di calcolarla col metodo di bisezione.

3 Studio del problema in matematica.
Definizione: z = sin()  = arcsin(z)

4 La funzione seno:

5 Per l’adozione del metodo dicotomico:
Devo considerare un intervallo in cui la funzione è monotona: Nell’intervallo -/2  + /2 la funzione seno è monotona crescente valori assunti: -1  +1

6 Applicazione metodo dicotomico
Fissato un k, devo trovare un : Pongo z1 = -/2, z2 = +/2 Calcolo il valore media=(z1+z2)/2 Se sin(media) = k, media e’ il risultato cercato, altrimenti Se sin(media) è > k, sposto z2 a media, altrimenti sposto z1 a media.

7 Problemi di terminazione
Poiché sin(media) = k potrebbe non verificarsi mai (lavoro con reali), posso porre: |sin(media) – k| < epsilon Svantaggi: applico la precisione alla funzione inversa, e potrei essere in una zona quasi piatta.

8 Problemi di terminazione (2)
In alternativa, potrei verificare se z1 e z2 sono troppo vicini, ad esempio: z2 – z1 < 2 * epsilon Altro metodo ancora: contare le iterazioni, se si supera una prefissata soglia si prende per buono l’ultimo valore. Nota: spesso nel metodo dicotomico si usano tutti e tre i criteri, per avere un algoritmo robusto.

9 Funzione invsin() Double invsin(double a, double b, double k, double precisione) { float media; int finito; finito = FALSE; while(!finito) media = (a+b)/2; if(fabs(sin(media)-k) > precisione) finito = TRUE; else if(sin(media) > k) b = media; a = media; } return(media);

10 ATTENZIONE Visto che chiede la precisione dalla tastiera, se fossero stati usati i float, l'utente avrebbe dovuto essere avvertito che la precisione deve essere data al massimo su 7 cifre (il famoso epsilon della macchina), altrimenti il programma potrebbe andare in loop.

11 ATTENZIONE(1) Per quanto riguarda pigreco, il C definisce in math.h le costanti M_PI, M_PI_2 e M_PI_4 rispettivamente per pi greco, pi greco mezzi, pi greco quarti (ATTENZIONE: non e' compatibile con  ISO C90, occorre andare in: Setting Compile e togliere lo spunto in terza posizione, corrispondente a -ansi).


Scaricare ppt "Calcolo dell’arcoseno col metodo dicotomico"

Presentazioni simili


Annunci Google