国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2014-09-13 06:03張沛露王建軍
吉林建筑大學學報 2014年6期
關鍵詞:數(shù)組調用編程

張沛露 王建軍

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

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

1 VC++調用Matlab方法概述

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

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

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

2 VC++調用Matlab方法示例

2.1 調用Matlab Engine方式示例

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

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

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

memcpy(mxGetPr(yy), y, N*sizeof(double)); //將數(shù)組x復制到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相關文檔.

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

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

mxDestroyArray(yy);

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

}

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

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

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

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

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

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

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

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

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

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

#include

#include /* used for EXIT_SUCCESS */

#include

#include "matlab.h"/*matlab.h為C數(shù)學函數(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;

/* 使用自動內存管理*/

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 結語

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

參 考 文 獻

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

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

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

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

猜你喜歡
數(shù)組調用編程
JAVA稀疏矩陣算法
編程,是一種態(tài)度
元征X-431實測:奔馳發(fā)動機編程
編程小能手
JAVA玩轉數(shù)學之二維數(shù)組排序
紡織機上誕生的編程
核電項目物項調用管理的應用研究
LabWindows/CVI下基于ActiveX技術的Excel調用
Excel數(shù)組公式在林業(yè)多條件求和中的應用
基于系統(tǒng)調用的惡意軟件檢測技術研究
东山县| 江达县| 辽源市| 张家港市| 汝州市| 荆州市| 晋州市| 十堰市| 彝良县| 新乡县| 都匀市| 唐山市| 金湖县| 新野县| 连州市| 龙门县| 邛崃市| 巨野县| 禹城市| 鹰潭市| 泰宁县| 安远县| 凤城市| 定西市| 田林县| 新建县| 博客| 万源市| 兰考县| 柘荣县| 富平县| 淮滨县| 庆城县| 清河县| 宜兴市| 延安市| 溧水县| 泰安市| 咸宁市| 毕节市| 五指山市|