Πίνακας περιεχομένων:

Δημιουργία αρχείου Matlab MEX: 3 βήματα
Δημιουργία αρχείου Matlab MEX: 3 βήματα

Βίντεο: Δημιουργία αρχείου Matlab MEX: 3 βήματα

Βίντεο: Δημιουργία αρχείου Matlab MEX: 3 βήματα
Βίντεο: Εργαστηριακή άσκηση 2:Μαθαίνοντας το MATLAB 2024, Ιούλιος
Anonim
Δημιουργία αρχείου Matlab MEX
Δημιουργία αρχείου Matlab MEX

Οδηγίες για τον τρόπο ενσωμάτωσης του μεταγλωττισμένου κώδικα C με το Matlab. Το MEX σημαίνει MATLAB εκτελέσιμο. Τα αρχεία MEX είναι δυναμικά συνδεδεμένα υπορουτίνα που παράγονται από τον πηγαίο κώδικα C ή Fortran και, όταν καταρτιστούν, μπορούν να εκτελεστούν από το MATLAB με τον ίδιο τρόπο όπως τα αρχεία MATLAB M ή ενσωματωμένες λειτουργίες. Οι εξωτερικές λειτουργίες διεπαφής παρέχουν λειτουργικότητα για τη μεταφορά δεδομένων μεταξύ αρχείων MEX και MATLAB και τη δυνατότητα κλήσης συναρτήσεων MATLAB από κώδικα C ή Fortran. Εδώ θα σας δείξω όλα όσα χρειάζεστε για να δημιουργήσετε γρήγορα ένα χρήσιμο αρχείο mex. ανάγκη: = ένας επεξεργαστής κειμένου = matlab 6.1 ή παραπάνω (παλαιότερες εκδόσεις μπορούν να κάνουν και αρχεία mex αλλά ελαφρώς διαφορετική μορφή) = το matlab έχει τον δικό του μεταγλωττιστή c που συνοδεύει, αλλά χρησιμοποίησα οπτικό μεταγλωττιστή c ++ γιατί το είχα.

Βήμα 1: Ο κώδικας

Ο κώδικας
Ο κώδικας

κατεβάστε το αρχείο που επισυνάπτω: mextest1p0.cpp

cpp σημαίνει c ++ ……… Αυτό κάνει ο κώδικας: ……… χρειάζεται ένας αριθμός που τον στέλνετε από τη γραμμή εντολών matlab. Εκτυπώνει "hello world" στο matlab επιστρέφει δύο ορίσματα στο matlab, έναν πίνακα αριθμών δύο στοιχείων και μια συμβολοσειρά το πρώτο στοιχείο του πίνακα αριθμών που επιστρέφεται είναι 1 + ο αριθμός που του στείλατε το δεύτερο στοιχείο του πίνακα αριθμών που επιστρέφεται είναι 2 + τον αριθμό που του στείλατε ………. Αυτός είναι ο τρόπος εφαρμογής του: ………… αποθηκεύστε το αρχείο στον υπολογιστή σας Έναρξη matlab πλοήγηση στο matlab στον κατάλογο όπου βρίσκεται το αρχείο και ακολουθήστε τις οδηγίες σύνταξης και εκτέλεσης στο επάνω μέρος του αρχείο.cpp. Δεν μπορώ να γράψω αυτές τις οδηγίες εδώ επειδή οι οδηγίες μπορούν να επεξεργαστούν αυτόματα τις εντολές και να τις κάνουν να εμφανίζονται εσφαλμένα. Στην παρακάτω εικόνα μπορείτε να δείτε τον κώδικα να λειτουργεί. Μην ανησυχείτε για την "προειδοποίηση γραμμής εντολών", δεν φαίνεται να επηρεάζει τίποτα. Παρατηρήστε στην αριστερή πλευρά, ο τρέχων κατάλογος περιέχει το αρχείο.cpp. Στα δεξιά μπορείτε να με δείτε να συντάσσω τον κώδικα και στη συνέχεια να τον εκτελώ από το matlab. Διαβάστε το αρχείο στον επεξεργαστή κειμένου (για παράδειγμα σημειωματάριο στα παράθυρα), είναι πολύ καλά τεκμηριωμένο και αυτονόητο, θα μπορείτε να κάνετε σχεδόν οτιδήποτε χρειάζεστε ακολουθώντας τις συμβάσεις του κώδικα (δηλ. Αντιγράφοντας και επικολλώντας και δημιουργώντας μικρές τροποποιήσεις) ################################################ ######################## …….. ΣΗΜΕΙΩΣΗ …….. λόγω κάποιας ενοχλητικής αυτόματης επεξεργασίας που κάνουν οι οδηγίες, ο κώδικας η επόμενη σελίδα ΔΕΝ ΘΑ ΛΕΙΤΟΥΡΓΕΙ, ΠΡΕΠΕΙ ΝΑ ΚΑΤΕΒΑΣΤΕ ΤΟ ΑΡΧΕΙΟ που επισυνάπτω αντί να το αντιγράψετε και να το επικολλήσετε. ################################################### #######################

