2009-10-16 91 views
14

Có vẻ như là một số cách để gọi MATLAB trong C C++ và gọi C C++ trong MATLAB. Trong khi tôi cố gắng liệt kê chúng ở đây, xin vui lòng chỉ ra nó nếu tôi bỏ lỡ một cái gì đó.MATLAB trong C C++ và C C++ trong MATLAB

Để gọi C C++ trong MATLAB, cũng có hai phương pháp. Đầu tiên là gọi hàm trong thư viện chia sẻ C. Thứ hai là xây dựng mã C C++ thành các tệp nhị phân MEX, sẽ được gọi từ dòng lệnh MATLAB. Đối với phương pháp đầu tiên, các thư viện được chia sẻ C chỉ là các thư viện chung, tức là không thay đổi mã C của chúng cho MATLAB và được biên dịch từ trình biên dịch C chung như gcc?

Để gọi mã MATLAB trong C C++, có hai phương pháp có sẵn. Đầu tiên là động cơ Matlab. Thứ hai là sử dụng MATLAB Compiler mcc để tạo các thư viện chia sẻ C hoặc C++ từ mã MATLAB của bạn.

Bên cạnh MATLAB và C C++ có thể giao tiếp bằng cách ghi và đọc dữ liệu đến và từ một số tệp (ví dụ: tệp mat, tệp văn bản).

Có nhiều cách để thực hiện từng mục tiêu ở đây, bạn có thể cho tôi biết trường hợp nào là tốt nhất để sử dụng ứng dụng nào trong số đó không? tức là các chức năng gọi điện trong thư viện chia sẻ C VS xây dựng mã C C++ thành các tệp nhị phân MEX, công cụ Matlab VS biên dịch mã Matlab thành thư viện chia sẻ C C++.

Cảm ơn và kính trọng!

+0

Không có ngôn ngữ nào được gọi là C/C++. Interfacing giữa C và X sẽ dễ dàng hơn nhiều so với interfacing giữa C++ và X. –

+11

Bạn biết ý tôi là gì, "C và/hoặc C++" – Tim

+1

Câu trả lời C sẽ ngắn hơn rất nhiều so với câu trả lời C++ (và trong một số trường hợp , các câu trả lời C++ sẽ là "viết trình bao bọc trong C"). Bạn quan tâm đến cái nào hơn? –

Trả lời

8

Tôi chỉ có expreience với các hàm C hoặc C++ gọi từ MATLAB. Có vẻ như tôi chỉ có sự khác biệt giữa các chức năng gọi trong một thư viện chia sẻ và các hàm gọi từ một tệp MEX là với thư viện dùng chung, bạn phải gọi hàm với 'calllib' là một hàm kiểu dòng lệnh và các hàm MEX cho phép bạn gọi các chức năng như thể chúng được xây dựng trong chức năng để giao diện là một chút sạch hơn.

Đề nghị của tôi là sử dụng file MEX nếu

  • Bạn đang sử dụng C++ (bạn có thể phải viết một wrapper để sử dụng C++ trong một thư viện chia sẻ)
  • Bạn đang sử dụng MATLAB như keo cho một số lượng lớn các thường trình C hoặc C++ được tối ưu hóa. Bạn sẽ muốn có thể gọi chúng một cách rõ ràng.

Sử dụng thư viện chia sẻ nếu

  • Bạn đã có một thư viện C hiện tại có thể được sử dụng mà không sửa đổi.
  • Bạn chỉ cần một số lượng nhỏ các cuộc gọi đến các hàm C.

Thực sự, nó đi xuống giao diện. Cá nhân tôi thích tuyến đường tập tin MEX vì nó cung cấp giao diện sạch nhất từ ​​MATLAB đến hàm C hoặc C++ của bạn. Bạn có thể gọi nó giống như một hàm khác với các kiểu MATLAB chuẩn. Với một thư viện chia sẻ, bạn có thể phải làm một số định dạng dữ liệu trước khi gọi hàm thư viện

3

Tôi nghĩ rằng những phương pháp bạn đã đặt tên là chính xác (nó được một lúc kể từ khi tôi đã sử dụng chúng)

Các matlab C-trình biên dịch là không thực sự đặc biệt; có thể sử dụng các trình biên dịch khác nhau. Xem link danh sách các trình biên dịch được hỗ trợ. Điều này không bao gồm gcc, nhưng MS Visual studio được bao gồm. Bạn sẽ gặp sự cố khi liên kết với các thư viện được cung cấp.

Về cơ bản: gọi MATLAB từ C là thứ bạn sẽ làm nếu bạn cần một giao diện chặt chẽ; ví dụ nếu bạn muốn đồng bộ hóa 2 công cụ, hoặc chức năng S của bạn (simulink) yêu cầu thông tin bổ sung. Nhưng sau đó, một tập tin như vậy được gọi là Matlab/simulink ngay từ đầu.

Gọi c từ MATLAB là những gì bạn muốn làm nếu bạn viết các hàm S hoặc mở rộng của riêng bạn thành MATLAB.

Lựa chọn giữa C và C++ là của bạn; nếu bạn bắt đầu từ một trang tính trống, tôi đề nghị bạn sử dụng C++; bạn không cần phải sử dụng chức năng đầy đủ nhưng nó cho phép tự do hơn. Hơn nữa các thư viện có xu hướng có sẵn cho C++ ngày nay.

C là ngôn ngữ được lựa chọn nếu bạn cần di chuyển sang các môi trường rất khác nhau; ví dụ: để biên dịch C thành DSP chẳng hạn. Hoặc nếu bạn đã có mã kế thừa trong C để bắt đầu. Trộn C và C++ là có thể, nhưng có thể hơi cồng kềnh; Tôi chắc chắn bạn sẽ tìm thấy các chủ đề trên StackOverflow về chủ đề này một mình.

2

video Đào tạo về việc sử dụng C++ trong Matlab và Matlab trong C++ (ngôn ngữ Ba Tư)

Nội dung:

1 - Giới thiệu

  • Introduction.wmv [02:00, 1.2 MB, 800x600]

2 - C++ trong Matlab

  • concepts.wmv Cơ bản [09:04, 5.9 MB, 800x600]
  • Cấu hình và một dự án đơn giản [08:25, 13 MB, 800x600]
  • Samples [02:17, 2,7 MB, 800x600]
  • Debugging [02:38, 3.4 MB, 800x600]

3 - Matlab trong C++

  • Matlab C++ Shared DLL.wmv [05:42, 6.8 MB, 800x600]
  • Sử dụng Matlab từ vC++ [10:52, 14,2 MB, 800x600]

Watch or Download from Google

Download from 4Shared