日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)

發布時間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要:MATLAB對于矩陣處理是非常高效的,而C++對于矩陣操作是非常麻煩的,因而可以采用C++與MATLAB混合編程求解矩陣問題。

主要思路就是,在MATLAB中編寫函數腳本并使用C++編譯為dll文件(在C++中可以調用編譯的函數),然后對VS項目進行文件配置,編寫C++代碼調用MATLAB中定義的函數。

問題描述:對于一個多項式

需要求解c到c的值,由相關條件已知c=c=0,且、、、

可得如下矩陣式:

對比類似AX=B,可求X=A\B。

1、寫出MATLAB代碼如下

運行結果:

2、使用C++編譯器將ComputeC2_C5.m文件編譯成C++可以調用的.dll文件,步驟:

2.1、在MATLAB控制欄輸入"mex -setup"

2.2、點擊"mex -setup C++",使用C++進行編譯

2.3、輸入"deploytool",彈出編譯(Compiler)窗口,選擇Library Compiler(庫編譯)。

2.4、進入MATLAB Compiler窗口,按照如下步驟,1)選擇C++ Shared Library,2)點擊"+"號按鈕添加將要編譯的.m文件,3)填寫Library的信息,默認自動填寫腳本文件名稱,4)點擊Package"√"按鈕,進行編譯打包處理。

2.5、選擇一個文件夾存放打包生成的文件,默認和腳本文件名相同的.prj文件。

2.6、打包處理過程(大概需要幾十秒)

2.7、生成后自動存放在與腳本同名的文件夾下,如下圖所示,第一個文件夾中的exe文件用于程序發布時用,第二個文件夾中包含相當于release下得.h,.lib和 .dll文件,第三個文件包含測試用地.h,.lib和 .dll文件等文件,是測試需要的;至此MATLAB生成dll文件完成。

3、新建C++項目,并將打包生成的文件導入C++項目。

3.1、將for_testing文件夾中的.h、.lib、.dll文件復制到項目中并和.h、.cpp、.cu(CUDA項目文件)放在一起

3.2、并將.h(ComputeC2_C5.h)文件添加到項目中

3.3、配置電腦系統環境變量和VS工程屬性

1)在系統環境變量的Path中添加"Matlab安裝目錄\bin\win64;"

2)在項目屬性->配置屬性->VC++ 目錄->包含目錄,添加"Matlab安裝目錄\extern\include"

3)在項目屬性->配置屬性->VC++ 目錄->庫目錄,添加"Matlab安裝目錄\extern\include\lib\win64\microsoft"

4)在項目屬性->配置屬性->鏈接器->輸入->附加依賴項,添加

" libmat.lib

libmex.lib

mclmcr.lib

mclmcrrt.lib

libemlrt.lib

libeng.lib

libfixedpoint.lib

libcovrt.lib "

4、編寫代碼

代碼(.cu文件是CUDA項目的文件,和.cpp文件類似,一樣可以使用):

#pragma once

#pragma comment(lib,"mclmcrrt.lib") //MATLAB中的庫文件

#pragma comment(lib,"ComputeC2_C5.lib") //必須要鏈接ComputeC2_C5.lib庫才能正常編譯運行#include"mclcppclass.h" //使用mwArray類的頭文件

#include "ComputeC2_C5.h" //MATLAB生成的頭文件

void ComputeC(doubleamplitude)

{if (!ComputeC2_C5Initialize())//初始化; 注意這個初始化中 !ComputeC2_C5Initialize() 字段中的 ComputeC2_C5與matlab編譯成的.lib同名

{

cout<< "Could not initialize addfunction!";

exit(0);

}

mwArray X(4, 1, mxDOUBLE_CLASS, mxREAL); //申請4行1列的矩陣數組

mwArray A(1, 1, mxDOUBLE_CLASS, mxREAL); //申請1行1列的矩陣數組

double *C2ToC5 = new double[4]; //保存X矩陣中的元素

A.SetData(&amplitude, 1); //設置參數

ComputeC2_C5(1, X, A); //調用函數

X.GetData(C2ToC5,4); //將函數返回值保存在C2ToC5數組中

cout <

{

cout<< "c" << i + 2 << "=" << C2ToC5[i] <

}

ComputeC2_C5Terminate();//注意結束中 !ComputeC2_C5Terminate() 字段中的 ComputeC2_C5也與matlab編譯成的.lib同名

}intmain()

{

ComputeC(10);

system("pause");return 0;

}

5、結果(上邊為VS項目運行結果,下邊為MATLAB運行結果,結果一致):

6、常見問題:

6.1、MATLAB和VS項目需要位數相同,同為32位或64位。

6.2、編譯通過,運行提示"mclmcr.lib",因為系統環境變量沒有配置

6.3、編譯通過,運行不出錯但是窗口一閃而過,則是沒有設置初始化和結束語句。即

總結

以上是生活随笔為你收集整理的matlab两个多项式相除,C++和MATLAB混合编程求解多项式系数(矩阵相除)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。