• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    VC++與Matlab混合編程方法*

    2014-09-13 06:03:18張沛露王建軍
    吉林建筑大學(xué)學(xué)報 2014年6期
    關(guān)鍵詞:函數(shù)庫數(shù)組調(diào)用

    張沛露 王建軍

    (1:吉林建筑大學(xué)計算機科學(xué)與工程學(xué)院,長春 130118; 2:中國科學(xué)院長春光學(xué)精密機械與物理研究所,長春 130033)

    Matlab是矩陣實驗室(Matrix Laboratory)的簡稱,它是美國Math Works公司推出的一套數(shù)值計算軟件,以矩陣作為基本數(shù)據(jù)結(jié)構(gòu),可以實現(xiàn)數(shù)值分析、優(yōu)化、統(tǒng)計、偏微分方程數(shù)值解、自動控制、信號處理、圖像處理等若干個領(lǐng)域的計算和圖形處理功能.Matlab以矩陣作為基本數(shù)據(jù)結(jié)構(gòu),非常適合大規(guī)模的數(shù)值計算,使用Matlab,可以較使用傳統(tǒng)的編程語言(如C,C++和Fortran等)更快地解決技術(shù)計算問題.VC++作為可視化編程的典范,可以利用它進(jìn)行各類軟件的開發(fā),從編制各種功能強大的軟件界面到開發(fā)各種復(fù)雜的數(shù)學(xué)算法,均可找到它的身影[1].一般情況下,利用VC對數(shù)學(xué)算法進(jìn)行設(shè)計往往費時費力,而Matlab在進(jìn)行數(shù)學(xué)算法設(shè)計時具有獨特的優(yōu)勢,因此,在VC中調(diào)用Matlab進(jìn)行混合編程是一種簡便高效的處理方式[2].

    1 VC++調(diào)用Matlab方法概述

    一般來說,VC++調(diào)用Matlab混合編程有以下幾個途徑:

    (1) 通過Matlab Engine方式. Matlab Engine是Matlab提供的一組接口函數(shù),Matlab Engine采用C/S(客戶機/服務(wù)器)模式,Matlab充當(dāng)后臺服務(wù)器,而VC++程序充當(dāng)前臺客戶機,通過Windows的動態(tài)控件與服務(wù)器進(jìn)行通信,向Matlab Engine傳遞命令和數(shù)據(jù),并從Matlab Engine接受數(shù)據(jù)信息.開發(fā)者可以在前臺程序中調(diào)用這些接口函數(shù),實現(xiàn)對Matlab Engine的控制.采用這種方法幾乎能利用Matlab全部功能,但是,需要在機器上安裝Matlab軟件.

    (2) 直接調(diào)用Matlab的C/C++數(shù)學(xué)函數(shù)庫. Matlab中還提供可以供C/C++語言調(diào)用的C/C++數(shù)學(xué)函數(shù)庫,其中包含了大量C/C++語言重寫的Matlab數(shù)學(xué)函數(shù),這些函數(shù)涉及廣泛,主要包括:線性代數(shù)、計算方法、傅立葉變換、多項式計算、解微分方程等,并且函數(shù)庫中提供了許多矩陣操作函數(shù),在VC中可以直接使用這些函數(shù),通過使用這些函數(shù)可以在VC中方便地實現(xiàn)矩陣運算功能.

    2 VC++調(diào)用Matlab方法示例

    2.1 調(diào)用Matlab Engine方式示例

    在安裝Matlab計算機上,通過調(diào)用Matlab API函數(shù),實現(xiàn)VC++對Matlab各種數(shù)學(xué)運算功能的使用[3].以矩陣運算為例,常用的Matlab API矩陣運算函數(shù)(如表1所示).

    表1 常用Matlab API矩陣運算函數(shù)

    若要成功調(diào)用Matlab Engine,還需在VC++中對編譯環(huán)境進(jìn)行設(shè)置,如對頭文件、庫文件包含路徑進(jìn)行設(shè)置等.采用Matlab Engine方式進(jìn)行調(diào)用,不僅可以進(jìn)行基本數(shù)學(xué)運算,還可以使用Matlab強大的圖形功能.但是,該種方式的缺陷是不能脫離Matlab的運行環(huán)境,即在計算機上必須安裝有Matlab軟件才能運行目標(biāo)程序,給程序的移植帶來不便.下面的例子給出了使用引擎方式調(diào)用Matlab的常用方式.

    #include

    #include

    #include "engine.h"

    using namespace std;

    void main()

    {

    const int N = 50;

    double x[N],y[N];

    int j = 1;

    for (int i=0; i

    {

    x[i] = (i+1);

    y[i] = sin(x[i]) + j * log(x[i]); //產(chǎn)生-之間的隨機數(shù)賦給xx[i];

    j *= -1;

    }

    Engine *ep; //定義Matlab引擎指針.

    ep=engOpen(NULL); //測試是否啟動Matlab引擎成功.

    //定義mxArray,為行,N列的實數(shù)數(shù)組.

    mxArray *xx = mxCreateDoubleMatrix(1,N, mxREAL);

    mxArray *yy = mxCreateDoubleMatrix(1,N, mxREAL); //同上.

    memcpy(mxGetPr(xx), x, N*sizeof(double)); //將數(shù)組x復(fù)制到mxarray數(shù)組xx中.

    memcpy(mxGetPr(yy), y, N*sizeof(double)); //將數(shù)組x復(fù)制到mxarray數(shù)組yy中.

    engPutVariable(ep, "xx",xx); //將mxArray數(shù)組xx寫入到Matlab工作空間,命名為xx.

    engPutVariable(ep, "yy",yy); //將mxArray數(shù)組yy寫入到Matlab工作空間,命名為yy.

    //向Matlab引擎發(fā)送畫圖命令.plot為Matlab的畫圖函數(shù),參見Matlab相關(guān)文檔.

    engEvalString(ep, "plot(xx, yy); ");

    mxDestroyArray(xx); //銷毀mxArray數(shù)組xx和yy.

    mxDestroyArray(yy);

    engClose(ep); //關(guān)閉Matlab引擎.

    }

    2.2 調(diào)用Matlab的C/C++函數(shù)庫

    在使用Matlab的C/C++函數(shù)庫前需要進(jìn)行安裝[4]:

    1) 在Matlab命令窗口輸入:mbuild-setup;

    2) 按照提示選擇VC的編譯器,完成后在Matlab命令窗口中輸入:mex-setup.

    由于Matlab C++ Math Library或Matlab C Math Library是以動態(tài)鏈接庫的形式,提供對函數(shù)的調(diào)用,因此首先要在Visual C++的集成開發(fā)環(huán)境中進(jìn)行編譯環(huán)境的配置.主要包括:

    1) 設(shè)置Matlab中頭文件(*.h)和鏈接庫(*.lib)的路徑;

    2) 設(shè)置運行時動態(tài)鏈接庫;

    3) 設(shè)置靜態(tài)鏈接的引入庫文件;

    4) 在用到Matlab的源程序中加入#include“matlab.h”.

    下面給出來看matlab自帶的一個使用C函數(shù)庫的例子.

    #include

    #include /* used for EXIT_SUCCESS */

    #include

    #include "matlab.h"/*matlab.h為C數(shù)學(xué)函數(shù)庫的頭文件

    static double real_data[]= { 1, 2, 3, 4, 5, 6 };

    static double cplx_data[]= { 7, 8, 9, 10, 11, 12 };

    int main()

    {

    /* 聲明兩個mxArray矩陣變量并賦初值為NULL */

    mxArray *mat0 = NULL;

    mxArray *mat1 = NULL;

    /* 使用自動內(nèi)存管理*/

    mlfEnterNewContext(0, 0);

    /* 創(chuàng)建矩陣mat0,mat1并賦值 */

    mlfAssign(&mat0, mlfDoubleMatrix(2, 3, real_data, NULL));

    mlfAssign(&mat1, mlfDoubleMatrix(3, 2, real_data, cplx_data));

    mlfPrintMatrix(mat0);

    mlfPrintMatrix(mat1);

    mxDestroyArray(mat0);

    mxDestroyArray(mat1);

    mlfRestorePreviousContext(0, 0);

    return(EXIT_SUCCESS);

    }

    3 結(jié)語

    本文闡述了VC調(diào)用Matlab的兩種常用方法,對其中較為常用的方法進(jìn)行了詳細(xì)介紹,并給出示例說明,為相關(guān)人員進(jìn)行混合編程提供較為實用的方法.兩種方法都需要Matlab環(huán)境支持,安裝Matlab會占用較多資源,在資源緊張時容易受到限制,下一步擬對Matlab安裝環(huán)境依賴較小的方法進(jìn)行研究.

    參 考 文 獻(xiàn)

    [1] 朱傳安,潘大夫.Matlab與C/C++混合編程接口及應(yīng)用[J].微計算機信息,2010(15):237-239.

    [2] [美]David J.KruglinsKi,Scot Wingo.Visual C++6.0技術(shù)內(nèi)幕(第五版)[M].北京:北京希望電子出版社,2001:550-672.

    [3] 呂延慶,朱堅民,周福章.基于Visual C++和Matlab的聯(lián)合編程方法的研究[J].計算機應(yīng)用研究,2000(11):101-103.

    [4] 李天昀,葛臨東.綜述MATLAB與VC++的交互編程[J].計算機仿真,2004(9):193-196.

    猜你喜歡
    函數(shù)庫數(shù)組調(diào)用
    JAVA稀疏矩陣算法
    電腦報(2022年13期)2022-04-12 00:32:38
    用于優(yōu)化雷達(dá)信號處理的VSIPL函數(shù)庫
    基于Python的開源GIS應(yīng)用開發(fā)
    Scratch求最值和平均值
    電腦報(2020年34期)2020-09-12 14:03:42
    JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
    電腦報(2020年24期)2020-07-15 06:12:41
    核電項目物項調(diào)用管理的應(yīng)用研究
    基于BB60C的IQ數(shù)據(jù)采集與存儲系統(tǒng)設(shè)計
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    尋找勾股數(shù)組的歷程
    东阳市| 三台县| 德令哈市| 苗栗市| 祁阳县| 来宾市| 海宁市| 峨眉山市| 高阳县| 格尔木市| 河池市| 泽州县| 仙桃市| 天镇县| 长泰县| 奉节县| 精河县| 扎鲁特旗| 仙游县| 北碚区| 紫阳县| 焦作市| 池州市| 民丰县| 新和县| 讷河市| 耒阳市| 将乐县| 夏津县| 香港| 江源县| 仙桃市| 顺平县| 巴林右旗| 滨州市| 峨眉山市| 晋城| 元江| 永寿县| 独山县| 名山县|