Cambio asse

di il
4 risposte

Cambio asse

Ciao a tutti, ho un problema che dovrebbe essere molto semplice ma essendo alle prime armi fatico a risolvere:
Ho la funzione depth che è lunga 4742 elementi e va da 447.9036 m a 1170.432 m. Questa è stata campionata con uno step di 0.1524 m lungo un pozzo. Vorrei prendere un segmento di questa e dare in input al programma la profondità in metri del primo e secondo campione e vorrei ricevere in output il numero dei campioni corrispondenti. Il mio problema principiale è che non essendo continua, non prende tutti i valori di profondità che gli posso chiedere ma solo quelli ai quali è stata campionata. Vorrei quindi fare in modo che nel caso in cui non gli dia un valore in metri ''conosciuto'', lo approssimi al primo valore che conosce...
grazie a tutti !

4 Risposte

  • Re: Cambio asse

    Prima di tutto, hai scritto almeno una parte del codice?
    Puoi pubblicarlo?

    Dovresti aggiungere qualche dettaglio perchè la domanda non è chiara:

    [*] potresti pubblicare un esempio di input (segmento selezionato) e output desiderato?
    [*] quella che chiami "funzione" è un array di dati?
    [*] cosa intendi con dare in input al programma la profondità in metri del primo e secondo campione ?
    [*] selezioni due punti della funzione (array)?
    [*] selezioni due valori compresi tra il valore minimo e quello massimo dell'array, ma che non corrispondono a due campioni?
    [*] cosa intendi con "non prende tutti i valori di profondità che gli posso chiedere "
    [*] cosa intendi con "Vorrei quindi fare in modo che nel caso in cui non gli dia un valore in metri ''conosciuto'', lo approssimi al primo valore che conosce"

    Hope this helps.
  • Re: Cambio asse

    Ok, grazie, cerco di spiegarmi...
    Posso fare un esempio con dati simili ma non con quelli di cui parlavo (la sostanza è ovv uguale), per quanto riguarda lo script sono proprio all'inizio:

    step=0.152;
    depth=[400:step:410]; %

    [*]l'input è depth che mi fornisce le info sulla profondità da 400 a 410 m campionati ogni 0.15m. l'output è una funzione depth1 che esista nell'intervallo che vada dai 403 m ai 408m .
    [*][*]Size 1x66.
    [*][*][*]voglio prendere la mia funzione depth in un intervallo che appunto va dai 403 m ai 408 m senza però dirgli il campione corrispondente. Vorrei fare cioè in modo che chiedendogli di prendere la depth a 403m, mi associ automaticamente il campione corrispondente. Idem a 408m.
    [*][*][*][*] Il problema è che essendo campionata ogni 0.152 abbiamo:
    depth(20)= 402.8880
    depth(21)= 403.0400
    quindi per lui non esiste nessun campione di depth che valga precisamente 403. Vorrei che prendesse tra depth(20) e depth(21) quella che più si avvicina a 403, quindi il 21° campione.
    idem per il 408
    depth(53)=407.9040
    depth(54)=408.0560
    Un poco più chiaro?

    grazie molte
  • Re: Cambio asse

    Dato un array (nel tuo caso "depth") ed uno o più valori (come nel tuo esempio: 403, 408) per trovare il valore dell'array che più si avvicina ai valori di riferimento, puoi:

    [*] calcolare il valore assoluto della differenza tra gli elementi dell'array ed il valore di riferimento
    [*] prendere il valore minimo di tali differenze

    Più in generale, potresti creare una funzione che:
    [*] riceve in input l'array (depth) e un array contenente i valori di riferimento (403, 408)
    [*] effettua i calcoli definiti sopra
    [*] ritorni: il valore dell'array "più vicino" al valore di riferimento, l'indice corrispondente e, per esempio, la differenza tra il valore trovato nell'array (depth) ed il valore di riferimento
    function [d,idx,err]=find_depth(depth,val)
    
    for i=1:length(val)
       [err(i),idx(i)]=min(abs(depth-val(i)));
       d(i)=depth(idx(i));
    end
    
    La funzione verrebbe usata in questo modo:
    passo=0.152;
    depth=[400:passo:410]
    
    val=[403 408]
    [d,idx,val]=find_depth(depth,[403 408])
    
    e ritornerebbe:
    Valore "più vicino nell'array "depth":
    d =
    403.0400 408.0560

    Indice dell'elemento "più vicino"
    idx =
    21 54

    Valore assoluto della differenza tra l'elemento "più vicino" ed il valore di riferimento
    err =
    0.0400 0.0560
    Hope this help.
  • Re: Cambio asse

    Grazie molte! Va benissimo
Devi accedere o registrarti per scrivere nel forum
4 risposte