2 Nisan 2013 Salı

C# - Matlab Bağlantısı

      Merhabalar, ilk yazımda sizlerle tezimde de kullandığım bir yöntemden bahsedeceğim.  Yaptığım araştırmalar sonucunda pek de net bir kaynak bulamadığım için elimden geldiğince açıklamaya çalışacağım. Matlab kodunu dll’e çevireceğiz ve bunu C# ile birlikte kullanacağız. Bu uygulamada Matlab R2008a ve Visual Studio 2010 kullandım.

      Öncelikle Matlab’da basit bir .m file oluşturalım ve ismi de ciz olsun. Şu kodları içine yazalım ve kaydedelim.
function ciz()

    t=-2:0.001:2;
    m=sin((2*pi).*t);
    plot(t,m);
    grid on;

end

Sonra Command Window penceresine deploytool yazalım ve enter'a basalım. Deployment Tool penceresi açılacaktır.


















Bu pencereden ilk menüden yeni bir proje yaratıyoruz.






















      Biz .Net’i seçiyoruz. İsmini ve nereye kaydedileceğini belirliyoruz. Sonra OK butonuna tıklıyoruz. Deployment penceremizde dosyamız oluştu. Projemize sağ tıklıyoruz Add File diyoruz ve kaydettiğimiz .m file dosyasını bulup ’a diyoruz.


















      Daha sonra da Deployment Tool penceresindeki Save butonuna tıklıyoruz. Bunları yaptıktan sonra yine aynı deployment tool penceresindeki setting butonuna tıklıyoruz.  Açılan pencereden General sekmesindeki Compiler Options File ayarına geliyoruz. Burada browser butonuna tıklayıp kaydettiğimiz .prj uzantılı dosyayı seçiyoruz. Ve arkasında Ok diyoruz penceremizi kapatıyoruz. Brada son olarak ise deployment tool penceresindeki build the project sekmesine tıklıyoruz ve projemizin dll dosyasını oluşturuyoruz. Bu işlem bilgisayarınıza bağlı olarak uzun sürebilir.

      Şimdi dll dosyamız hazır. Visual Studio’da bir tane form uygulaması açıyoruz ve bir tane buton bir tane de label ekliyoruz. Daha sonra References’a sağ tıklayıp Add Reference diyoruz. İlk olarak matlab’ı kurduğumuz dizindeki MWArray.dll dosyasını eklemeliyiz. Benim bilgisayarımdaki yolu:  
D:\Program Files\MATLAB\R2008a\toolbox\dotnetbuilder\bin\win32\v2.0
Sonra kendi oluşturduğumuz dll’i ekliyoruz. Deployment Tool’da oluşturduğumuz projeyi kaydettiğimiz yerde bir tane de klasör oluşmuştur. O klasörün içinde distrib adında oluşan klasörün içindeki dll dosyamızı seçiyoruz ve tamam deyip projemize ekliyoruz. Daha sonra using kısmına

using MathWorks.MATLAB.NET.Arrays;
using Untitled1;

diyerek eklediğimiz dll dosyalarını tanımlıyoruz. Butonun çift tıklayıp altına şu kodları yazıyoruz:

            Untitled1class obj = new Untitled1class();
            obj.ciz();

daha sonra projemizi çalıştırıp butona tıkladığımızda grafiğimiz açılacaktır.

















6 yorum:

  1. Merhaba;

    Bahsettiğiniz yöntemle bir fonksiyonu çevirerek kullanmak istiyorum fakat Visual Studio üzerinde kodu çağırdığım yerde "An unhandled exception of type 'System.TypeInitializationException' occurred in ..." şeklinde bir hata alıyorum. Birkaç yazı daha okudum ama tamamen aynı adımları uyguladığıma eminim. Aradaki tek fark benim Windows 8.1 ve MATLAB 2013a kullanıyor olmam. Sorun bundan kaynaklanıyor olabilir mi acaba? Eğer böyleyse bir çözüm öneriniz var mıdır?

    Teşekkürler

    YanıtlaSil
  2. Mert beyin aldığı hatayi ben de alıyorum yok mu bir çözüm benim de win 8.1 matlab da r2014a

    YanıtlaSil
  3. Merhaba;

    Mert Beyin aldığı hatanın çözümü;

    Visual Studio Projesinde Proje özelliklerinden "Derleme" seçeneklerinden Hedef platform "X86" olarak seçildiğinde hata ortadan kalkacaktır.

    İyi çalışmalar

    YanıtlaSil
  4. benimde windows 8.1 matlab2015 bende de aynı hata oluyo ve x86 yapmam düzeltmedi nasıl düzeltebilirim

    YanıtlaSil
  5. Merhaba. C#da yazılmış görüntü işleme projemin içine matlab in bir fonksiyonunu çekmem lazım. Ancak fonksiyonu çektiğimde program çalışırken matlabdaki işlenmiş şekli yukarıdaki gibi gözükmemesi lazım bu mümkün mü acaba ?

    YanıtlaSil
  6. Merhaba arkadaşlar,
    Hayatımdaki bazı gelişmelerden dolayı uzak kaldım blog'umdan.. Kusura bakmayın. O hatanın çözümü için matlab sürümlerini değiştirmeniz gerekiyor. Ben kodlarımı çalıştırabilmek için 2 3 farklı sürüm denedim zamanında. Şu anda o alanda çalışmadığım için pek bilgim yok. Ayrıca diğer konuya gelince PLOT komutunu silerseniz istediğiniz olur sanırım.

    YanıtlaSil

SQL Server Row_Number Komutu ve 2 Tablo Arasında Update İşlemi

Merhabalar, Bu notumda  ROW_NUMBER ()  komutundan bahsedeceğim ve daha sonrasında ise iki tablo arasında nasıl güncelleme yaparız ondan ba...