九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
matlab 2012 vs2010混合編程

原文地址:http://www.cnblogs.com/newpanderking/articles/4057977.html

1、背景

眾所周知,matlab在處理矩陣、數(shù)學(xué)計(jì)算、計(jì)算機(jī)仿真、圖像處理等方面有著 c c 無可比擬的優(yōu)勢(shì),但是做成系統(tǒng)供使用時(shí),又顯得過于粗糙,為了使用起來高大上,計(jì)算起來有簡(jiǎn)單,方便。無疑,c 與matlab混合編程將會(huì)使非??孔V的選擇。

這里暫且不論所謂的matlab效率低,c/c 效率高的問題,自我感覺,以我目前編碼的功底,所編寫的代碼的效率遠(yuǎn)遠(yuǎn)不及matlab提供的代碼的效率。除非你是大牛,或者你是人云亦云,所以能用matlab混合c 編碼還是很不錯(cuò)的選擇,話不多說,我們開始討論正題。

2、我使用的版本是matlab2012與vs2010混合編程的。

軟件的下載這里就不多說了,我相信看這篇教程的你,這兩個(gè)軟件已經(jīng)安裝的妥妥當(dāng)當(dāng)?shù)牧恕?/span>

這里我選用網(wǎng)上常用來做例子的matlab代碼做測(cè)試,spline.m,該文件位于

D:\Program Files\MATLAB\R2012a\toolbox\matlab\polyfun

當(dāng)然該文件中依賴調(diào)用另一個(gè)文件chckxy.m,該文件也在這條路徑下。找到后復(fù)制到matlab的工作目錄下。

這里為了方便提供兩個(gè)文件的代碼:

spline.m

 View Code

chckxy.m

 View Code

ps:說明下,由于這兩個(gè)文件都是matlab的工具文件,所以chckxy.m在調(diào)用時(shí),改了名字叫做mychckxy.m,相應(yīng)的文件名字也需要改。

做一個(gè)簡(jiǎn)單的測(cè)試,做一個(gè)調(diào)用:

clc; clear all; close all;x = 0:10;y = sin(x);xx = 0:.25:10;yy = spline(x,y,xx)plot(x,y,'o',xx,yy);

運(yùn)行結(jié)果:

 

到此為止,都是準(zhǔn)備工作做,下面開始介紹如何在vs中調(diào)用spline函數(shù)。

1)在matlab中輸入命令 mbuild -setup , 運(yùn)行結(jié)果如下圖所示, 按照提示選擇編譯器 vs2010.

mbuild -setup

然后鍵入:mex -setup 命令,運(yùn)行結(jié)果如下圖所示,按照提示選擇編譯器 vs2010

mex -setup

 

然后在matlab命令窗口輸入:

mcc -W cpplib:libspline -T link:lib spline.m

可以得到如下圖這些文件:

依然,其中的'libspline.dll'、'libspline.h'和'libspline.lib'這三個(gè)文件是我們所需的。

 

2)打開vs2010建一個(gè)控制臺(tái)應(yīng)用程序,可以選擇一個(gè)空的控制臺(tái)應(yīng)用程序。

創(chuàng)建程序之后把第一步中得到的三個(gè)文件copy到工程中。

 

由于我的電腦是win 7 64bit,matlab是64bit,所以應(yīng)該選擇x64,而不是win32平臺(tái)。

a)修改平臺(tái)參數(shù),為x64

生成 ---> 配置管理器

 

b)配置包含目錄與庫(kù)目錄

項(xiàng)目 ----> 屬性 ----> vc 目錄

包含目錄:

D:\Program Files\MATLAB\R2012a\extern\include

 

庫(kù)目錄:

D:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft

 

c)配置附加依賴項(xiàng) , 這里根據(jù)項(xiàng)目的不同,依賴的文件不同,這里測(cè)試依賴的是'mclmcrrt.lib'和'libspline.lib'這兩個(gè)lib,第一是庫(kù)lib,第二個(gè)是我們生成的lib.文件。所依賴的lib文件在庫(kù)目錄已經(jīng)說明了,

路徑為:D:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft下。

這里有兩種解決方案,第一種在vs中配置。

項(xiàng)目 ----> 屬性 ----> 連接器 ----> 輸入

第二種方法是,在文件中直接引入lib文件。

 

做完以上工作后,我們新建一個(gè)主函數(shù)作為入口函數(shù),具體測(cè)試代碼如下:

#include 'libspline.h' //增加頭文件#include <cmath>#include <iostream>#include <iomanip>using namespace std;#pragma comment(lib,'mclmcrrt.lib')#pragma comment(lib,'libspline.lib')int main(){ //初始化lib(必須) if (!libsplineInitialize()) return -1; int i, j; double x[1][11], y[1][11]; for(i=0; i<11; i ) { x[0][i] = i; y[0][i] = sin(x[0][i]); } double xx[1][41]; for(i=0; i<41; i ) xx[0][i] = i*0.25; double yy[1][41]; mwArray mwX(1,11,mxDOUBLE_CLASS); mwArray mwY(1,11,mxDOUBLE_CLASS); mwArray mwXX(1,41,mxDOUBLE_CLASS); mwArray mwYY(1,41,mxDOUBLE_CLASS); mwX.SetData(*x, 11); mwY.SetData(*y, 11); mwXX.SetData(*xx, 41); mwYY.SetData(*yy, 41); spline(1, mwYY, mwX, mwY, mwXX); //調(diào)用spline cout<<'yy = '<<endl; i = 0; for(j = 0; j < 41; j ) { //Get第一個(gè)參數(shù)表示用1個(gè)下標(biāo)訪問元素,j 1是列號(hào)(MATLAB下標(biāo)從1開始,而C 從0開始,故做 1操作) yy[0][j] = mwYY.Get(1,j 1); cout<<setprecision(4)<<right<<setw(10)<<yy[0][j]; i ; if(i%7 == 0) cout<<endl; //換行 } cout<<endl; //終止調(diào)用 libsplineTerminate(); return 0;}

 

運(yùn)行結(jié)果如圖:

比較這個(gè)結(jié)果與最開始我們測(cè)試matlab運(yùn)行的結(jié)果,測(cè)試通過。matlab配置完成。

 

ps說明:配置過程中遇到的問題:

配置時(shí)經(jīng)常遇到 LINK2019的錯(cuò)誤。這種錯(cuò)誤就是典型的lib缺失導(dǎo)入的問題。

main.obj : error LNK2019: 無法解析的外部符號(hào) mclGetMatrix_proxy,該符號(hào)在函數(shù) 'public: __cdecl mwArray::mwArray(unsigned __int64,unsigned __int64,enum mxClassID,enum mxComplexity)' (??0mwArray@@QEAA@_K0W4mxClassID@@W4mxComplexity@@@Z) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) mclcppGetLastError_proxy,該符號(hào)在函數(shù) 'public: static void __cdecl mwException::raise_error(void)' (?raise_error@mwException@@SAXXZ) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) mclcppCreateError_proxy,該符號(hào)在函數(shù) 'public: __cdecl mwException::mwException(void)' (??0mwException@@QEAA@XZ) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) ref_count_obj_addref_proxy,該符號(hào)在函數(shù) 'public: __cdecl mwException::mwException(class mwException const &)' (??0mwException@@QEAA@AEBV0@@Z) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) ref_count_obj_release_proxy,該符號(hào)在函數(shù) 'public: virtual __cdecl mwException::~mwException(void)' (??1mwException@@UEAA@XZ) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) error_info_get_message_proxy,該符號(hào)在函數(shù) 'public: virtual char const * __cdecl mwException::what(void)const ' (?what@mwException@@UEBAPEBDXZ) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) array_ref_getV_int_proxy,該符號(hào)在函數(shù) 'public: class mwArray __cdecl mwArray::GetPromoted(unsigned __int64,...)' (?GetPromoted@mwArray@@QEAA?AV1@_KZZ) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) array_ref_set_numeric_mxDouble_proxy,該符號(hào)在函數(shù) 'public: void __cdecl mwArray::SetData(double *,unsigned __int64)' (?SetData@mwArray@@QEAAXPEAN_K@Z) 中被引用1>main.obj : error LNK2019: 無法解析的外部符號(hào) array_ref_get_numeric_mxDouble_proxy,該符號(hào)在函數(shù) 'public: __cdecl mwArray::operator double(void)const ' (??BmwArray@@QEBANXZ) 中被引用

這里是因?yàn)槿鄙伲簃clmcrrt.lib

#pragma comment(lib,'mclmcrrt.lib')

即可解決。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
解決工程問題使用MATLABC數(shù)學(xué)庫(kù)
vs2010下調(diào)用matlab2012b調(diào)試方法
nafxcw.lib與LIBCMT.lib在vs2008中鏈接沖突解決方案_dyqq123...
corelibc.lib(wwinmain.obj) : error LNK2019: 無法解析的外部符號(hào)wWinMain
Windows Mobile 上常見的 DirectShow 鏈接錯(cuò)誤
ffmpeg鏈接錯(cuò)誤:關(guān)于C++ extern "C"
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服