Radice di un double con bisezione
Si scriva un metodo che calcoli la radice quadrata di un double sfruttando
un'implementazione ricorsiva dell'algoritmo di bisezione.
Allora io ho pensato che il metodo dovrà risolvere un' equazione del tipo : $f(x) = x^2 - 4,1 = 0 $ solamente che mi serve l'intervallo...che intervallo scelgo inizialmente ? [0,..] lo lascio generico? [a,b]?
un'implementazione ricorsiva dell'algoritmo di bisezione.
Allora io ho pensato che il metodo dovrà risolvere un' equazione del tipo : $f(x) = x^2 - 4,1 = 0 $ solamente che mi serve l'intervallo...che intervallo scelgo inizialmente ? [0,..] lo lascio generico? [a,b]?
Risposte
Direi che la radice quadrata di un numero \(x\) è sempre nell'intervallo \((0, \max(x,1)]\) (la presenza di \(\max\) è dovuta al fatto che \(\sqrt{x} > x\) nell'intervallo \((0,1)\)). In pratica però, nel caso \(x = 1\), lo zero di tale funzione corrisponde con uno dei due estremi dell'intervallo ed è allora forse meglio cercare in un intervallo come \((0, x+1)\) (nota come non è più necessario il massimo). Puoi comunque anche implementare il metodo richiedendo il passaggio di un intervallo. La decisione spetta solo a te, non c'è un metodo corretto per farlo.
Grazie molte apatriarca
ma quindi hai messo MAX perchè i due intervalli possibili possono essere : ( 0, x ) oppure ( 0,1) giusto?

In realtà i possibili intervalli, dividendo i vari casi, possono essere ridotti ai seguenti.
\[\sqrt{x} \in \begin{cases} (x, 1) & \text{se } x \in (0, 1) \\ 1 & \text{se } x = 1 \\ (1, x) & \text{se } x > 1 \end{cases}\]
Questi intervalli si possono riscrivere nella forma \( [\min(x, 1), \max(x, 1)]. \) Ma scrivi l'algoritmo in funzione di un generico intervallo \([a,b]\).
\[\sqrt{x} \in \begin{cases} (x, 1) & \text{se } x \in (0, 1) \\ 1 & \text{se } x = 1 \\ (1, x) & \text{se } x > 1 \end{cases}\]
Questi intervalli si possono riscrivere nella forma \( [\min(x, 1), \max(x, 1)]. \) Ma scrivi l'algoritmo in funzione di un generico intervallo \([a,b]\).
okey grazieee !

sempre con questo metodo ho trovato un esercizio in qui c'era scritto
double precisione =0.001fcosa sarebbe questo f ???
"valesyle92":
sempre con questo metodo ho trovato un esercizio in qui c'era scrittodouble precisione =0.001fcosa sarebbe questo f ???
quella f (F) si chiama "literal float" è per marcare che stai utilizzando un numero standardizzato come float.
Informalmente senza quella F quel numero utilizzerebbe l'intero spazio a disposizione del double (diciamo che è un casting).
Le lettere a disposizione sono D (double), L (long), con lo stesso significato. E' per la precisione della virgola mobile.
Io conosco questo significato, forse ne esiste anche un altro.

Il significato è proprio quello. La f serve per indicare che quel numero è di tipo float. D'altra parte, essendo la variabile di tipo double, è difficile motivare la sua presenza. Avrebbe avuto più senso scrivere più semplicemente 0.001 senza la f.
Supponiamo che risulti:
\(\displaystyle n^2 < x < m^2 \) (supponendo \(\displaystyle n \),\(\displaystyle m \) e \(\displaystyle x \) positivi) allora risulterà:
\(\displaystyle n < \sqrt{x} < m \)
Usare gli interi e trovare i due quadrati più vicini a \(\displaystyle x \) è, computazionalmente, piuttosto lungo. D'altra parte risulta invece molto più fattibile calcolare le potenze pari di due che lo circondano.
In altre parole ricavo facilmente la relazione \(\displaystyle 2^{2n} < x < 2^{2(n+1)} \). Grazie a questa posso usare l'intervallo \(\displaystyle \left(2^{n}, 2^{n+1}\right) \)
P.S: Se \(\displaystyle x < 1 \) conviene prendere direttamente \(\displaystyle (0,1) \) perché il metodo scritto sopra non ha senso (a meno di prendere \(\displaystyle n \) e \(\displaystyle m \) razionali).
\(\displaystyle n^2 < x < m^2 \) (supponendo \(\displaystyle n \),\(\displaystyle m \) e \(\displaystyle x \) positivi) allora risulterà:
\(\displaystyle n < \sqrt{x} < m \)
Usare gli interi e trovare i due quadrati più vicini a \(\displaystyle x \) è, computazionalmente, piuttosto lungo. D'altra parte risulta invece molto più fattibile calcolare le potenze pari di due che lo circondano.
In altre parole ricavo facilmente la relazione \(\displaystyle 2^{2n} < x < 2^{2(n+1)} \). Grazie a questa posso usare l'intervallo \(\displaystyle \left(2^{n}, 2^{n+1}\right) \)
P.S: Se \(\displaystyle x < 1 \) conviene prendere direttamente \(\displaystyle (0,1) \) perché il metodo scritto sopra non ha senso (a meno di prendere \(\displaystyle n \) e \(\displaystyle m \) razionali).
grazie mille a tutti!!!!
:):):):)
