Distanza tra due punti generici Matlab!

Messaggioda kekio89 » 29/11/2018, 14:04

Ciao a tutti!!
Mi servirebbe un aiuto in quanto non sono molto pratico di Matlab.
Il mio problema è quello di trovare la distanza tra due punti generici del piano, quindi P1(x1,y1) e P2(x2,y2) con 0<x<1 e 0<y<1 considerando uno step di 0.01 sia per la x che per la y. La funzione distanza è d= y1+(x2-x1)+y2. Come posso creare un codice che mi calcoli tutte le possibili combinazioni? Considerando che i miei punti iniziali sono 100*100 e i punti di destinazione sono 100*100. Quindi un totale di 100000000 di coppie!!!
Se il calcolo dovesse risultare molto laborioso per Matlab posso sostituire il passo con 0.05.

Grazie mille in anticipo e mi scuso se non sono stato chiaro o se non è la sezione corretta!

Francesco
kekio89
Starting Member
Starting Member
 
Messaggio: 1 di 12
Iscritto il: 29/11/2018, 14:00

Re: Distanza tra due punti generici Matlab!

Messaggioda apatriarca » 29/11/2018, 14:20

Qual'è lo scopo di tutti questi calcoli? Il numero di punti è chiaramente molto grande e probabilmente non è necessario.

P.S. La funzione che hai scritto non mi sembra rispettare le normali proprietà di una distanza. È per esempio evidente che se calcoli la distanza di un punto con se stesso non ottieni zero e che la funzione non è simmetrica nei due input.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5160 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Distanza tra due punti generici Matlab!

Messaggioda kekio89 » 29/11/2018, 14:37

apatriarca ha scritto:Qual'è lo scopo di tutti questi calcoli? Il numero di punti è chiaramente molto grande e probabilmente non è necessario.

P.S. La funzione che hai scritto non mi sembra rispettare le normali proprietà di una distanza. È per esempio evidente che se calcoli la distanza di un punto con se stesso non ottieni zero e che la funzione non è simmetrica nei due input.


I calcoli mi servono per la mia tesi magistrale. Diciamo che adesso il problema non è contestualizzato e quindi può risultare insensato, ma fa parte di un discorso più grande. In breve posso dirvi che mi serve calcolare il travel between tra due punti all'interno di un magazzino. Oltre a quella funzione distanza ne ho altre due da dover utilizzare, per andare a confermare i risultati ottenuti con il metodo numerico. Non so se adesso è un po' più chiaro il concetto. Se hai altre domande chiedi pure! :D
Quindi è veramente difficile farlo? Ahah! Grazie!
kekio89
Starting Member
Starting Member
 
Messaggio: 2 di 12
Iscritto il: 29/11/2018, 14:00

Re: Distanza tra due punti generici Matlab!

Messaggioda apatriarca » 29/11/2018, 15:10

Non è una questione di difficoltà a scriverlo, si tratta semplicemente di fare qualche ciclo sulle coordinate, ma piuttosto se sia necessario. A seconda di quali statistiche dei dati vuoi calcolare, c'è probabilmente un metodo migliore che calcolare tutti quei valori. È per questo che ti sto chiedendo a che ti serve.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5161 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Distanza tra due punti generici Matlab!

Messaggioda kekio89 » 29/11/2018, 15:19

apatriarca ha scritto:Non è una questione di difficoltà a scriverlo, si tratta semplicemente di fare qualche ciclo sulle coordinate, ma piuttosto se sia necessario. A seconda di quali statistiche dei dati vuoi calcolare, c'è probabilmente un metodo migliore che calcolare tutti quei valori. È per questo che ti sto chiedendo a che ti serve.


Di necessario è necessario perchè mi è stato richiesto dal mio relatore che sicuramente ne saprà più di me sull'argomento..Ahah!!! E comunque, a parte tutto, mi serve perchè devo confermare dei dati e poichè è una tesi di ricerca devo essere (e anche il mio relatore vuole esserlo) sicuro che ciò che abbiamo ottenuto sia veritiero e corretto e l'unico modo per verificarlo è questo. Devo calcolare la media di tutti i percorsi possibili, ma ripeto ciò che ho chiesto qui è solo una parte dei calcoli. Puoi aiutarmi per favore? Grazie! :D
kekio89
Starting Member
Starting Member
 
Messaggio: 3 di 12
Iscritto il: 29/11/2018, 14:00

Re: Distanza tra due punti generici Matlab!

Messaggioda apatriarca » 29/11/2018, 16:01

Il modo più semplice per calcolare il tuo valore è qualcosa del tipo:
Codice:
N = 101
coords = linspace(0, 1, N);
tot = 0;
for x1=coords
  for y1=coords
    for x2=coords
      for y2=coords
        tot = tot + y1 + x2 - x1 + y2;
      end
    end
  end
end
media = tot / (N*N*N*N);

Si può tuttavia calcolare abbastanza facilmente che con \(N \to \infty\) il valore della media tende a \(1\). Hai infatti che l'integrale corrispondente si semplifica in
\[
\iiiint_{I^4} (y_1 + x_2 - x_1 + y_2)\,dy_1\,dx_2\,dx_1\,dy_2 = \int_0^1 y_1\,dy_1 + \int_0^1 x_2\,dx_2 - \int_0^1 x_1\,dx_1 + \int_0^1 y_2\,dy_2 \]
che si può risolvere molto facilmente.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5162 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Distanza tra due punti generici Matlab!

