Ana Sayfa Programlar Matlab & Simulink Seri Programlama Teknikleri-2

Seri Programlama Teknikleri-2

578
0

Matlab programının çalışma sistemi vektör ve matris işlemleri için optimize edilmiştir.  Bu nedenle yazdığınız bir kodun vektörler ve matrislerden  oluşması işlemlerini hızlandıracaktır. Vektörler ile çalışmanın bize kazandırdıklarını 3 ana başlık halinde incelemek gerekirse ;

  1. Görüntü açısından vektörel olarak kodlama yapmak , kodun anlaşılabilirliği artırmaktadır. Daha derli toplu bir kodunuz olduğu için gerek siz gerekse ileride koda müdahale edecek biri kodu hızlıca anlayabilecektir.
  2. Eğer kodumuzu vektörel tabanlı oluşturursak , daha az döngü kullanacağız. Daha az döngünün kullanılması bize daha kısa bir kod ve daha az hatanın barındığı bir kod verecektir.
  3. Vektörize edilmiş bir kod döngü tabanlı olarak yazılmış bir koda göre kat kat daha hızlı çalışmaktadır.

Vektörize edilmiş bir koda örnek vermek gerekirse;

Aşağıdaki kodta bir döngü içerisinde t’nin 1001 değeri için sin(t) değeri hesaplanmaktadır.

i = 0;
for t = 0:.01:10
    i = i + 1;
    y(i) = sin(t);
end
Elapsed time is 0.002866 seconds.

Fakat bu kodu aynı sonucu verecek şekilde , aşağıdaki gibi yazmak mümkün.dür

t = 0:.01:10;
y = sin(t);
Elapsed time is 0.000057 seconds.

Görüldiğü üzere ikinici kod birinciye göre daha kısa ve Matlab’ın ilgili kısımı derleyip koşturması daha hızlı yapılmaktadır.

Aşağıdaki kodta ise yine bir döngü içerinde her 5. elemen toplanmaktadır.

x = 1:100000;
ylength = (length(x) - mod(length(x),5))/5;
y(1:ylength) = 0;
for n= 5:5:length(x)
    y(n/5) = sum(x(1:n));
end
Elapsed time is 2.953290 seconds.

Vektörilizasyon kullanılarak  işlemlerin en kadar hızlandığını  işlem sürelerine bakarak görebilirsiniz.

x = 1:100000;
xsums = cumsum(x);
y = xsums(5:5:length(x));
Elapsed time is 0.000573 seconds.

Dizi işlemleri

Aşağıdaki hacim formülasyonu ile 10000 adet çap ve yükseklik için hacim hesabı yapalım.

V = 1/12*pi*(D^2)*H;

Bu yazıyı okumadan önce muhtemelen yazacağınız kod aşağıdaki gibi olacaktır. Bir for döngüsü içerisinde tüm D ve H parametreleri le hacim hesabını yapacaktınız.

for n = 10000
   V(n) = 1/12*pi*(D(n)^2)*H(n);
end
Elapsed time is 0.000824 seconds.

Fakat bu yazıyı okuduktan sonra aşağıdaki gibi bir vektörizasyon işlemi ile , bu kodu aşağıdaki gibi yazabiliriz.

%Vectorized Calculation
V = 1/12*pi*(D.^2).*H;
Elapsed time is 0.000039 seconds
Not:   Dizi işlemlerinde */, ve ^, operatörlerinden önce ‘.’ koymanız onları bir dizi işlem operatörüne döndürecektir

İşi özetlemek gerekirse , kodlarımızdaki döngüsel işlemleri vektörlere dönüştürüp yazmamız yukarıda belirtilen birçok faydayı bize kazandıracaktır. Bir sonraki yazımda çok çekirdekli bir kod nasıl çalıştırılır bu konudan bahsetmeye çalışacağım.

iyi çalışmalar.

0 0 vote
Article Rating
Subscribe
Bildir
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

0 Yorum
Inline Feedbacks
View all comments