Índice:

Fazendo um arquivo Matlab MEX: 3 etapas
Fazendo um arquivo Matlab MEX: 3 etapas

Vídeo: Fazendo um arquivo Matlab MEX: 3 etapas

Vídeo: Fazendo um arquivo Matlab MEX: 3 etapas
Vídeo: MATLAB - Aula 3: Plotagem e Básico de Scripts. 2024, Novembro
Anonim
Fazendo um arquivo Matlab MEX
Fazendo um arquivo Matlab MEX

Instruções sobre como integrar código C compilado com Matlab. MEX significa executável MATLAB. Os arquivos MEX são sub-rotinas vinculadas dinamicamente produzidas a partir do código-fonte C ou Fortran que, quando compilado, pode ser executado a partir do MATLAB da mesma forma que os arquivos M do MATLAB ou funções integradas. As funções de interface externa fornecem funcionalidade para transferir dados entre arquivos MEX e MATLAB, e a capacidade de chamar funções MATLAB de código C ou Fortran. Aqui, mostrarei tudo que você precisa para criar rapidamente um arquivo mex útil. precisa: = um editor de texto = matlab 6.1 ou superior (versões anteriores também podem fazer arquivos mex, mas um formato um pouco diferente) = matlab tem seu próprio compilador c que vem com ele, mas usei o compilador visual c ++ porque eu o tinha.

Etapa 1: O Código

O código
O código

baixe o arquivo que anexei: mextest1p0.cpp

cpp significa c ++ ……… Isso é o que o código faz: ……… leva um número que você envia do prompt de comando do matlab. Ele imprime "hello world" em matlab ele retorna dois argumentos para matlab, uma matriz de número de dois elementos e uma string o primeiro elemento da matriz de número retornada é 1 + o número que você enviou o segundo elemento da matriz de número retornada é 2 + o número que você enviou ………. Esta é como implementá-lo: ………… salve o arquivo em seu computador inicie o matlab navegue no matlab para o diretório onde o arquivo está e siga as instruções de compilação e execução no topo do arquivo.cpp. Não posso escrever essas instruções aqui porque os instructables editam automaticamente os comandos e os fazem aparecer incorretamente. Na imagem abaixo você pode ver o código funcionando. Não se preocupe com o "aviso da linha de comando", ele parece não ter efeito em nada. Observe no lado esquerdo, o diretório atual contém o arquivo.cpp. À direita você pode me ver compilando o código e depois executando-o a partir do matlab. Leia o arquivo em seu editor de texto (por exemplo, notepad no windows), é muito bem documentado e autoexplicativo, você será capaz de fazer quase tudo que você precisa seguindo as convenções do código (ou seja, copiando e colando e fazendo pequenas modificações) ######################################################## ################################# …….. NOTA …….. por causa de alguma edição automática irritante que instructables faz, o código como visto no próxima página NÃO VAI FUNCIONAR, VOCÊ TEM QUE BAIXAR O ARQUIVO que anexei em vez de copiar e colar isso. ############################################################### ############################

Etapa 2: Este é o código, NÃO COPIE E COLE

Este é o código, NÃO COPIE E COLE
Este é o código, NÃO COPIE E COLE

############################################################### ############################ …….. NOTA ……..por causa de alguma edição automática irritante que instructables faz, o código como visto nesta página NÃO IRÁ TRABALHO, você TEM QUE BAIXAR O ARQUIVO que eu anexei em vez de copiar e colar isto. ######################################## ####################################################################################################### é um código para um arquivo matlab mex // o código terá um valor numérico e produzirá dois valores numéricos // os dois números de saída são calculados a partir do número de entrada // o código também exibirá um valor de string // o código também imprime "hello world" #include "mex.h" void mexFunction (int nlhs, mxArray * plhs , int nrhs, mxArray * prhs ) {// ################ ####################################### // ######## - imprimir "hello world" - ### ########### // ############################################### ### mexPrintf ("Hello world"); // ############################################ ###### // ######## - Obter material do Matlab - ########## // #################### ################################## / * declara uma variável de matriz para conter os valores de entrada * / double * InValues; / * obtém os valores enviados de matlab * / InValues = mxGetPr (prhs [0]); / * para usar esses valores que foram enviados de matlab, faça InValues [0], InValue [1], etc.de acordo com quantos valores existem. Os InValues serão usados abaixo * /// ################################################################################################ ## // ######### - Retorna uma matriz de número - ######### // ####################### ################################ / * declara a matriz que será enviada ao matlab (o * torna uma matriz) * / double * OutValues; / * Criar / alocar argumento de retorno, uma matriz 1x2 (1 linha 2 coluna) para o primeiro slot da matriz de retorno (plhs [0]) * / plhs [0] = mxCreateDoubleMatrix (1, 2, mxREAL); / * Obtém o ponteiro para o argumento de retorno * / OutValues = mxGetPr (plhs [0]); / * atribui valores a OutValues que residirão no primeiro slot da matriz de retorno, aqui estamos usando InValues para computar OutValues * / OutValues [0] = InValues [0] + 1; OutValues [1] = InValues [0] + 2; // #################################################### // ############### - Retorna uma String - ############### // #################### ################################## / * declara a variável string a ser enviada ao matlab * / char * str; / * atribui um valor ao string * / str = "byebye"; / * colocar a string no segundo slot das matrizes de retorno (plhs [1]) * / plhs [1] = mxCreateString (str); // ########### ##################################//###########--Retorna mais coisas--############//################################ ################# / * para devolver mais coisas, siga as regras gerais acima, mas coloque as coisas em outros slots de plhs, plhs [somenumber] * /}

Etapa 3: se por qualquer motivo ele não compilar

Se por qualquer motivo ele não compilar
Se por qualquer motivo ele não compilar

Se por algum motivo ele não compilar (deveria funcionar bem no meu computador) ver esses recursos, foi com eles que aprendi. Eles têm pequenas falhas (o uso de alguma gramática antiga e não funcional, etc.), mas se você alternar entre os dois, deverá ser capaz de remendar algo que funcione.https://web.ccr.jussieu.fr/ccr/ Documentação / Calcul / matlab5v11 / docs / 00009 / 009a1.htmhttps://cnx.org/content/m12348/latest/

Recomendado: