Le migliori pratiche per la denominazione di variabili scientifiche?

1

Quali sono alcune delle convenzioni che usi quando si nominano le variabili nel codice matematico / scientifico? Sto cercando di stabilire una serie di convenzioni per un prossimo progetto. Quindi ecco una formula di esempio per calcolare la velocità istantanea:

u'i+1 = u'i + 0.5dti (u''i + u''i+1)

Alcune possibilità includono:

def up_next(up_current, upp_next, upp_current, dt):
    return up_current + 0.5 * dt * (upp_next + upp_current)

O forse:

def velocity_next(velocity_current, acceleration_next, acceleration_current, interval):
    #...

Ci sono delle buone pratiche in questo senso, o è del tutto soggettivo? C'è stata qualche convenzione che hai trovato particolarmente leggibile?

    
posta AwesomeSauce 28.02.2016 - 20:35
fonte

1 risposta

6

In matematica, la convenzione consiste nell'utilizzare variabili a lettera singola che possono essere disambiguate da indici o segni come numeri primi o segni di omissione. Questo ha senso poiché i simboli adiacenti ab sono intesi come moltiplicazione a · b , non come singola variabile.

Nella maggior parte dei linguaggi di programmazione, questo non è il caso - alcune lingue addirittura ignorano gli spazi nei nomi delle variabili - e i nomi delle variabili sono incoraggiati a consistere in parole complete. Inoltre, la maggior parte dei linguaggi di programmazione non ha una notazione per gli indici tipografici ecc. Ma sono piuttosto unidimensionali. Pertanto, non è consigliabile eseguire una traduzione diretta dalle formule al codice sorgente. Tuttavia, la tua intenzione è probabilmente quella di permettere a un lettore del tuo codice di comprendere immediatamente la connessione ai concetti matematici scritti altrove. Ciò richiede alcune somiglianze nella denominazione delle variabili.

Alcune lingue supportano le lettere Unicode nei nomi di variabili, o anche in nomi arbitrari tramite stropping. Ho scoperto che questo rende il codice più leggibile quando si confronta il codice con le formule matematiche, ma senza un comodo sistema in stile TeX per inserire questi caratteri (al contrario delle fughe numeriche), tale codice è molto più difficile da scrivere. Necessità di una tabella di caratteri da cui copiare le variabili di copia non è accettabile. Prenderò in considerazione la possibilità di spendere questo sforzo per la pubblicazione del codice in un contesto scientifico, ma non per un codice che sarebbe effettivamente utilizzato (e modificato e refactored).

Sono quindi giunto alla conclusione che un compromesso sembra ottimale. Le variabili a lettera singola sono accettabili, ma i caratteri non Ascii sono generalmente indicati con un nome familiare. Potrei indicare un indice con un trattino basso nel nome e un primo aggiungendo un trattino basso. Questo ovviamente fallisce se abbiamo un primo e un pedice come nel tuo caso, quindi ha senso convergere la notazione matematica e il codice in una notazione che può essere facilmente mappata l'un l'altra da un lettore.

Nel tuo caso, i numeri primi vengono usati per contrassegnare le derivate e gli indici per gli elementi dell'indice in costruzione. A seconda di ciò che stai cercando di esprimere, quegli indici potrebbero essere indici di array effettivi. I numeri primi sono fastidiosi qui, quindi puoi utilizzare una notazione diversa . x ' (la notazione di Lagrange) potrebbe anche essere intesa come

  • (la notazione di Newton), applicabile specialmente se hai derivato per t , potrebbe essere resa come xdot , o x_dot , o dot_x , con la derivata seconda dotdot_x , che è simile al modo in cui il simbolo matematico sarebbe pronunciato. Questa sarebbe la mia preferenza.
  • dx/dt o (d/dt)x (notazione di Leibniz), potrebbe essere resa dx_dt o x_ddt , con la derivata seconda x_d2dt2 . Per essere onesti, questo sarebbe ingombrante a meno che il codice non riguardi la differenziazione stessa piuttosto che l'applicazione della differenziazione a un problema.

Il rendering dei primi come p come up mi fa pensare a una direzione, non a una derivata.

Al di fuori di un contesto scientifico, questo non è accettabile e si dovrebbero preferire le migliori pratiche specifiche della lingua. Invece di simboli criptici che non sono ovvi senza conoscenze esterne, i nomi delle variabili dovrebbero trasmettere il significato della variabile in modo auto-documentante. Il tuo secondo esempio di nominazione sembra quindi essere un buon approccio.

    
risposta data 28.02.2016 - 21:33
fonte

Leggi altre domande sui tag