Come confrontare le caratteristiche di due curve?


11

Ho bisogno di confrontare due curve f (x) e g (x). Sono nello stesso intervallo x (diciamo da -30 a 30). f (x) può avere alcuni picchi acuti o picchi e valli lisci. g (x) può avere gli stessi picchi e valli. Se è così, voglio una misura su come queste caratteristiche coincidono senza ispezione visiva. Ho provato a risolvere questo problema nel modo seguente.

  1. Normalizza entrambe le funzioni dividendo ciascun punto dati per l'area totale della funzione. Ora l'area della funzione normalizzata è 1.0
  2. Ad ogni x ottenere il valore minimo da f (x) e g (x). Questo mi darà una nuova funzione che è sostanzialmente l'area di sovrapposizione tra f (x) e g (x).
  3. Quando integro la funzione risultante del passaggio 2, l'area totale di sovrapposizione viene visualizzata da 1,0

Tuttavia questo non mi dice se le vette e le valli coincidano o meno. Non sono sicuro che ciò possa essere fatto, ma se qualcuno conosce un metodo apprezzerei il tuo aiuto.

== EDIT == Per chiarimenti ho incluso un'immagine.

Curve di esempio

La differenza tra le due curve (nero e blu) potrebbe non essere la stessa ma avrà forme complementari.

Sfondo: le funzioni sono la densità degli stati (PDOS) proiettata degli orbitali atomici di un composto. Quindi ho stati per gli orbitali s, p, d. Voglio determinare se il materiale ha ibridazioni sp, pd o dd (miscelazione orbitale). L'unico dato che ho è il PDOS. Se diciamo che il PDOS di orbitale (funzione f (x)) ha i picchi e le valli delle stesse energie (valori x) del PDOS di orbitale (funzione g (x)), allora c'è sp che si mescola in quel materiale.


1
Forse portalo su mathoverflow.net ?
Euforico,

1
Mi chiedo se la gente dell'audio digitale abbia problemi simili?
Dan Pichelman,

Grazie euforico, farò la domanda anche a mathoverflow.net
laalee,

@laalee Non porre la tua domanda su più di un sito sulla rete Stack Exchange. Anche Math Overflow è matematica a livello di ricerca. Math Stack Exchange è di livello non di ricerca. Posso migrare questo verso la matematica o da qualche altra parte se vuoi.
Ingegnere mondiale il

Chiedo scusa. Ho provato a eliminarlo in mathoverflow ma non sono riuscito a trovare un modo. Gradirei se potessi cancellarlo. Grazie
laalee il

Risposte:


4

Questo è un problema comune e spesso difficile in chimica analitica, fisica, spettroscopia, ecc. Gli approcci utilizzati possono variare dal semplice confronto RMSD a metodi molto sofisticati. Se il compito non è facile da eseguire con l'ispezione visiva (gli esseri umani sono squisitamente sviluppati per il riconoscimento delle caratteristiche), allora sarà probabilmente difficile farlo a livello computazionale.

Un approccio è quello di provare a rimuovere le "linee di base" in modo che le funzioni siano a valore zero, tranne dove ci sono caratteristiche di picco o valle. Questo viene fatto meglio con l'adattamento della curva usando un polinomio di basso ordine o, ancora meglio, un modello di principio più appropriato di ciò che la linea di base può e dovrebbe apparire. Se i picchi sono molto nitidi, è possibile semplicemente smussare la funzione e sottrarre la funzione levigata dalla funzione originale.

Dopo aver rimosso la linea di base, è possibile normalizzare e generare residui o eseguire RMSD (approcci semplici) o provare a rilevare le caratteristiche di picco / valle adattando un gaussiano (o qualunque modello sia appropriato) a ciascuna caratteristica desiderata. Se sei in grado di adattare i picchi, puoi confrontare le posizioni dei picchi e le mezze larghezze.

Dai un'occhiata a SciPy se conosci Python. In bocca al lupo.


Grazie per la tua risposta. Tuttavia, non sono chiaro su come trovare una base. Ogni caso avrà una funzione diversa che non posso prevedere in anticipo.
laalee,

3

Questo è solo "fuori dalla mia testa", quindi potrei fraintendere del tutto il problema, ma forse potresti applicare una distanza radice-quadrata-media (RMSD) alle funzioni. Se sei solo interessato ai picchi e alle valli, applicalo alle aree intorno a quei picchi e valle (vale a dire per alcuni x +/- alcuni epsilon in cui la derivata di entrambe le funzioni è zero). Se l'RMSD di quell'intervallo è vicino allo zero, allora hai una buona corrispondenza, penso.


Ciò considera la differenza tra i valori, che potrebbe non essere zero sebbene le forme siano simili.
laalee,

3

