乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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為編譯后的庫(kù)文件名,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ì)象/庫(kù)模塊:加入mclmcrrt.lib  liblin.lib(自己制作dll時(shí)生成的庫(kù)文件)

      注:也可以不在這里設(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);

      }

       //初始化庫(kù)

      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)閉庫(kù)和程序

       

      liblinTerminate();

      mclTerminateApplication();

       

      return 0;

      }

       

       

       

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(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)論公約

        類似文章 更多