İçindekiler:

Matlab MEX Dosyası Yapımı: 3 Adım
Matlab MEX Dosyası Yapımı: 3 Adım

Video: Matlab MEX Dosyası Yapımı: 3 Adım

Video: Matlab MEX Dosyası Yapımı: 3 Adım
Video: Serkan Ayan - Creating a video animation with Manim 2024, Kasım
Anonim
Matlab MEX Dosyası Yapmak
Matlab MEX Dosyası Yapmak

Derlenmiş C kodunun Matlab ile nasıl entegre edileceğine ilişkin talimatlar. MEX, MATLAB Yürütülebilir anlamına gelir. MEX dosyaları, derlendiğinde, MATLAB M dosyaları veya yerleşik işlevlerle aynı şekilde MATLAB içinden çalıştırılabilen C veya Fortran kaynak kodundan üretilen dinamik olarak bağlantılı alt rutinlerdir. Harici arayüz işlevleri, MEX dosyaları ve MATLAB arasında veri aktarımı için işlevsellik ve C veya Fortran kodundan MATLAB işlevlerini çağırma yeteneği sağlar. Burada size hızlı bir şekilde kullanışlı bir mex dosyası yapmak için ihtiyacınız olan her şeyi göstereceğim. ihtiyaç:= bir metin editörü= matlab 6.1 veya üzeri (önceki sürümler mex dosyalarını da yapabilir ama biraz farklı formatta olabilir) = matlab'ın kendi c derleyicisi var, ama ben görsel c++ derleyicisini kullandım çünkü bende vardı.

Adım 1: Kod

kod
kod

eklediğim dosyayı indirin: mextest1p0.cpp

cpp, c++ anlamına gelir ………Kod bunu yapar:……… matlab komut isteminden gönderdiğiniz bir sayıyı alır. Matlab'da "merhaba dünya" yazdırır, matlab'a iki argüman, iki elemanlı bir sayı dizisi ve bir dize döndürür, döndürülen sayı dizisinin ilk öğesi 1 + gönderdiğiniz sayı, döndürülen sayı dizisinin ikinci öğesi 2 + gönderdiğiniz numara ………. Bunun nasıl uygulanacağı:………… dosyayı bilgisayarınıza kaydedin matlab'ı başlatın matlab'da dosyanın bulunduğu dizine gidin, ardından üstteki derleme ve yürütme talimatlarını izleyin.cpp dosyası. Bu talimatları buraya yazamam çünkü talimatlar komutları otomatik olarak düzenler ve yanlış görünmesini sağlar. Aşağıdaki resimde kodun çalıştığını görebilirsiniz. "Komut satırı uyarısı" hakkında endişelenmeyin, hiçbir şeyi etkilemiyor gibi görünüyor. Sol tarafta dikkat edin, geçerli dizinde.cpp dosyası bulunur. Sağ tarafta, kodu derlediğimi ve ardından matlab'dan çalıştırdığımı görebilirsiniz. Dosyayı metin düzenleyicinizde okuyun (örneğin pencerelerde not defteri), çok iyi belgelenmiştir ve kendi kendini açıklayıcıdır, koddaki kuralları izleyerek (yani kopyalayıp yapıştırarak ve yaparak) ihtiyacınız olan hemen hemen her şeyi yapabilirsiniz. küçük değişiklikler) ############################################# ######################### …….. NOT…….. Talimatların yaptığı bazı can sıkıcı otomatik düzenleme nedeniyle, kod sonraki sayfa ÇALIŞMAZ, bunu kopyalayıp yapıştırmak yerine eklediğim DOSYAYI İNDİRMEK ZORUNDASINIZ. ################################################# #####################

Adım 2: Kod Budur, KOPYALAMAYIN VE YAPIŞTIRMAYIN

Kod Bu, KOPYALAMAYIN VE YAPIŞTIRMAYIN
Kod Bu, KOPYALAMAYIN VE YAPIŞTIRMAYIN

################################################# #####################……….. NOT……..talimatların yaptığı bazı can sıkıcı otomatik düzenleme nedeniyle, bu sayfada görüldüğü gibi kod OLMAYACAKTIR İŞ, bunu kopyalayıp yapıştırmak yerine eklediğim DOSYAYI İNDİRMEK ZORUNDASINIZ.################################ #######################################//Bu leevonk tarafından c++ ile yazılmıştır// bu bir matlab mex dosyası için koddur//kod bir sayı değeri alacak ve iki sayı değeri çıkaracak//iki çıktı numarası giriş numarasından hesaplanır//kod ayrıca bir dize değeri çıkaracak//kod ayrıca "merhaba dünya"#include "mex.h"void mexFunction(int nlhs, mxArray *plhs, int nrhs, mxArray *prhs) {//############ yazdırın ############################//#######--"merhaba dünya" yazdır--### #########//##################################### ###mexPrintf("Merhaba dünya");//################################## #####//#########--#########//############### #########################/ * gelen değerleri tutacak bir dizi değişkeni tanımlayın */double* InValues;/* matlab'dan gönderilen değerleri alın */InValues = mxGetPr(prhs[0]);/* matlab'dan gönderilen bu değerleri kullanmak için InValues yapın [0], InValue[1], vb. kaç değer olduğuna göre. InValues aşağıda kullanılacaktır *///#################################### ##//########--Bir sayı dizisi döndür--########//################## #######################/* matlab'a gönderilecek diziyi bildirin (* onu bir dizi yapar) */double* OutValues;/ * Dönüş argümanı oluştur/ayır, 1x2 (1 satır 2 sütun) Dönüş dizisinin ilk yuvası için Matris (plhs[0]) */plhs[0]=mxCreateDoubleMatrix(1, 2, mxREAL); /* Dönüş argümanına işaretçi getir */OutValues = mxGetPr(plhs[0]); /* dönüş dizisinin ilk yuvasında bulunacak olan OutValues'a değerler atayın, burada OutValues'u hesaplamak için InValues'ları kullanıyoruz */OutValues[0] = InValues[0] + 1;OutValues[1] = InValues[0] + 2;//########################################// ###########--- Bir Dize Döndür--#############//################ #########################/* matlab'a gönderilecek dize değişkenini bildirir */char* str;/* string */str = "güle güle";/* dizeyi dönüş dizilerinin ikinci yuvasına koyun (plhs[1]) */plhs[1]=mxCreateString(str);//######### ##################################//###########--dönüş daha fazla şey--############//################################ ############/* daha fazla öğe döndürmek için yukarıdaki genel kuralları izleyin, ancak öğeleri diğer plhs yuvalarına koyun, plhs[bir sayı] */ }

Adım 3: Herhangi Bir Sebepten Derleme Yapmazsa

Herhangi Bir Sebepten Derleme Yapmazsa
Herhangi Bir Sebepten Derleme Yapmazsa

Herhangi bir nedenle derlenmiyorsa (olması gerekir, bilgisayarımda iyi çalışıyor) bu kaynakları görüyorsanız, onlar benim öğrendiğim yer. Küçük kusurları var (bazı eski, işlevsel olmayan dilbilgisi vb. kullanın) ancak ikisi arasında ileri geri giderseniz, çalışan bir şeyi bir araya getirebilmelisiniz.https://web.ccr.jussieu.fr/ccr/ Documentation/Calcul/matlab5v11/docs/00009/009a1.htmhttps://cnx.org/content/m12348/latest/

Önerilen: