我是要給matlab程序卒落,利用python 的 tkinter 包做一個(gè)界面化育特。
遇到的問題:
1举反,matlab 報(bào)錯(cuò):引用了已清除的變量 address
程序段:
function y = Test(address)
clc
clear
...
address1 = address
%read.xml
ecg = xmlread(address1);
...
end
經(jīng)過查找問題所在:是因?yàn)?clear 的問題蹂匹。
將clear刪掉岛都,放在end前面即可。
2队魏,剛開始想通過在matlab創(chuàng)建一個(gè).dll文件公般,然后在Python端調(diào)用這個(gè).dll文件,但是
【腳本M文件 & 函數(shù)M文件】
在查找方法的過程中,發(fā)現(xiàn) matlab在編寫程序的時(shí)候官帘,有兩個(gè)M文件:腳本M文件和函數(shù)M文件瞬雹。
在使用的過程中,兩個(gè)程序的最大區(qū)別就是 腳本文件沒有傳參和返回值遏佣。
函數(shù)M文件挖炬,可以傳入?yún)?shù),返回值状婶∫饬玻【用python調(diào)用程序,必須用函數(shù)M文件】
由于開始老師給的文件是:腳本M文件膛虫,故需要將腳本文件轉(zhuǎn)換為函數(shù)M文件草姻,然后才能在python端傳“本地地址”,然后在放在.m程序中稍刀,返回結(jié)果在python段進(jìn)行其他操作撩独。
【腳本文件轉(zhuǎn)換成函數(shù)文件】
查找了很多資料,發(fā)現(xiàn)一種最簡單的方式就是
將腳本M文件的頭账月,加上
function []=函數(shù)名(參數(shù))综膀;
在尾部附加
end ;
例如: Test.m (腳本文件)
a = input('please input number\n','s');
b = input('please input number\n','s');
sum = a+b;
disp(sum); %輸出
Test1.m (函數(shù)文件)
function y = sum(a,b)
c = a+b;
return c ; %直接在命令行 sum(2,3)局齿,結(jié)果就返回了剧劝。
3,【python連接matlab】
在2中提到了抓歼,用.dll讥此。由于不太會,所以又發(fā)現(xiàn)了新的方法谣妻。
用matlab中提供的python引擎就行萄喳。
在 python 中的 import matlab.magine 然后在直接調(diào)用程序。
首先蹋半,安裝引擎他巨。在cmd 命令下,
cd "matlabroot\extern\engines\python" [matlabroot是根據(jù)自己本地的地址找的]
執(zhí)行 python setup.py install
【注意: 有的人會找不見這個(gè)文件目錄湃窍,是因?yàn)閙atlab版本問題闻蛀,我同學(xué)的2014b不可以,另外同學(xué)的2016b就可以了您市,但是最低版本不知道】【matlab 2016b 支持 python 3.5,python 3.6不可以役衡,要用3.6以上要matlab更新】
然后把 .m文件 放在 .py文件可以執(zhí)行的根目錄下茵休,要不然會報(bào)錯(cuò)。錯(cuò)誤應(yīng)該是【未找見參數(shù)或者函數(shù)】這個(gè)。
.py文件:
import matlab
import matlab.engine
eng = matlab.engine.start_matlab()
result = eng.Test1(2,3) #調(diào)用matlba中的Test1.m
print(result)
就可以在編譯器看見最后的結(jié)果榕莺。
4俐芯,如果matlab程序不止一個(gè)文件,就把文件均放在 .py文件所在的目錄下就行了钉鸯。