Mentre lo capisco, le informazioni che stai cercando sono trasmesse dal “tableau des Variations” della funzione — mi dispiace molto di non conoscere il nome inglese per questo!

Questa tabella è associata a una funzione differenziabile f e la costruisci trovando le radici di f ' e determinando il segno di f' su ogni intervallo tra questi zero.

Quindi, se gli zeri di f ' e g' coincidono più o meno e i segni di queste funzioni concordano, avranno un profilo simile.

La prima cosa che vorrei provare a programmare sarebbe:

  1. Seleziona un piccolo ε
  2. Disegna in modo casuale un grande numero N di punti x [i] nell'intervallo in cui sono definite le funzioni.

  3. Per ciascun nodo, calcolare le differenze F [i] = f (x [i] + ε) - f (x [i] - ε) e G [i] = g (x [i] + ε) - g (x [i] - ε) .

  4. Se in ciascun nodo, F [i] e G [i] sono entrambi più piccoli di ε² O hanno entrambi lo stesso segno, concludere che le due funzioni hanno quasi lo stesso profilo.

Funziona?


Grazie michipili per la tua risposta perspicace. Attualmente sto cercando di rispettare una scadenza. Ma lo implementerò appena posso e
ve lo farò

1

Forza bruta: scopri il valore float diverso da zero con questo valore come passaggio, passa attraverso l'intero dominio e controlla se i valori sono uguali?

== EDIT ==

Hmmm ... Se per "la stessa forma" intendi g (x) = c * f (x), questa soluzione dovrebbe essere modificata - per ogni elemento del dominio calcoli f (x) / g (x) e controlla se il risultato è lo stesso per ogni punto (ovviamente, se g (x) == 0, allora controlli se f (x) == 0, non stai provando a dividere).

Se "la stessa forma" significa "gli ottimum locali e i punti di flessione sono gli stessi" ... Bene, trova gli ottimum locali e i punti di flessione per f (x) e g (x) (come insiemi di elementi di dominio) e controlla, se quelli i set sono uguali.

Terza opzione: f (x) = g (x) + c. Basta controllare se ogni elemento del dominio ha la stessa differenza f (x) -g (x). È quasi identico al primo caso, ma invece della divisione hai delle differenze.

== ANCORA UN ALTRO EDIT ==

Bene ... Il secondo approccio dalla modifica sopra può essere utile. Inoltre, puoi unirlo confrontando il segno del primo dervativo (non simbolico, ma calcolato come df (x) = f (x) - f (x-step)). Se entrambe le funzioni hanno lo stesso segno di derivata nell'intero dominio, controlla le ottimas e i punti di flessione, per essere sicuro. Direi che queste condizioni dovrebbero essere sufficienti per fare ciò di cui hai bisogno.


Grazie Filip per la tua risposta. Ma le funzioni potrebbero non avere valori uguali ma avere la stessa forma.
laalee,

Sposto questo commento per rispondere come modifica. Controlla.
Filip Malczak,

Grazie Filip per la tua risposta. Ho aggiunto un'immagine per chiarire il mio problema.
laalee,

1

quanto bene queste caratteristiche coincidono senza ispezione visiva.

Probabilmente il modo più semplice è calcolare il coefficiente di correlazione di Pearson . Cioè, usa f (x) come X e g (x) come Y. Effettivamente "traccia g (x) come funzione di f (x) e vedi quanto bene forma una linea retta".

Il coefficiente di correlazione è popolare perché è facile da calcolare ed è spesso giustificato semplicemente agitando le mani. Potrebbe essere una buona approssimazione iniziale per alcuni usi, ma sicuramente non è una panacea.

Per ottenere risultati migliori nelle applicazioni del mondo reale, è necessario comprendere cosa sta succedendo nei dati, ovvero il processo che genera i dati. Spesso c'è una sorta di sfondo e le interessanti funzionalità si basano su quello sfondo. Se passi tutti i dati in una scatola nera, potresti finire per confrontare principalmente gli sfondi: la scatola nera non sa quale parte dei dati è la parte interessante. Quindi, per ottenere risultati migliori, è spesso una buona idea rimuovere gli sfondi in qualche modo e quindi confrontare ciò che è rimasto. Adattare linee o curve o medie e sottrarre o dividere per esse, filtro passa-basso, passa-banda o passa-alto, alimentando i dati attraverso alcune funzioni non lineari ... il nome.

Non c'è assolutamente nessuna risposta giusta. Otterrai tanti risultati quanti ne provi i metodi. Ma alcuni dei risultati sono migliori di altri. Il ragionamento teorico può aiutare a iniziare nella giusta direzione, ma come impostare parametri e mettere a punto il metodo, alla fine si può trovare solo provandoli e confrontando i risultati del mondo reale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.