Messaggioda kekio89 » 29/11/2018, 16:32

apatriarca ha scritto:Il modo più semplice per calcolare il tuo valore è qualcosa del tipo:
Codice:
N = 101
coords = linspace(0, 1, N);
tot = 0;
for x1=coords
  for y1=coords
    for x2=coords
      for y2=coords
        tot = tot + y1 + x2 - x1 + y2;
      end
    end
  end
end
media = tot / (N*N*N*N);

Si può tuttavia calcolare abbastanza facilmente che con \(N \to \infty\) il valore della media tende a \(1\). Hai infatti che l'integrale corrispondente si semplifica in
\[
\iiiint_{I^4} (y_1 + x_2 - x_1 + y_2)\,dy_1\,dx_2\,dx_1\,dy_2 = \int_0^1 y_1\,dy_1 + \int_0^1 x_2\,dx_2 - \int_0^1 x_1\,dx_1 + \int_0^1 y_2\,dy_2 \]
che si può risolvere molto facilmente.


Allora, innanzitutto grazie per la risposta! Volevo chiederti, ma questo codice considera il fatto che x2 possa essere minore di x1? Devo aggiungere il valore assoluto nella funzione? E poi..dovrei fare la stessa cosa con la funzione

x1*tan(alfa)-y1+(x2-x1)/cos(alfa)+x2*tan(alfa)-y2. Basta cambiare la parte della funzione giusto? Ma se volessi sapere i risultati di ogni iterezione, come posso modificarlo? Cioè se dovesse servirmi non solo il totale, ma ogni singola iterazione?
kekio89
Starting Member
Starting Member
 
Messaggio: 4 di 12
Iscritto il: 29/11/2018, 14:00

Re: Distanza tra due punti generici Matlab!

Messaggioda kekio89 » 29/11/2018, 17:39

Mi spiego meglio. Io ho questi generici punti P1 e P2. Per ogni possibile coppia devo calcolare i tre possibili itinerari con le tre funzioni:

\(\displaystyle y1+x2-x1+y2 \)
\(\displaystyle x1*tan(alfa)-y1+(x2-x1)/cos(alfa)+x2*tan(alfa)-y2 \)
\(\displaystyle 2-y1-y2+(x2-x1) \)

Per ogni coppia di punti mi servirebbe il valore relativo ad ogni funzione, perchè poi di questi tre valori per coppia devo prendere il minore. Dovrò sommare i minori di ogni coppia e fare il valore medio. Per questo chiedevo come è possibile modificare il codice in modo tale da avere come output i singoli valori.

Grazie di nuovo!
kekio89
Starting Member
Starting Member
 
Messaggio: 5 di 12
Iscritto il: 29/11/2018, 14:00

Re: Distanza tra due punti generici Matlab!

Messaggioda apatriarca » 30/11/2018, 21:19

Ciao, il problema è che avrai \(N^4 \times 3\) valori. Se \(N = 100\) significa \(300\,000\,000\) di valori. Siccome matlab memorizza ogni valore intero su \(8\) byte significa che avrai un array di \(2.4\,\mathrm{GB}.\) Non ho mai lavorato con array di queste dimensioni in Matlab ma suppongo sia possibile. Ci impiegherà comunque un po' di tempo e immagino potrebbe valer a questo punto la pena di farlo con un qualche linguaggio più performante. Nel codice devi semplicemente creare l'array all'inizio e fare un ciclo sugli indici invece che sui valori.

E' da un po' che non lavoro con Matlab (negli ultimi anni ho principalmente usato Python o C++) ma se provi a postare quello che stai provando a fare forse ti posso aiutare. Potrebbe convenire partire con un numero di valori inferiori (per esempio 10 suddivisioni) durante lo sviluppo. Per chiarezza ti interessa quindi trovare il valore medio di
\[ \Bigl(y_1 + x_2 - x_1 + y_2\Bigr) \wedge \Bigl(x_1\,\tan\alpha - y_1 + \frac{x_2 - x_1}{\cos\alpha} + x_2\,\tan\alpha - y_2\Bigr) \wedge \Bigl(2 - y_1 - y_2 + (x_2 - x_1)\Bigl) \]
dove ho usato \(\wedge\) per indicare il minimo quindi? Che cos'è \(\alpha\)? Se è una costante hai allora tre funzioni che sono somma di addendi che dipendono da una sola coordinata. Dal punto di vista puramente analitico è quindi possibile affrontare questo problema trovando le regioni in cui ogni funzione è quella minima e integrare queste funzioni su tali regioni separatamente. Non è particolarmente difficile farlo ma se il tuo professore ritiene che fare i calcoli sia il metodo corretto continua pure in questo modo.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5163 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Distanza tra due punti generici Matlab!

Messaggioda kekio89 » 01/12/2018, 10:17

Ciao e grazie nuovamente per la risposta. Sì, in pratica mi servirebbe trovare il minimo tra i tre itinerari diversi per ogni coppia di punti. Sì, alfa è una costante che abbiamo calcolato precedentemente. Comunque, credo di aver risolto.Ho iniziato prima con passo di 0.2, poi di 0.05 e adesso ho provato a fare 0.02, vediamo cosa ne uscirà! Analiticamente l'avevamo già svolto, diciamo che ci serviva una conferma di altro tipo. Se dovessi avere altri dubbi ti scrivo!
Grazie ancora!
kekio89
Starting Member
Starting Member
 
Messaggio: 6 di 12
Iscritto il: 29/11/2018, 14:00


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite