Isi kandungan:

Membuat Fail Matlab MEX: 3 Langkah
Membuat Fail Matlab MEX: 3 Langkah

Video: Membuat Fail Matlab MEX: 3 Langkah

Video: Membuat Fail Matlab MEX: 3 Langkah
Video: How to Create C++ mex files for MATLAB 2024, November
Anonim
Membuat Fail Matlab MEX
Membuat Fail Matlab MEX

Petunjuk mengenai cara mengintegrasikan kod C yang disusun dengan Matlab. MEX bermaksud MATLAB Executable. Fail MEX adalah subrutin yang dihubungkan secara dinamik yang dihasilkan dari kod sumber C atau Fortran yang, apabila disusun, dapat dijalankan dari dalam MATLAB dengan cara yang sama seperti fail MLL atau fungsi terbina dalam. Fungsi antara muka luaran menyediakan fungsi untuk memindahkan data antara fail MEX dan MATLAB, dan keupayaan untuk memanggil fungsi MATLAB dari kod C atau Fortran. Di sini saya akan menunjukkan semua yang anda perlukan untuk membuat fail mex yang berguna dengan cepat. perlukan: = penyunting teks = matlab 6.1 atau lebih tinggi (versi terdahulu boleh menggunakan fail mex juga tetapi formatnya sedikit berbeza) = matlab mempunyai penyusun c sendiri yang disertakan dengannya, tetapi saya menggunakan penyusun visual c ++ kerana saya memilikinya.

Langkah 1: Kodnya

Kod tersebut
Kod tersebut

muat turun fail yang saya lampirkan: mextest1p0.cpp

cpp adalah singkatan dari c ++ ……… Inilah yang dilakukan kodnya: ……… ia memerlukan nombor yang anda kirimkan dari command prompt matlab. Ia mencetak "hello world" dalam matlab ia mengembalikan dua argumen ke matlab, susunan nombor dua elemen dan rentetan elemen pertama dari susunan nombor yang dikembalikan adalah 1 + nombor yang anda kirimkan elemen kedua dari susunan nombor yang dikembalikan adalah 2 + nombor yang anda kirimkan ………. Ini adalah cara melaksanakannya: ………… simpan fail tersebut ke komputer anda mulakan matlab arahkan di matlab ke direktori di mana fail tersebut kemudian ikuti arahan penyusunan dan pelaksanaan di bahagian atas fail.cpp. Saya tidak dapat menulis arahan ini di sini kerana arahan mengedit perintah secara automatik dan membuatnya tidak betul. Dalam gambar di bawah, anda dapat melihat kodnya berfungsi. Jangan bimbang tentang "amaran baris perintah", sepertinya tidak akan mempengaruhi apa-apa. Perhatikan di sebelah kiri, direktori semasa mengandungi fail.cpp. Di sebelah kanan anda dapat melihat saya menyusun kod dan kemudian melaksanakannya dari matlab. Baca fail di editor teks anda (misalnya notepad di windows), sangat didokumentasikan dan jelas, anda akan dapat melakukan hampir semua perkara yang anda perlukan dengan mengikuti konvensyen dalam kod (iaitu menyalin dan menempelkannya dan membuatnya sedikit pengubahsuaian) ############################################## ######################## …….. PERHATIAN …….. kerana beberapa penyuntingan automatik yang menjengkelkan yang dilakukan oleh instruktor, kod seperti yang dilihat pada halaman seterusnya TIDAK AKAN BEKERJA, anda HARUS MENGUNDUH FILE yang saya lampirkan daripada menyalin dan menampal ini. ################################################# ######################

Langkah 2: Ini Kod, JANGAN SALIN DAN LULUS

Inilah Kodnya, JANGAN SALIN DAN LULUS
Inilah Kodnya, JANGAN SALIN DAN LULUS

################################################# ##################### …….. PERHATIKAN …….. kerana beberapa penyuntingan automatik yang menjengkelkan yang diarahkan, kod seperti yang dilihat di halaman ini TIDAK AKAN BEKERJA, anda HARUS MENGUNDUH FILE yang saya lampirkan daripada menyalin dan menampal ini. ################################# ###################################### // Ini ditulis dalam c ++ oleh leevonk // itu adalah kod untuk fail mex matlab // kod itu akan mengambil satu nilai nombor dan mengeluarkan dua nilai nombor // dua nombor output dikira dari nombor input // kod itu juga akan mengeluarkan nilai rentetan // kod tersebut akan juga cetak "hello world" #include "mex.h" void mexFunction (int nlhs, mxArray * plhs , int nrhs, mxArray * prhs ) {// ############# ############################ // ####### - cetak "hello world" - ### ######### // ###################################### ### mexPrintf ("Hello world"); // ##################################### ##### // ######## - Dapatkan Barang Dari Matlab - ######### // ################ ########################## / * nyatakan pemboleh ubah array untuk menahan nilai masuk * / ganda * InValues; / * dapatkan nilai yang dihantar dari matlab * / InValues = mxGetPr (prhs [0]); / * untuk menggunakan nilai-nilai ini yang dihantar dari matlab, lakukan InValues [0], InValue [1], dan lain-lain mengikut berapa banyak nilai yang ada. InValues akan digunakan di bawah ini * /// ######################################## ## // ######## - Kembalikan susunan nombor - ######### // ################### ####################### / * nyatakan array yang akan dihantar ke matlab (the * menjadikannya array) * / double * OutValues; / * Buat / peruntukkan argumen pulangan, Matriks 1x2 (1 baris 2 lajur) untuk slot pertama array kembali (plhs [0]) * / plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Dapatkan penunjuk ke argumen pengembalian * / OutValues = mxGetPr (plhs [0]); / * berikan nilai kepada OutValues yang akan berada di slot pertama array kembali, di sini kita menggunakan InValues untuk komputer OutValues * / OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ########################################## // ########### - Return a String - ############# // ################# ########################## / * nyatakan pemboleh ubah rentetan untuk dikirim ke matlab * / char * str; / * tetapkan nilai ke string * / str = "byebye"; / * masukkan rentetan ke dalam slot kedua susunan kembali (plhs [1]) * / plhs [1] = mxCreateString (str); // ########## ################################# // ########### - kembali lebih banyak barang - ############ // ################################ ############ / * untuk mengembalikan lebih banyak barang, ikuti peraturan umum di atas tetapi masukkan barang ke slot plhs lain, sila [somenumber] * /}

Langkah 3: Sekiranya untuk Sebab Apa pun Ia Tidak Menyusun

Sekiranya untuk Sebab Apa pun Ia Tidak Menyusun
Sekiranya untuk Sebab Apa pun Ia Tidak Menyusun

Sekiranya atas sebab apa pun ia tidak menyusun (semestinya, berfungsi dengan baik di komputer saya) melihat sumber-sumber ini, mereka adalah tempat saya belajar. Mereka mempunyai sedikit gangguan (penggunaan beberapa tatabahasa lama, tidak berfungsi, dan lain-lain) tetapi jika anda berulang-alik di antara keduanya, anda seharusnya dapat bersama-sama mengerjakan sesuatu yang berfungsi.https://web.ccr.jussieu.fr/ccr/ Dokumentasi / Kira / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

Disyorkan: