[問題] C++呼叫matlab求解LP已回收
小妹最近在寫用C++呼叫matlab來求解Lp問題
但對於矩陣的設定好像有問題
用下面的例子來解釋:
max f= 0.15x1+0.1x2 + 0.08x3 + 0.12x4
s.t. x1-x2-x3-x4<=0
-x2-x3+x4<=0
x1+x2+x3+x4 =1
x1,x2,x3,x4>=0
他的標準設定是
min fX
st. A*X<=b
Aeq*X =beq
lb<=X
C++裡面的寫法:
engEvalString(eng,"f=[-0.15, -0.1, -0.08, -0.12];");
engEvalString(eng,"A=[1,-1,-1,-1; 0,-1,-1,1];");
engEvalString(eng,"b=[0,0];");
engEvalString(eng,"Aeq=[1,1,1,1];");
engEvalString(eng,"beq=[1];");
engEvalString(eng,"lb=[0,0,0,0];");
engEvalString(eng,"[x,fval]=linprog(F,A,b,Aeq,beq,lb)");
" "裡面的內容就是在matlab的打法
但這是把矩陣寫死的方法
因此我就在C裡面建一個矩陣, 再把矩陣的值傳到matlab
像f,b,Aeq,beq,lb這些一維的陣列的回傳都沒問題
但是A這個二維陣列就有問題
像f我的寫法就是
mxArray *F=NULL;
double Fime[4]={-0.15, -0.1, -0.08, -0.12};
F=mxCreateDoubleMatrix(1, 4, mxREAL);
memcpy((void *)mxGetPr(F), (void *)Fime, sizeof(Fime));
engPutVariable(eng, "F", F);
可是A的寫法
mxArray *A=NULL;
double Aime[8]={1,-1,-1,-1,0,-1,-1,1}
A=mxCreateDoubleMatrix(2, 4, mxREAL);
memcpy((void *)mxGetPr(A), (void *)Aime, sizeof(Aime));
engPutVariable(eng, "A", A);
這個陣列一直出問題,
我懷疑是A=mxCreateDoubleMatrix(2, 4, mxREAL);
^^^^^^標示陣列大小的地方出問題
因為一但我把這個陣列由
這寫法engEvalString(eng,"A=[1,-1,-1,-1; 0,-1,-1,1];");
取代為上面A的寫法,就會有問題,但幾個維度的標法都試過了
還是無法解決~希望可以請高手幫我解答
感謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.54.79
→
08/21 21:46, , 1F
08/21 21:46, 1F
推
08/23 02:18, , 2F
08/23 02:18, 2F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章