matlab函數編譯
㈠ MATLAB中怎麼在編譯器中定義一個四則運算函數
clccleara=round(rand*90)+10;b=round(rand*90)+10;c=input('請輸入一個四則運算符號,請用單引號括起來');switchccase'+'d=a+b;case'-'d=a-b;case'*'d=a*b;case'/'d=a/b;endd示範:請輸入一個四則運算符號,請用單引號括起來'*'d=7520
㈡ matlab函數編寫
MATLAB有自己的文本編輯器,不需要在記事本中寫。
創建一個可調用的M文件函數有好多種方法:
1、File->New->Function,MATLAB會自動打開editor,並且創建一個帶有標准格式的m文件,你可以自己補充需要的功能;
2、也可以直接點擊File下方的創建按鈕,生成一個空白的文檔,然後自己按照函數格式編寫代碼。
代碼寫完後要保存成 .m文件,文件名必須與函數名稱相同,且需保存在當前目錄(Current Folder)下
㈢ MATLAB程序如何編譯產生DLL
把一個簡單的m代碼編譯成C++介面的DLL,然後在C++程序中調用。為了簡單起見,這里的C++程序是一個Win32 Console程序,而不是Windows圖形界面的程序,不過不妨礙我們的討論。
下面是這個例子用到的m代碼。它定義了一個名為myadd2的函數
function [y,z] = myadd2(a, b)
% mmy function, just to demonstrate the idea
y = a+b;
z = a+2*b;
end
復制代碼
首先把這個函數編譯成C++介面的DLL。為此,我們需要先設置MATLAB編譯器。具體做法是在MATLAB命令行執行「mbuild -setup」。然後用下面這行命令把myadd2函數編譯成一個C++介面的DLL:
mcc -W cpplib:libmyadd2 -T link:lib myadd2
復制代碼
結果,我們將會得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.lib等在內的一些文件。接下來我們只需要這四個文件。
然後在VS2005中創建一個Win32 Console的VC++工程,我在測試時取名為testmyadd2_r2007b。把以上四個文件拷貝到VC++工程的源代碼所在目錄。
接下來設置VC++,讓它能找到MATLAB介面函數的定義及連接庫函數。可以有兩種設置方式:一種是改VS2005中關於VC++的設置,這樣的好處是每個新的工程都能自動獲得這個設定;而另一種是只改當前工程的設置,也就是設置只對該工程有效。這里用後一種方式。
在VS2005中打開工程testmyadd2_r2007b,選擇菜單「Project-->;Properties,在出來的對話框上,把MATLAB提供的include路徑加到VC++的頭文件搜索路徑。
然後把相應的lib所在目錄加到linker的額外搜索路徑上
接下來,告訴VC++,我們的這個程序需要連接到另外兩個額外的庫函數:libmyadd2.lib和mclmcrrt.lib。中間用空格隔開
最後則是程序代碼。這個程序只有一個main函數,其完整代碼附在下面給大家參考。
#include "stdafx.h"
#include <iostream>
#include "mclmcr.h"
#include "mclcppclass.h"
#include "libmyadd2.h"
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "Hello world!" << std::endl;
/* Initialize the MCR */
if( !mclInitializeApplication(NULL,0) )
{
std::cout << "Could not initialize the application!" << std::endl;
return -1;
}
// initialize lib
if( !libmyadd2Initialize())
{
std::cout << "Could not initialize libmyadd2!" << std::endl;
return -1;
}
try
{
// declare and initialize a
mwArray a(2, 2, mxDOUBLE_CLASS);
double *aData;
aData = new double[4];
復制代碼
本帖隱藏的內容
int i;
for( i=0; i<4; ++i)
{
aData = 1.0*i;
}
// print output
std::cout << "a = " << std::endl;
std::cout << aData[0] << ",\t" << aData[1] << std::endl;
std::cout << aData[2] << ",\t" << aData[3] << std::endl;
a.SetData(aData, 4);
// declare and initialize b
mwArray b(2, 2, mxDOUBLE_CLASS);
b(1,1) = 11.;
b(1,2) = 12.;
b(2,1) = 21.;
b(2,2) = 22.;
mwArray y(2, 2, mxDOUBLE_CLASS);
mwArray z(2, 2, mxDOUBLE_CLASS);
// call the function
myadd2(2, y, z, a, b);
// data from mwArray to C++ objects
// allocate outputs
double *yData, *zData;
yData = new double[4];
復制代碼
if( yData == NULL )
{
std::cout << "Failed to allocate memory for yData!" << std::endl;
return -1;
}
zData = new double[4];
if( zData == NULL )
{
std::cout << "Failed to allocate memory for zData!" << std::endl;
return -1;
}
// data from mwArray to C++
y.GetData(yData, 4);
z.GetData(zData, 4);
// print output
std::cout << "y = " << std::endl;
std::cout << yData[0] << ",\t" << yData[1] << std::endl;
std::cout << yData[2] << ",\t" << yData[3] << std::endl;
std::cout << "z = " << std::endl;
std::cout << zData[0] << ",\t" << zData[1] << std::endl;
std::cout << zData[2] << ",\t" << zData[3] << std::endl;
// deallocate memory
delete [] aData;
delete [] zData;
delete [] yData;
}
catch( const mwException& e)
{
std::cerr << e.what() << std::endl;
}
// terminate the lib
libmyadd2Terminate();
// terminate MCR
mclTerminateApplication();
return 0;
}
㈣ MATLAB 函數編寫
首先建立M文件或直接點擊(File/New/Function)建立函數文件,其中函數文件的格式是:function[輸出變數]=函數名稱(輸入變數)%注釋%函數體舉例說明:假設有個函數y=2*x^2+3*x+4,編寫一個子函數(自定義函數)建立1個*.m文件,文件內
㈤ matlab調用C++函數,編譯出錯
檢查那個位置究竟有沒有那個文件。
測試的話,可以直接把文件頭的內容復制粘貼到cpp最前面。
㈥ 請教關於利用Matlab中「mex」命令編譯C程序的問題
1.准備好C語言程序,清楚C語言的入口函數
2.編寫mexfunction函數。mexfunction函數為C語言與MATLAB語言的介面函數。調用實例在mylinedetect.c文件中.在MATLAB中調用mex指令編譯相關文件,將C語言編譯為MEX文件。
3.編譯完成後,生成mylinedetect.mexw32或mylinedetect.mexw64文件,此文件即mex文件,用於MATLAB與C語言介面函數.
4.編譯完成之後,編寫MATLAB函數,調用MEX文件。以MEX文件的形式調用編譯完成的C語言函數[o1,o2]=mylinedetect(double(X).');......
5.輸出結果,上述linedetect函數完成圖像中直線檢測功能,帶入MATLAB中調用後形成結果。