Utilizzo delle funzionalità di plottaggio di MATLAB come parte interattiva di un programma Fortran

StackOverflow https://stackoverflow.com/questions/2946525

Domanda

Anche se molti di voi avranno un'idea decente di quello che sto puntando a, proprio dalla lettura del titolo - mi permetta una semplice introduzione ancora

.

Ho un programma Fortran -. Si compone di un programma, alcune subroutine interne, 7 moduli con le proprie procedure, e ... uhmm, questo è tutto

Senza entrare troppo nei dettagli, perché io non credo che sia necessario, a questo punto, quello che sarebbe il modo più semplice per utilizzare le funzioni di MATLAB plottaggio (principalmente trama (x, y) con alcune personalizzazioni) come una parte interattiva del mio programma? Per ora sto usando alcuni dei miei personalizzati tracciando routine (basata su HPGL e le routine di Calcomp), ma solo come parte di un esercizio da parte mia, ho 'd come per vedere dove questo potrebbe andare e come dovrebbe funzionare (è anche possibile quello che sto suggerendo?). Inoltre, quanta fatica ci vuole da parte mia?

So che questo argomento è stato piuttosto ampiamente descritto in molti "tutorial" in rete, ma per qualche ragione non ho problemi a trovare quelli introduttivi davvero semplici ma illustrativo. Quindi, se qualcuno può postare un esempio o due, quelle semplici, sarei davvero grato. O semplicemente prendimi per mano e mi guida attraverso un esempio di lavoro.

Piattaforma: IVF 11.something :) su Win XP SP2, Matlab 2008b

È stato utile?

Soluzione

Continuando a parlare di DISLIN come una soluzione, con una risposta che non si adatta in un commento ...

@M. S. B. - ciao. Mi scuso per la scrittura nella tua risposta, ma questi commenti sono troppo breve, e rispondendo ad una domanda in forma di una risposta con una risposta è ... comunque ...

Non è la caratteristica trama veloce di DISLIN - QPLOT di routine ha bisogno di solo tre argomenti per tracciare una curva: array X, Y e serie numero N. vedi capitolo 16 del manuale. Inoltre solo diverse chiamate aggiuntive per selezionare dispositivo di uscita ed etichettare gli assi. Non ho usato questo, quindi non so quanto è buono l'auto-scaling è.

Sì, lo so di QuickPlot, ed è routine correlate, ma è troppo fissata per le mie esigenze (non può cambiare nulla), e sì, è autoscaling è un po 'quircky. Inoltre, troppo grandi margini all'interno del graf.

In alternativa, se si desidera utilizzare la potenza di GRAF per configurare la tua casella di grafico, c'è subroutine GAXPAR ai valori raccomandati automaticamente generare. -2 come primo argomento a LABDIG determina automaticamente il numero di cifre di etichette di graduazione.

Hai provato le routine?

Spiacenti, non riesco a trovare la routine GAXPAR si sta ammissibili per prova a nell'indice di DISLIN. Sei sicuro che si chiama proprio così?

Rispondi via M.S.B :. Sì, sono sicuro circa l'ortografia di GAXPAR. E 'l'ultimo di routine nel capitolo 4 del manuale DISLIN 9.5 PDF. Forse si tratta di una nuova routine? Inoltre c'è un altro percorso per scalatura automatica:. SetScl - vedi capitolo 6

Finora, quello che ho fatto (a parte alcune soluzioni "nastro d'anatra") è

  use dislin; implicit none

  real, dimension(5) :: &
  x = [.5, 2., 3., 4., 5.], &
  y = [10., 22., 34., 43., 15.]
  real :: xa, xe, xor, xstp, &
          ya, ye, yor, ystp
  call setpag('da4p'); call metafl('xwin');
  call disini(); call winkey('return');

  call setscl(x,size(x),'x'); 
  call setscl(y,size(y),'y')

  call axslen(1680,2376) !(8/10)*2100 and 2970, respectively
  call setgrf('name','name','line','line')

  call incmrk(1); call hsymbl(3);

  call graf(xa, xe, xor, xstp, ya, ye, yor, ystp); call curve(x,y,size(x))
  call disfin()

  end

che metterà i valori estremi di destra sull'asse. Sai, forse come potrei andare per avere una "maggiore margine di tick" sulla parte esterna, da mettere un po 'area compresa tra la curva e l'asse (pur mantenendo gli effetti del SetScl)?

Anche se non ti piace il built-in auto-scaling, se si sta già utilizzando DISLIN, rotolare il proprio auto-scaling sarà più facile che chiamare Fortran da MATLAB. È possibile utilizzare le funzioni intrinseche Fortran MINVAL e VALMAX per trovare i valori minimo e massimo nei dati, che scrivere una subroutine per l'esterno rotonde per "bello" valori rotonde. Allo stesso modo, una subroutine per decidere circa l'intervallo fra tick-segno.

Questo in realtà non è così facile da realizzare (e le idee per dimostrare il torto sarà apprezzato volentieri). O dovrei dire, è facile se si conosce la gamma di massima in cui i valori si trovano. Ma se non lo fai, e non si sa se i vostri valori rimarranno esposti nel range di 13-34 o nel 1330-3440, quindi ...

... se sono sulla strada sbagliata del tutto qui, per favore, spiegare se si ment qualcosa di diverso. Il mio inglese è un po 'carente, quindi posso solo sperare quanto sopra è comprensibile.

all'interno di una subroutine per determinare i valori di inizio / fine grafico rotonda, si potrebbe scalare le reali valori min / max per essere sempre compreso tra 1 e 10, quindi avere una tabella per raccogliere i valori rotonde belle, poi di nuovo Non in scala per l'intervallo corretto.

-

Altri suggerimenti

Il modo più semplice sarebbe quella di avere il vostro programma di scrittura Fortran in un file, e avere il vostro programma di Matlab leggere quei file per le informazioni che si desidera trama. Faccio parte della mia elaborazione di calcoli numerici su Linux, quindi non sono del tutto sicuro di come Windows gestisce un processo di scrittura di un file e l'altro a leggerlo, allo stesso tempo.

Questo è un po 'un ripiego, però, così si potrebbe desiderare di pensare di utilizzare Matlab per chiamare il programma Fortran (o parti di esso) e ottenere i dati direttamente per la stampa. In questo caso si vorrà indagare Creazione di Fortran MEX file nella documentazione di Matlab. Questo è relativamente semplice da fare e servire le vostre esigenze, se eri felice di usare Matlab per guidare il processo e Fortran per agire come un servizio di calcolo. Mi piacerebbe guardare negli esempi distribuiti con Matlab per semplici file di Fortran MEX.

Infine, si potrebbe chiamare Matlab dal programma Fortran, cercare la documentazione per Chiamare il Matlab motore . E 'un po' più difficile per me vedere come questo potrebbe soddisfare le vostre esigenze, e non è una cosa che sono terribilmente familiare.

Se pubblichi di nuovo con maggiore dettaglio io possa essere in grado di fornire suggerimenti più specifici, ma probabilmente si dovrebbe iniziare a rotolare le maniche e le immersioni in file MEX.

Dump Matlab, perché il suo proprietario, costoso, gonfio / lento e codici non sono facili da parallelizzare.

Che cosa si dovrebbe fare è usare qualcosa sulle linee di DISLIN, plplot, GINO, gnuplotfortran etc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top