1. 程式人生 > >畫圖技巧 : 讓Matlab將資料傳送給Origin

畫圖技巧 : 讓Matlab將資料傳送給Origin

神操作之Origin呼叫MATLAB Console 獲取資料畫圖

有時候使用Matlab進行了大量的計算工作,然後想要繪製一些資料圖形,感覺用Origin會更方便一些,於是想把這些資料直接傳送給Origin,但是怎麼傳呢?
使用OriginPro7.5,擁有Matlab Console工具,但是使用它有一個問題,當在Origin中開啟Matlab Console時,會建立一個新的Matlab例項,而不是與已經開啟的Matlab相連線。

為了使OriginPro7.5能夠與已經開啟的Matlab相連,只需要很簡單的步驟:

  • 開啟Matlab快捷方式的屬性視窗,在“目標”一欄,在Matlab的路徑後面加上兩個引數/Automation和/desktop即可。例如:

    “C:\Program Files\MATLAB\R2008a\bin\matlab.exe” /Automation /desktop

  • 以後,使用這個快捷方式開啟的Matlab,就可直接與Origin連線了。
    在這裡插入圖片描述
    如果Matlab已經開啟,啟動Origin,開啟Matlab Console,此時不會建立新的Matlab例項,而是與已經開啟的Matlab連線,使用gr和gc命令即可獲取Matlab中的資料。

當然,不使用Automation方式開啟Matlab也可達到目的。

假設我們打開了一個Matlab**(以非Automation模式,為了區分,將其稱為MatlabA)**,進行了一些運算,想要傳送計算結果給Origin,於是打開了OrginPro7.5並啟動了Matlab Console,此時Origin會建立一個Matlab Server(為方便區分,稱為MatlabB),這個Server(MatlabB)與之前開啟的Matlab(MatlabA)不是同一個例項,但是這兩個例項是可以傳輸資料的,我想Origin大概是以Shared方式建立的Matlab Server。

  • 在MatlabA中執行

    actxserver(‘matlab.application’)

  • 可獲得Origin建立的MatlabB的handle,使用這個handle就可將資料從MatlabA傳送給MatlabB,例如,在MatlabA中輸入:

    A=[1 2;3 4];
    h.PutWorkspaceData(‘B’, ‘base’, A);

  • 將MatlabA中的矩陣A傳送給了MatlabB,並在MatlabB將這個矩陣命名為B。

  • 切換到Origin的Matlab Console,輸入:

    gr B

  • 就在Origin中得到了矩陣[1 2;3 4]。

  • 值得注意的是,如果MatlabA不再需要對MatlabB傳送資料,就使用

    h.release

  • 這並不會直接銷燬Origin建立的Matlab Server,而是減少它的引用計數,所以不必擔心release會對Origin的Matlab Console帶來什麼影響。
    在這裡插入圖片描述

完畢 開始作圖吧