首先將matlab 的演算法處理寫成函數存放,通過php指令碼在命令列中進行調用。
方法背景:
需要通過matlab來對若干矩陣資料進行計算,然後輸出結果。主要方法是在matlab中載入csv格式的資料,計數完成後輸出,然後對結果進行儲存。該過程由程式自動運行,無需人工幹預。
實現方法如下:
1。編寫好M檔案。例子如下:
function result=coe(R,XR)<br />[m,n]=size(XR);<br />H=(2*XR'*XR);<br />F=-2*R'*XR;<br />A=-eye(n);<br />B=zeros(n,1);<br />Aeq=ones(1,n);<br />Beq=1;<br />for i=1:11<br /> F=-2*R(:,i)'*XR;<br />%計算得到:W<br />W=quadprog(H,F,A,B,Aeq,Beq);<br />%計算自變數<br />Y1= XR*W;<br /> Y=[Y1,ones(m,1)];% 包含常數的迴歸變數<br />%迴歸<br /> x=R(:,i);<br /> w3=REGRESS(x,Y);<br /> b(i)=w3(1,1);<br />end<br />%print('倉位')<br />disp(b)<br />result =b</p><p>
下面這個函數用於調用所有的函數,這個可以更加具體情況來寫,為了簡單,我把多條命令放在一個函數裡面來調用。
function matlabcalc()<br />R = csvread('testR.csv');<br />XR = csvread('testXR.csv');<br />RES = coe(R,XR);<br />csvwrite('/home/ligl/matlabsrc/matrixadd/res.dat',RES,0,0);<br />end
2.編寫php代碼。
<?php<br /> //start matlab first<br /> $cmd="matlab -nodisplay -r /"addpath /home/ligl/matlabsrc/matrixadd//",/"matlabcalc()/"";<br /> print $cmd;</p><p> $wline = system($cmd,$retval);</p><p>?>
說明:
a).首先須配置好matlab環境變數,將matlab的安裝目錄添加$PATH環境變數,這樣可以直接通過matlab命令啟動matlab。
b).由於程式是在後台執行,無須開啟matlab的GUI介面,故添加參數-nodisplay 。
c).傳遞matlab命令列中啟動並執行命令,-r後面表示在matlab中執行的命令。每條命令必須用雙引號包含,多條命令之間用“,”(逗號)分隔。
d).記得一定要設定工作目錄,也就是m檔案所在的位置,否則無法調用m檔案中的函數。