Βήμα 2: Αυτός είναι ο κώδικας, ΜΗΝ ΑΝΤΙΓΡΑΦΕΤΕ ΚΑΙ ΠΑΣΤΕΡΕΤΕ

Αυτός είναι ο κώδικας, ΜΗΝ ΑΝΤΙΓΡΑΦΕΤΕ ΚΑΙ ΠΑΣΤΕΡΕΤΕ
Αυτός είναι ο κώδικας, ΜΗΝ ΑΝΤΙΓΡΑΦΕΤΕ ΚΑΙ ΠΑΣΤΕΡΕΤΕ

################################################### #… ΕΡΓΑΣΙΑ, ΠΡΕΠΕΙ ΝΑ ΚΑΤΕΒΑΣΤΕ ΤΟ ΑΡΧΕΙΟ που επισυνάπτω αντί να το αντιγράψετε και να το επικολλήσετε. #################################### ####################################### // // Αυτό γράφτηκε σε c ++ από το leevonk // είναι κωδικός για αρχείο matlab mex // ο κωδικός θα λάβει μία τιμή αριθμού και θα βγάλει δύο τιμές αριθμών // οι δύο αριθμοί εξόδου υπολογίζονται από τον αριθμό εισόδου // ο κώδικας θα εξάγει επίσης μια τιμή συμβολοσειράς // ο κώδικας θα επίσης εκτύπωση "hello world" #include "mex.h" void mexFunction (int nlhs, mxArray *plhs , int nrhs, mxArray *prhs ) {// ############# ############################## // #######-εκτύπωση "γεια σου κόσμο"-### ######## // // ######################################## ### mexPrintf ("Hello world"); // ####################################### ##### // ########-Λάβετε πράγματα από το Matlab-######### // ################ ###########################/ * δηλώστε μια μεταβλητή πίνακα για να κρατήσει τα εισερχόμενα vales*/double* InValues;/* λάβετε τις τιμές που αποστέλλονται από το matlab*/InValues = mxGetPr (prhs [0]);/* για να χρησιμοποιήσετε αυτές τις τιμές που στάλθηκαν από το matlab, κάντε InValues [0], InValue [1], κ.λπ. σύμφωνα με το πόσες τιμές υπάρχουν. Τα InValues θα χρησιμοποιηθούν παρακάτω */// ######################################## ## // #######-Επιστρέφει έναν πίνακα αριθμών-######### // #################### #######################/ * δηλώστε τον πίνακα που θα σταλεί στο matlab (το * το καθιστά πίνακα) */double * OutValues;/ * Δημιουργία/εκχώρηση ορίσματος επιστροφής, μήτρα 1x2 (1 σειρά 2) για την πρώτη υποδοχή του πίνακα επιστροφής (plhs [0]) */plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Λήψη δείκτη στο όρισμα επιστροφής */OutValues = mxGetPr (plhs [0]); / * εκχωρήστε τιμές σε OutValues που θα βρίσκονται στην πρώτη υποδοχή του πίνακα επιστροφής, εδώ χρησιμοποιούμε τα InValues για τον υπολογιστή OutValues */OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // ############################################ // ###########-Επιστροφή μιας συμβολοσειράς-############# // ################## ###########################/* δηλώστε τη μεταβλητή συμβολοσειράς προς αποστολή στο matlab*/char* str;/* εκχωρήστε μια τιμή στο string */str = "byebye";/ *βάλτε τη συμβολοσειρά στη δεύτερη υποδοχή των συστοιχιών επιστροφής (plhs [1]) */plhs [1] = mxCreateString (str); // ########## ##################################//###########--ΕΠΙΣΤΡΟΦΗ περισσότερα πράγματα--############//################################ ############/ * για να επιστρέψετε περισσότερα πράγματα, ακολουθήστε τους γενικούς κανόνες παραπάνω, αλλά τοποθετήστε τα σε άλλες υποδοχές plhs, plhs [somenumber] */}

Βήμα 3: Εάν για οποιοδήποτε λόγο δεν μεταγλωττιστεί

Εάν για Όποιον Λόγο Δεν Συγκεντρώνεται
Εάν για Όποιον Λόγο Δεν Συγκεντρώνεται

Εάν για οποιονδήποτε λόγο δεν μεταγλωττιστεί (θα έπρεπε, λειτουργεί καλά στον υπολογιστή μου) δείτε αυτούς τους πόρους, είναι εκεί από όπου έμαθα. Έχουν μικρές δυσλειτουργίες (χρησιμοποιήστε κάποια παλιά, μη λειτουργική γραμματική κλπ), αλλά αν πηγαίνετε μπρος -πίσω μεταξύ των δύο θα πρέπει να είστε σε θέση να καλύψετε κάτι που λειτουργεί. Http://web.ccr.jussieu.fr/ccr/ Τεκμηρίωση/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Συνιστάται: