記錄python呼叫matlab編寫的程式中的問題

2021-08-29 07:52:01 字數 2201 閱讀 2310

我是要給matlab程式,利用python 的 tkinter 包做乙個介面化。

環境:python 3.5;matlab 2016b

遇到的問題:

1,matlab 報錯:引用了已清除的變數 address

程式段:

function y = test(address)

clcclear

...address1 = address

%read.xml

ecg = xmlread(address1);

...end

經過查詢問題所在:是因為 clear 的問題。

將clear刪掉,放在end前面即可。

2,剛開始想通過在matlab建立乙個.dll檔案,然後在python端呼叫這個.dll檔案,但是

【指令碼m檔案 & 函式m檔案】

在查詢方法的過程中,發現 matlab在編寫程式的時候,有兩個m檔案:指令碼m檔案和函式m檔案。

在使用的過程中,兩個程式的最大區別就是 指令碼檔案沒有傳參和返回值。

函式m檔案,可以傳入引數,返回值。【用python呼叫程式,必須用函式m檔案】

由於開始老師給的檔案是:指令碼m檔案,故需要將指令碼檔案轉換為函式m檔案,然後才能在python端傳「本地位址」,然後在放在.m程式中,返回結果在python段進行其他操作。

【指令碼檔案轉換成函式檔案】

查詢了很多資料,發現一種最簡單的方式就是

將指令碼m檔案的頭,加上 

function [返回值]=函式名(引數);

原函式體內部

end;

a = input('please input number\n','s'); %獲取a

b = input('please input number\n','s'); %獲取b

sum = a+b;

disp(sum); %輸出

test1.m (函式檔案)

function  y = sum(a,b)

y = a+b;

return ;

end;

直接在命令列 sum(2,3),結果y就返回了(在這裡y是返回值,可以具有多個返回值,如下)。

function [y1,y2] = sum_sub(a,b)

y1 = a + b ;

y2 = a - b;

return; %可以寫也可以不寫

end;

3,【python連線matlab】

在問題2中提到了,用.dll。由於不太會,所以又發現了新的方法。

用matlab中提供的python引擎就可以了。即python 中寫 import matlab.magine 然後就可直接呼叫matlab程式就可以。

首先,安裝引擎。在cmd 命令下,

cd  "matlabroot\extern\engines\python"  【這個位址是matlab安裝路徑內的位址】

python setup.py install
執行上述命令,進行引擎安裝。

注意: (1)有的人可能會找不見這個檔案目錄,是因為matlab版本問題,因為python比較新,2014及以前版本不可以,2015是否存在這個檔案路徑,有待考察。

(2)matlab 2016b 支援 python 3.5,2017a 支援 python 3.6版本,因此如果是matlab 2016b 版本需要再裝乙個 python3.5的環境。

安裝完成後就可以進行,混合程式設計了(matlab必須是函式檔案,否則返回不了結果)。**如下,

import matlab  

import matlab.engine

eng = matlab.engine.start_matlab()

result = eng.test1(2,3)    #呼叫matlab中的test1.m 

print(result)

4,(1)出現過錯誤:importerror: no module named matlab.engine

是因為沒有把 .py檔案和 .m檔案放在同一目錄下,把.py檔案放在.m檔案路徑下就可以了,或者直接放在安裝引擎的那個目錄下

(2)有的人的matlab.m檔案不止乙個。把所有的.m檔案均放在 .py檔案所在的目錄下就行了。

參考:

c呼叫python記錄

c呼叫python的例項。1.應用場景 c 中需要資料庫的支援,但是引入資料庫十分的複雜且麻煩,所以考慮用python讀取配置檔案,然後將資料返回到c。2.呼叫步驟 a,新增必要的巨集和python路徑 define ms no coredll include c python27 include ...

Python 函式呼叫效能記錄

之前用 js 寫專案的時候,專案組用的元件模式,一直感覺很不錯。最近用 python 做新專案,專案結構也延續了元件模式。一直沒有對函式呼叫的效能作了解,今天突發奇想測試了一下,寫了一些測試 首先定義了幾個 class class a object deftest self pass class b...

flask 呼叫 python爬蟲 記錄

過程 爬蟲問題 後來呼叫 模擬登陸,selenium 火狐瀏覽器,虛擬機器環境下,模擬登陸是 控制滑鼠點選網頁指定位置,進入到輸入框中,控制鍵盤輸入賬號密碼,出現問題是 彈出的瀏覽器視窗中,自動輸入站好密碼,英文本元可以正常輸入,中文字元無法輸入,嘗試 手動接管後還是 無法輸入中文,後來 有換 系統...