Mục lục:

Tạo tệp Matlab MEX: 3 bước
Tạo tệp Matlab MEX: 3 bước

Video: Tạo tệp Matlab MEX: 3 bước

Video: Tạo tệp Matlab MEX: 3 bước
Video: Phan 3 Script file (M_file) trong MATLAB 2024, Tháng bảy
Anonim
Tạo tệp Matlab MEX
Tạo tệp Matlab MEX

Hướng dẫn cách tích hợp mã C đã biên dịch với Matlab. MEX là viết tắt của MATLAB Executable. Tệp MEX là các chương trình con được liên kết động được tạo ra từ mã nguồn C hoặc Fortran, khi được biên dịch, có thể chạy từ bên trong MATLAB theo cách tương tự như MATLAB M-tệp hoặc các hàm tích hợp. Các chức năng giao diện bên ngoài cung cấp chức năng truyền dữ liệu giữa các tệp MEX và MATLAB và khả năng gọi các hàm MATLAB từ mã C hoặc Fortran. Ở đây tôi sẽ chỉ cho bạn mọi thứ bạn cần để nhanh chóng tạo một tệp mex hữu ích. need: = a text editor = matlab 6.1 trở lên (các phiên bản trước đó cũng có thể tạo tệp mex nhưng định dạng hơi khác) = matlab có trình biên dịch c riêng đi kèm với nó, nhưng tôi đã sử dụng trình biên dịch c ++ trực quan vì tôi đã có nó.

Bước 1: Mã

Mật mã
Mật mã

tải xuống tệp tôi đã đính kèm: mextest1p0.cpp

cpp là viết tắt của c ++ ……… Đây là những gì mã làm: ……… nó nhận một số mà bạn gửi nó từ dấu nhắc lệnh matlab. Nó in "hello world" trong matlab, nó trả về hai đối số cho matlab, một mảng số hai phần tử và một chuỗi mà phần tử đầu tiên của mảng số trả về là 1 + số bạn đã gửi cho nó phần tử thứ hai của mảng số trả về là 2 + số bạn đã gửi nó ………. Đây là cách thực hiện nó: ………… lưu tệp vào máy tính của bạn khởi động matlab điều hướng trong matlab đến thư mục chứa tệp sau đó làm theo hướng dẫn biên dịch và thực thi ở đầu tệp.cpp. Tôi không thể viết các hướng dẫn này ở đây vì các lệnh có thể tự động chỉnh sửa các lệnh và làm cho chúng xuất hiện không chính xác. Trong hình bên dưới, bạn có thể thấy mã đang hoạt động. Đừng lo lắng về "cảnh báo dòng lệnh", nó dường như không có tác dụng gì. Lưu ý ở phía bên trái, thư mục hiện tại chứa tệp.cpp. Ở bên phải, bạn có thể thấy tôi đang biên dịch mã và sau đó thực thi nó từ matlab. Đọc qua tệp trong trình soạn thảo văn bản của bạn (ví dụ: notepad trong windows), nó được ghi chép rất tốt và tự giải thích, bạn sẽ có thể làm hầu hết mọi thứ bạn cần bằng cách tuân theo các quy ước trong mã (tức là sao chép và dán nó và thực hiện sửa đổi nhỏ) ################################################## ########################## …….. LƯU Ý …….. do một số tự động chỉnh sửa gây phiền nhiễu mà các lệnh thực hiện, mã như được thấy trên trang tiếp theo SẼ KHÔNG HOẠT ĐỘNG, bạn PHẢI TẢI TỆP mà tôi đính kèm thay vì sao chép và dán cái này. ##################################################### #######################

Bước 2: Đây là mã, KHÔNG SAO CHÉP VÀ DÁN

Đây là mã, KHÔNG SAO CHÉP VÀ DỪNG LẠI
Đây là mã, KHÔNG SAO CHÉP VÀ DỪNG LẠI

##################################################### ###################### …….. LƯU Ý ……..vì một số tự động chỉnh sửa gây phiền nhiễu mà các hướng dẫn thực hiện, đoạn mã hiển thị trên trang này SẼ KHÔNG LÀM VIỆC, bạn PHẢI TẢI TẬP TIN tôi đính kèm thay vì sao chép và dán tệp này. #################################### ########################################## // Bài này được viết bằng c ++ bởi leevonk // nó là mã cho tệp matlab mex // mã sẽ nhận một giá trị số và xuất ra hai giá trị số // hai số đầu ra được tính từ số đầu vào // mã cũng sẽ xuất ra một giá trị chuỗi // mã sẽ cũng in "hello world" #include "mex.h" void mexFunction (int nlhs, mxArray * plhs , int nrhs, mxArray * prhs ) {// ############## ############################### // ####### - in "hello world" - ### ########## // ######################################### ### mexPrintf ("Xin chào thế giới"); // ####################################### ##### // ######## - Nhận nội dung từ Matlab - ######### // ################ ############################ / * khai báo một biến mảng để giữ các giá trị đến * / double * InValues; / * nhận các giá trị được gửi từ matlab * / InValues = mxGetPr (prhs [0]); / * để sử dụng các giá trị này được gửi từ matlab, hãy thực hiện InValues [0], InValue [1], v.v. tùy thuộc vào số lượng giá trị có. InValues sẽ được sử dụng bên dưới * /// ########################################### ## // ######## - Trả về một mảng số - ########## // #################### ######################## / * khai báo mảng sẽ được gửi đến matlab (* làm cho nó thành một mảng) * / double * OutValues; / * Tạo / cấp phát đối số trả về, một ma trận 1x2 (1 hàng 2 cột) cho vị trí đầu tiên của mảng trả về (plhs [0]) * / plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Lấy con trỏ đến đối số trả về * / OutValues = mxGetPr (plhs [0]); / * gán giá trị cho OutValues sẽ nằm trong vị trí đầu tiên của mảng trả về, ở đây chúng tôi đang sử dụng InValues để tính toán OutValues * / OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################## ########### - Trả về một chuỗi - ############## // ################# ############################ / * khai báo biến chuỗi sẽ được gửi đến matlab * / char * str; / * gán giá trị cho string * / str = "byebye"; / * đặt chuỗi vào vùng trả về mảng thứ hai (plhs [1]) * / plhs [1] = mxCreateString (str); // ########## ##################################//###########--trở lại nội dung khác - ############ // ################################## ############ / * để trả lại nhiều nội dung hơn, hãy làm theo các quy tắc chung ở trên nhưng đặt nội dung đó vào các vị trí plhs khác, plhs [somenumber] * /}

Bước 3: Nếu vì lý do gì thì nó không biên dịch

Nếu vì lý do gì thì nó không biên dịch
Nếu vì lý do gì thì nó không biên dịch

Nếu vì bất cứ lý do gì mà nó không biên dịch (nó hoạt động tốt trên máy tính của tôi), hãy xem những tài nguyên này, chúng là nơi tôi học được từ đó. Chúng có một chút trục trặc (sử dụng một số ngữ pháp cũ, không có chức năng, v.v.) nhưng nếu bạn quay đi quay lại giữa cả hai, bạn sẽ có thể kết hợp với nhau một thứ hoạt động. Http://web.ccr.jussieu.fr/ccr/ Documentation / Calcul / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

Đề xuất: