2010-05-31 118 views
4

儘管很多人會對我的目標有一個相當好的想法,但只需閱讀標題 - 我還是可以簡單介紹一下。使用MATLAB的繪圖功能作爲Fortran程序的交互部分

我有一個Fortran程序 - 它由一個程序,一些內部子程序,7個模塊和自己的程序組成,並且......嗯,就是這樣。

沒有詳細說明,因爲我不認爲這是必要的,什麼是使用MATLAB的繪圖功能(主要是將plot(x,y)與一些定製功能)作爲交互的最簡單方法我的程序的一部分?現在我正在使用我自己的一些自定義繪圖例程(基於HPGL和Calcomp的例程),但作爲練習的一部分,我希望看到它可以發揮的作用,以及它如何工作(這是甚至可能我建議?)。另外,我會付出多少努力?

我知道這個主題已經在網上的很多「教程」中有相當廣泛的描述,但由於某種原因,我很難找到真正簡單但說明性的介紹性主題。所以如果任何人都可以發表一個或兩個簡單的例子,我會非常感激。或者只是牽着我的手,引導我通過一個實例。

平臺:IVF 11.something :)在Win XP SP2,MATLAB 2008B

回答

3

的線繼續DISLIN作爲解決方案的討論的東西,與將不適合評論答案.. 。

@M。 S. B. - 你好。我爲你的答案寫作而感到抱歉,但是這些評論太短了,以答案的形式回答一個問題的答案是......無論如何......

DISLIN的快速繪圖功能 - 例程QPLOT只需要三個參數來繪製一條曲線:X數組,Y數組和N數。請參閱手冊的第16章。再加上幾個額外的呼叫來選擇輸出設備並標記軸。我沒有用過這個,所以我不知道自動縮放是多麼的好。

是的,我知道Quickplot和它的相關例程,但它對我的需求來說太固定了(不能改變任何東西),是的,它的自動縮放有點怪異。此外,格拉夫內部的利潤率太大。

或者如果您想使用GRAF的強大功能來設置您的圖框,那麼會有子程序GAXPAR自動生成推薦值。 -2作爲LABDIG的第一個參數自動確定刻度標籤中的位數。

您是否嘗試過這些例程?

對不起,我無法找到你在迪林的索引中所接受的GAXPAR例程。你確定它被稱爲完全一樣嗎?

M.S.B.的回覆:是的,我確信GAXPAR的拼寫。這是DISLIN 9.5 PDF手冊第4章中的最後一個例程。也許這是一個新的例程?也有自動縮放另一條道路:SetScl可以 - 參見第6章

到目前爲止,我已經(從一些「鴨磁帶」解決方案分開)做什麼

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 

這將把極端值放在軸上。你是否知道我怎麼能在外面有一個「主要的蜱蟲邊緣」,以便在曲線和軸線之間放置一些區域(同時仍然保持setscl的效果)?

即使您不喜歡內置的自動縮放功能,如果您已經在使用DISLIN,自動縮放比從MATLAB調用Fortran更容易。您可以使用Fortran內部函數minval和maxval在數據中查找最小值和最大值,而不是編寫一個子例程以向外舍入爲「好」圓值。同樣,一個子程序來決定刻度間距。

這實際上不是那麼容易完成(並且想法證明我錯了會很樂意欣賞)。或者我應該說,如果你知道你的價值觀所在的粗略範圍,這很容易。但是,如果你不這樣做,你不知道你的 值是否會橫亙在13-34的範圍內,或在1330-3440,然後...

...如果我在這裏完全錯誤的軌道上,請解釋你是否改變了一些不同的東西。我的英語有點欠缺,所以我只能希望以上是可以理解的。

在確定圓圖開始/結束值的子例程中,您可以將實際的最小/最大值縮放到始終在1到10之間,然後讓表格選取精美的圓整值,然後不縮放回正確的範圍。

-

+0

@到「M.S.B答覆:是的,我確信拼寫...」*****我道歉。這確實出現在印刷手冊中 - 不幸的是,出於某種原因,也不在在線手冊的索引中(我正在閱讀)。無論如何,雖然它似乎有一些與數字有關的怪癖,但它的確比我迄今爲止所提出的任何替代方法都更好。現在它會做。謝謝M. S. B. – Rook 2010-06-02 16:20:48

4

最簡單的方法就是讓你的Fortran程序寫入文件,並有您的MATLAB程序讀取這些文件的您想要繪製的信息。我的大部分工作都是在Linux上進行,所以我不完全確定Windows如何處理寫入文件的一個過程,以及如何同時讀取一個文件。

雖然這有點混亂,所以您可能要考慮使用Matlab調用Fortran程序(或其中的一部分)並直接獲取數據進行繪圖。在這種情況下,您需要在Matlab文檔中調查創建Fortran MEX文件。如果您很樂意使用Matlab來推動流程並使Fortran充當計算服務,那麼這樣做相對比較簡單,並且可以滿足您的需求。我會看看使用Matlab發佈的簡單Fortran MEX文件的示例。

最後,您可以從Fortran程序調用Matlab,搜索文檔調用Matlab引擎。對我來說,看看這可能適合你的需求有點難,而且這不是我非常熟悉的。

如果您再次發佈更多詳細信息,我可能會提供更具體的提示,但您可能會開始捲起袖子並潛入MEX文件。

+0

Mea culpa;當你在累了的時候寫下問題會發生什麼。你是對的 - 它應該是「從MATLAB調用fortran」...做計算,然後使用matlab的繪圖功能。 – Rook 2010-06-01 15:21:04

2

轉儲Matlab,因爲它專有的,昂貴的,臃腫/慢和代碼不容易並行化。

你應該做的是使用上DISLIN,PLplot,GINO,gnuplotfortran等

+0

對於其他生成繪圖方式的建議,您可以完全停留在Fortran中,因爲提供了Fortran界面。 DISLIN是免費的($)大多數用途和易於安裝和使用。它有很好的文檔。 PLplot是免費的($)和開源的,易於使用。文檔很好,但不完善。根據您的操作系統,安裝可能並不容易。我沒有與其他人的經驗。 – 2010-06-01 23:43:04

+0

你是否知道如何在dislin中實現某種自動縮放?如果我能得到那個,我不需要這些東西的一半。 – Rook 2010-06-02 00:13:30

+0

@M。 S. B. - 實際上,我正在使用DISLIN,並對此非常滿意。唯一的問題是自動縮放,我沒有能夠滿意地解決。你能提供一些提示嗎? – Rook 2010-06-02 00:27:59