2013-09-02 11 views
5

Ho trovato una funzione con un input "segreto", che qualcuno può forse spiegare? Quale potrebbe essere la ragione? Ci sono molti casi di una cosa del genere?Che cos'è una sintassi grandfathered, come nella funzione MATLAB "radon"?

Nella sintassi documentata di radon funzione, ci sono due modi per chiamare la funzione - quella convenzionale con ingressi di I e THETA, (per immagini e angoli di proiezione desiderato), e anche la possibilità di omettere THETA, e danno solo I come input.

Ma nei commenti all'interno del file radon.m, c'è un'altra parte alla fine, che è descritta come "sintassi a grandfather". Ciò consente tre ingressi, incluso anche il numero di proiezioni desiderate. E funziona davvero!

Quindi, perché non è documentato? È stato disponibile in passato, e poi cancellato/modificato (come suggerito da "sintassi a tempo indeterminato")? Quindi, perché funziona ancora?

E, un'altra domanda circa radon.m:

La parte principale della funzione viene calcolata chiamando un'altra funzione, chiamata radonc. Che cos'è? Dove risiede? Non riesco a trovarlo o menzionarlo ovunque.

+1

La mia ipotesi è che l'hanno rimosso dalla documentazione per "incoraggiare fortemente" le persone ad usare la nuova sintassi. Funziona ancora per compatibilità con le versioni precedenti, in modo che il codice scritto nelle vecchie versioni di MATLAB funzioni ancora nelle versioni più recenti di MATLAB. Questo processo è molto comune; si chiama [depracation] (http://en.wikipedia.org/wiki/Deprecation). Questo è il punto di vista di MathWorks. –

+1

Per quanto riguarda la seconda domanda (di nuovo, indovinando qui) - ogni volta che il nome di una funzione termina in "c", di solito indica che è stato implementato in C e poi compilato in un file MEX, usualmente per velocizzare l'esecuzione di alcuni porzione della funzione. –

+0

@RodyOldenhuis Grazie.Informazioni sul file MEX: in che modo la mia macchina può eseguire il file, se non ha il file stesso? O semplicemente non l'ho trovato ...?! – Adiel

risposta

9

"Grandfathered" sintassi in genere significa che si tratta di una sintassi che

  1. usato per essere documentate e supportate
  2. deve essere ancora tipo di sostegno in quanto alcuni clienti si basano ancora su di esso, e MathWorks non avrebbe vuoi che il loro codice si rompa
  3. non è più raccomandato ed è quindi non documentato in modo che i nuovi utenti non inizino a fare affidamento su di esso
  4. potrebbero essere completamente rimossi in futuro.

radonc è in \toolbox\images\images\private. Il comando which non lo troverà perché si trova in quella directory privata e pertanto può essere richiamato solo dalle funzioni nella directory immediatamente sopra (che include lo stesso radon). Il file è radonc.mexw64 (probabilmente un'estensione di file diversa da mess se sei su una piattaforma diversa per me), indicando che è implementato come codice C compilato anziché codice MATLAB (e nel caso questo sia il motivo per cui lo stai chiedendo, significa che tu non posso vedere la fonte).

Modifica: notare che nella stessa directory è presente anche un file radonc.m. Questo file non fa nulla, poiché il file mex ha precedenza più alta; è lì per fornire aiuto per la funzione radonc. Se digiti help radonc, vedrai che mostra il testo della guida fornito dai commenti di radonc.m.

+0

Ho provato tutto questo, ma nella mia versione (R2008a) dice: "radonc not found". Comunque, grazie per la risposta spiegata :) – Adiel

+0

Come spiegato, se provate ad eseguire 'radonc', o se digitate' which radonc', MATLAB non lo troverà. Questo perché si trova in una directory privata, e quindi non sul percorso - può essere chiamato solo dalle funzioni nella directory immediatamente sopra, che include la funzione 'radon'. Tuttavia, è lì. (Nota, non ho 8a disponibile, ma credo che tutto ciò che ho detto sia vero per quella versione). –

+0

Credo anche che tutte le tue spiegazioni siano vere. Quello che ho scritto è stato solo per quanto riguarda il "radonc di aiuto", e cosa mi ha risposto il mio matlab ... – Adiel

Problemi correlati