Spisu treści:

Tworzenie pliku Matlab MEX: 3 kroki
Tworzenie pliku Matlab MEX: 3 kroki

Wideo: Tworzenie pliku Matlab MEX: 3 kroki

Wideo: Tworzenie pliku Matlab MEX: 3 kroki
Wideo: Начало работы в Опусе - ВИДЕО 3 - Как создавать и сохранять файлы пациентов в Опусе 2024, Listopad
Anonim
Tworzenie pliku MEX Matlab
Tworzenie pliku MEX Matlab

Instrukcje jak zintegrować skompilowany kod C z Matlabem. MEX oznacza plik wykonywalny MATLAB. Pliki MEX to dynamicznie połączone podprogramy utworzone z kodu źródłowego C lub Fortran, które po skompilowaniu można uruchomić z poziomu MATLAB w taki sam sposób, jak pliki M lub wbudowane funkcje MATLAB. Funkcje interfejsu zewnętrznego zapewniają funkcjonalność przesyłania danych między plikami MEX i MATLAB oraz możliwość wywoływania funkcji MATLAB z kodu C lub Fortran. Tutaj pokażę ci wszystko, czego potrzebujesz, aby szybko utworzyć użyteczny plik mex. potrzeba: = edytor tekstu = matlab 6.1 lub nowszy (wcześniejsze wersje mogą również robić pliki mex, ale nieco inny format) = matlab ma własny kompilator c, który jest z nim dołączony, ale użyłem wizualnego kompilatora c ++, ponieważ go miałem.

Krok 1: Kodeks

Kod
Kod

pobierz załączony plik: mextest1p0.cpp

cpp oznacza c ++ ……… To właśnie robi kod: ……… pobiera liczbę, którą wysyłasz z wiersza poleceń programu Matlab. Wypisuje „hello world” w programie Matlab, zwraca dwa argumenty do programu Matlab, dwuelementową tablicę numerów i ciąg znaków pierwszy element zwróconej tablicy liczb to 1 + numer, który mu wysłałeś, drugi element zwróconej tablicy liczb to 2 + numer, który wysłałeś ………. Oto jak to zaimplementować: ………… zapisz plik na komputerze uruchom matlab nawiguj w programie Matlab do katalogu, w którym znajduje się plik, a następnie postępuj zgodnie z instrukcjami kompilacji i wykonania u góry plik.cpp. Nie mogę napisać tych instrukcji tutaj, ponieważ instrukcje automatycznie edytują polecenia i sprawiają, że pojawiają się one niepoprawnie. Na poniższym obrazku możesz zobaczyć działający kod. Nie przejmuj się „ostrzeżeniem w wierszu poleceń”, wydaje się, że nic nie wpływa. Zauważ, że po lewej stronie bieżący katalog zawiera plik.cpp. Po prawej stronie możesz zobaczyć, jak kompiluję kod, a następnie wykonuję go z programu Matlab. Przeczytaj plik w swoim edytorze tekstu (na przykład notatnik w systemie Windows), jest on bardzo dobrze udokumentowany i nie wymaga wyjaśnień, będziesz w stanie zrobić prawie wszystko, czego potrzebujesz, postępując zgodnie z konwencjami w kodzie (tj. kopiując i wklejając go i tworząc drobne modyfikacje) ############################################### ######################## …….. UWAGA…….. z powodu denerwującej automatycznej edycji, którą wykonują instrukcje, kod widoczny na następna strona NIE BĘDZIE DZIAŁAĆ, MUSISZ POBRAĆ DOŁĄCZONY PLIK, zamiast go kopiować i wklejać. ################################################## ######################

Krok 2: To jest kod, NIE KOPIUJ I WKLEJAJ

To jest kod, NIE KOPIUJ I WKLEJAJ
To jest kod, NIE KOPIUJ I WKLEJAJ

################################################## #####################…….. UWAGA……..z powodu irytującej automatycznej edycji, którą wykonują instrukcje, kod widoczny na tej stronie NIE BĘDZIE PRACA, MUSISZ POBRAĆ ZAŁĄCZONY PLIK, zamiast go kopiować i wklejać.################################ #########################################//To zostało napisane w c++ przez leevonk// jest to kod pliku MEX Matlab //kod przyjmie jedną wartość liczbową i wyprowadzi dwie wartości liczbowe//dwie liczby wyjściowe są obliczane z numeru wejściowego//kod wyprowadzi również wartość ciągu//kod będzie wypisz także "hello world"#include "mex.h"void mexFunction(int nlhs, mxArray *plhs, int nrhs, mxArray *prhs) {//############# #############################//#######--drukuj "Witaj świecie"--### #########//######################################## ###mexPrintf("Witaj świecie");//###################################### #####//########--Pobierz materiały z Matlab--##########//################ ##########################/ * zadeklaruj zmienną tablicową do przechowywania wartości przychodzących */double* InValues;/* pobierz wartości wysłane z matlaba */InValues = mxGetPr(prhs[0]);/* aby użyć tych wartości, które zostały wysłane z Matlaba, wykonaj InValues [0], InValue[1] itp.w zależności od liczby wartości. InValues będą używane poniżej *///######################################## ##//########--Zwróć tablicę liczb--#########//#################### #######################/* zadeklaruj tablicę, która zostanie wysłana do Matlaba (* czyni z niej tablicę) */podwójne* OutValues;/ * Utwórz/alokuj zwracany argument, macierz 1x2 (1 wiersz 2 kolumna) dla pierwszego slotu tablicy zwracanej (plhs[0]) */plhs[0]=mxCreateDoubleMatrix(1, 2, mxREAL); /* Uzyskaj wskaźnik do zwracanego argumentu */OutValues = mxGetPr(plhs[0]); /* przypisz wartości do OutValues, które będą znajdować się w pierwszym slocie tablicy zwracanej, tutaj używamy InValues do skomputeryzowania OutValues */OutValues[0] = InValues[0] + 1;OutValues[1] = InValues[0] + 2;//##########################################// ###########--Zwróć ciąg znaków--##############//################## ############################/* zadeklaruj zmienną łańcuchową do wysłania do programu Matlab */char* str;/* przypisz wartość do string */str = "byebye";/* umieść ciąg w drugim slocie tablic zwracanych (plhs[1]) */plhs[1]=mxCreateString(str);//########## ##################################//###########--powrót więcej rzeczy--############//################################ ############/* aby zwrócić więcej rzeczy, postępuj zgodnie z ogólnymi zasadami powyżej, ale umieść rzeczy w innych slotach plhs, plhs[jakaś liczba] */ }

Krok 3: Jeśli z jakiegokolwiek powodu się nie kompiluje

Jeśli z jakiegokolwiek powodu się nie kompiluje
Jeśli z jakiegokolwiek powodu się nie kompiluje

Jeśli z jakiegoś powodu się nie kompiluje (powinno, działa dobrze na moim komputerze) zobacz te zasoby, to tam się nauczyłem. Mają małe usterki (używają starej, niefunkcjonalnej gramatyki itp.), ale jeśli będziesz przechodzić między nimi, powinieneś być w stanie połączyć coś, co działa.https://web.ccr.jussieu.fr/ccr/ Dokumentacja/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Zalecana: