日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VC調(diào)用matlab的linprog函數(shù)-----自己的總結(jié)

 火離 2010-05-08
 

1.編寫m文件

function [X,f]=lin(f,A,b)

[x,fval] = linprog(f,A,b);

X=x;

f=fval;

End

保存為lin.m

2.m文件編譯為dll

mcc -W cpplib:liblin -T link:lib lin.m -v

其中,libname為編譯后的庫文件名,lin.mmatlabm文件名

該命令用于mwArray數(shù)據(jù)類型

 

生成四個(gè)文件(用到的):

 liblin.ctf      liblin.dll    liblin.h   liblin.lib

 

3.VC++6.0工程的創(chuàng)建與設(shè)置

1)建立一個(gè)名為TestC++控制臺(tái)工程,在工程中添加一個(gè)名為test.cpp文件

2)對(duì)VC++6.0的設(shè)置(與matlab關(guān)聯(lián),一旦設(shè)置后以后就不需再修改)

   ----工具--->選項(xiàng)---->目錄----->include files: 加入--e:\matlab7\extern\inlcude

                                               ------>Library files:加入--e:\matlab7\exterm\lib\win32\microsoft\msvc60

3)針對(duì)該工程的設(shè)置:

    工程---->設(shè)置----->連接---->對(duì)象/庫模塊:加入mclmcrrt.lib  liblin.lib(自己制作dll時(shí)生成的庫文件)

注:也可以不在這里設(shè)置,在test.cpp文件中加入:

    #pragma comment(lib,"mclmcr.lib")

    #pragma comment(lib,"liblin.lib")

(4)將前面生成的四個(gè)文件(matlabworks文件夾下)添加到VC6.0建立的工程目錄下,將liblin.h添加到工程(工程--->添加到工程---->文件)

 

例:                           min f = -4x1- x2,

                 s.t.             -x1+2x2<=4

                                    2x1+3x2<=12

                                    x1-x2<=3

                                    x1,x2>=0

(1)matlab中計(jì)算:

>> f = [-4;-1];

>>A = [-1 2; 2 3; 1 -1];

>>b = [4;12;3];

>>[x,fval] = linprog(f,A,b)

 

2)在VC中調(diào)用dll

具體代碼:

 

#include <iostream>

using namespace std;

#include "mclmcr.h"//mwArray類型定義

#include "liblin.h"dll的頭文件

 

#pragma comment(lib,"mclmcr.lib")

#pragma comment(lib,"liblin.lib")

 

int main()

{

           //初始化程序

if(!mclInitializeApplication(NULL,0))

{

cout<<"Could not initialize the application!";

exit(1);

}

 //初始化庫

if(!liblinInitialize())

{

cout<<"Could not Initialize the library!";

exit(1);

}

    //輸入?yún)?shù)f,A,b

mwArray  A(3,2,mxDOUBLE_CLASS);

mwArray  f(2,1,mxDOUBLE_CLASS);

mwArray  b(3,1,mxDOUBLE_CLASS);

 

//輸出參數(shù)X,fval

mwArray  X(2,1,mxDOUBLE_CLASS);

mwArray  fval(1,1,mxDOUBLE_CLASS);

    //輸入,傳給mwArray

double aa[]={-1,2,1,2,3,-1};//注意,這里的約束系數(shù)與在matlab中的不一樣

double bb[]={4,12,3};

double ff[]={-4,-1};

 

//給f,A,b賦值

A.SetData(aa,6);

b.SetData(bb,3);

f.SetData(ff,2);

 

//調(diào)用函數(shù)

lin(2,X,fval,f,A,b);

//從X,fval取值

double* x;

double* fv;

x = new double[2];

fv = new double[1];

 

X.GetData(x,2);

fval.GetData(fv,1);

 

//輸出結(jié)果

cout<<"X = "<<x[0]<<" "<<x[1]<<endl;

cout<<"fv = "<<fv[0]<<endl;

 

//關(guān)閉庫和程序

 

liblinTerminate();

mclTerminateApplication();

 

return 0;

}

 

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多