[問題] C++呼叫matlab求解LP已回收

看板MATLAB作者 (天空紫)時間16年前 (2009/08/20 22:58), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/1
小妹最近在寫用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
Matlab 跟 C 二維矩陣維度剛好相反不是嗎?
08/23 02:18, 2F
文章代碼(AID): #1AZMIhsc (MATLAB)
文章代碼(AID): #1AZMIhsc (MATLAB)