[Python] grafico e distanza euclidea
import matplotlib.pyplot as plt import numpy as np def grafico(velocità_Aereo_A, velocità_Aereo_B, distanza_Aereo_A, distanza_Aereo_B) : def main() : velocità_Aereo_A = 640 # km/h velocità_Aereo_B = 320 # km/h distanza_Aereo_A = 1600 # km distanza_Aereo_B = 820 # km main()

Buonasera, dovrei realizzare una funzione grafico che come scritto nell'immagine diagrammi la distanza D fra gli aeri in funzione del tempo.
So che la distanza euclidea si calcola cosi:
D = sqrt((distanza_Aereo_A)^2 + (distanza_Aereo_B)^2)
Ma non so proprio come scriverla la funzione, qualcuno potrebbe aiutarmi o darmi qualche spunto.
Grazie mille
Risposte
"crynow":
So che la distanza euclidea si calcola cosi:
D = sqrt((distanza_Aereo_A)^2 + (distanza_Aereo_B)^2)
Ma non so proprio come scriverla la funzione, qualcuno potrebbe aiutarmi o darmi qualche spunto.
Una cosa così. Data la richiesta, dovresti avere affrontato a lezione l'argomento "funzioni".
def eucl_dist(dA,dB): return np.sqrt(dA**2 + dB**2)
Abbiamo che
\[ d_A = d_{0, A} - v_A\,t \quad \text{e} \quad d_B = d_{0,B} - v_B\,t \]
da cui la distanza euclidea sarà uguale a
\[ \sqrt{d_A^2 + d_B^2} = \sqrt{ (d_{0, A} - v_A\,t)^2 + (d_{0,B} - v_B\,t)^2 } \]
Per il calcolo del minimo si può ignorare la radice quadrata (il minimo si troverà allo stesso valore di \(t\)) e risolvere la seguente
\[ \frac{d}{dt} \bigl((d_{0, A} - v_A\,t)^2 + (d_{0,B} - v_B\,t)^2\bigr) = - 2\,d_{0,A}\,v_A - 2\,d_{0,B}\,v_B + 2\,t\,(v_A^2 + v_B^2) = 0 \]
ottenendo
\[ t_{min} = = \frac{d_{0,A}\,v_A + d_{0, B}\,v_B}{v_A^2 + v_B^2} \]
Nel tuo caso hai \(t_{min} = 9045 \mathrm{s}\) se non ho sbagliato i calcoli. Sono \(2\mathrm{h}\;30\mathrm{m}\;45\mathrm{s}\). A questo punto puoi suddividere questo intervallo in un certo numero di tempi intermedi (usando la funzione linspace), valutare la formula della distanza euclidea a questi tempi e infine usare la funzione plot per visualizzare la funzione.
Un'alternativa è quella di scegliere un intervallo di campionamento e fermarsi quando il valore cresce per la prima volta. La funzione non ha infatti altri minimi locali. A quel punto devi solo visualizzare i valori calcolati.
\[ d_A = d_{0, A} - v_A\,t \quad \text{e} \quad d_B = d_{0,B} - v_B\,t \]
da cui la distanza euclidea sarà uguale a
\[ \sqrt{d_A^2 + d_B^2} = \sqrt{ (d_{0, A} - v_A\,t)^2 + (d_{0,B} - v_B\,t)^2 } \]
Per il calcolo del minimo si può ignorare la radice quadrata (il minimo si troverà allo stesso valore di \(t\)) e risolvere la seguente
\[ \frac{d}{dt} \bigl((d_{0, A} - v_A\,t)^2 + (d_{0,B} - v_B\,t)^2\bigr) = - 2\,d_{0,A}\,v_A - 2\,d_{0,B}\,v_B + 2\,t\,(v_A^2 + v_B^2) = 0 \]
ottenendo
\[ t_{min} = = \frac{d_{0,A}\,v_A + d_{0, B}\,v_B}{v_A^2 + v_B^2} \]
Nel tuo caso hai \(t_{min} = 9045 \mathrm{s}\) se non ho sbagliato i calcoli. Sono \(2\mathrm{h}\;30\mathrm{m}\;45\mathrm{s}\). A questo punto puoi suddividere questo intervallo in un certo numero di tempi intermedi (usando la funzione linspace), valutare la formula della distanza euclidea a questi tempi e infine usare la funzione plot per visualizzare la funzione.
Un'alternativa è quella di scegliere un intervallo di campionamento e fermarsi quando il valore cresce per la prima volta. La funzione non ha infatti altri minimi locali. A quel punto devi solo visualizzare i valori calcolati.