Matlab etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Matlab etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

14 Mart 2011 Pazartesi

Matlab'da Kompleks Sayılar

Herkese Merhabalar,
  Şimdi diyeceksiniz ki ne gerek var böyle şeylere, ancak demeyin öyle! İlerleyen zamanlarda göreceğimiz teorileri anlayabilmek ve simule edebilmek için kompleks sayılar ve matrisleri kısaca hatırlayacağız. Bu yazımda kompleks sayılar ve Matlab da ilgili fonksiyonlar üzerinde duracağım. Matrisler ise bir sonraki konu...

   Hepimizin bildiği gibi matematikte i karakteri kök içinde -1 e eşittir. Ancak bu yazımda  i yerine daha çok j yi kullanacağım. Aslında bu j başka bir değerle çarpıldığında (vektörle çarpıldığında) saat yönünün tersinde 90 derece dönmesine sebep olur. Aşağıdaki şekil üzerinden anlamaya çalışalım. 



Şekilde görüldüğü gibi A vektörü x ekseninin pozitif kısmında bulunmaktadır. A vektörünü her j ile çarpışımızda saat yönünün tersinde 90 derece dönmektedir. Hatırlayacağınız gibi x eksenine reel kısım, y eksenine ise imajiner kısım diyoruz. Bu durumda eğer A=a+jb şeklinde bir vektörümüz olursa a=Re{A} ve b=Im{A} olacaktır. Kompleks sayılar üzerinde toplama ve çıkarma yaparken reel kısımlar ve imajiner kısımlar birbirleriyle toplanır veya çıkarılır, yani reel kısımlarla imajiner kısımlar arasında işlem yapılmaz. Aşağıdaki şekilde bu durum gösterilmiştir.

Kompleks sayılar çarpılırken ise dağılma özelliği esas alınır.

Bir kompleks sayının hatırlayacağınız üzere birde eşleniği bulunmaktadır.
a
+jb şeklinde bir kompleks sayının eşleniği
a-jb şeklindedir. Matlabda eşlenik almak için conj() fonksiyonunu kullanırız.
 Eşleniği alınan bir kompleks sayının reel kısmının yönü sabit kalıp, imajiner kısmı 180 derece ters döner. Kompleks sayılar için bölme işleminde ise paydada ki kompleks değerin eşleniği alınır ve hem pay hemde payda bu değer ile çarpılır. A=a+jb kompleks sayısını, B=c+jd sayısına bölme işlemi aşağıda ki gibidir.


Şimdi gelelim kompleks sayıların üstsel(eksponansiyel) ve polar formda gösterimlerine. Aşağıdaki şekilde ki gösterime hatırlayacağınız gibi Euler açılımı diyoruz. 

 Eğer bu kompleks sayıları C ile gösterdiğimiz bir sabitle çarparsak şu şekli alır;

Yukarıda ki eşitlik bir kompleks sayıyı temsil etsin ve bu sayıya a+jb diyelim. Bu durumda

 şeklinde olacaktır. Bu durumda a = Ccosθ ve b = Csinθ olacaktır. Reel ve imajiner kısımdaki sayıların karelerini alır ve toplarsak


bu kompleks sayının genliğini bulmuş oluruz. b yi a ya oranladığımızda ise  


kompleks sayımızın açısını elde ederiz. Sonuç olarak diktörtgensel formdan üstsel forma geçiş için;


üstsel formdan dikdörtgensel forma geçmek için;


eşitliklerini kullanırız. Polar formda gösterim biçimi ise;
şeklindedir. Ayrıca unutulmaması gereken bir nokta ise açıyı hesaplarken her zaman pozitif x eksenini referans olarak alırız. 
   
Şimdi bir örnekle bu öğrendiklerimizi Matlab da nasıl uygulayabiliriz onu anlamaya çalışalım. y=-1+j2 kompleks sayısını reel ve imajiner eksende ifade edersek aşağıdaki şekilde ki gibi bir sonuç elde ederiz.
Burada kök 5 değeri y vektörünün genlik değerini gösterirken 116.6 derece ise x ekseninin pozitif kısmı referans alınması durumunda açısını gösterir.  Matlab da bir komplek sayının genliğini bulmak için abs() açısını bulmak için angle() fonksiyonunu kullanırız. Burada unutulmaması gereken Matlab ın angle() fonksiyonu ile hesapladığı değer derece değil radyan cinsindendir. Dolayısıyla sonucu derece cinsinden görmek için angle(y)*180/pi şeklinde kullanmalıdır. Aşağıda Matlab örneği gösterilmiştir.

23 Şubat 2011 Çarşamba

Matlab'ta Faktöriyel Hesaplama Sınırı ...

% Matlab'da Faktöriyel Sorunu ...
% Matlab Faktöriyelleri 170! e kadar hesaplayabilir.
% 172! in değerini buldurmak için , Yeni bir algoritma geliştirelim .

% ÖRNEĞİN : C(n,r) = n!/ (n-r)!.r! olduğuna göre
% C(178 , 175) i hesaplamaya çalışalım.

% I. Yöntem   178!/175!.3! i hesaplatmak
% II. Yöntem  farklı bir algoritma yazmak.

clear all,close all,clc;
n=input('Bir sayi giriniz:');
sonuc=1;
if n==0
    sonuc=1;
elseif n<0
    disp('Negatif sayi girdiniz');
else
   for k=1:n
       sonuc=sonuc*k;  %/* 171! sonuç vermez */
   end
   format long;
   fprintf('%d' ,n);
  fprintf('Faktöriyelin Değeri %d \n',sonuc);
 
end
% Bunu fonksiyona çevirebiliriz
%function fac(x)=f(n);



 % Program / algoritma 2 
 % burada n ve r değerleri 171 den büyük seçilse de sonuç verir.
  cnr=1;
  n=178 ;
  r=175;
  for k=1:r;
      cnr=cnr*(n-k+1)/k;
  end
  cnr

  % Bazı Matlab komutları ls , cd , who , whos , sms - sembolik işlem
  % yaptırmak için

11 Ocak 2011 Salı

MATLAB ile fonksiyon yazma

Matlab'da fonksiyonlar ayrı bir dosyadan çağrılabileceği gibi , fonksiyonlar da m-dosyalarıdır. Farklı olarak bir fonksiyonun ilk satırı söyle olmalıdır:
function [sonuc1, sonuc2, ..., sonucm] = 

fonksiyonmbardak(arg1, arg2,...,argn)
Fonksiyonun adı dosya adı ile aynı olmalıdır. Örnegin "fonksiyonm"bardak fonksiyonu "fonksiyonmbardak.m" dosyasına koyulmalıdır. Örnek olarak fonksiyonmbardak.m ve digerfonksiyonum.m dosyalarına bakiniz.
Fonksiyonlar lokal ortamda çalıştırırlar. Yani ana calışma alanındaki aynı isimdeki bir değişkeni kaybetme riskiniz yoktur. Fonksiyonun sonucunda sadece sonuc olarak dönen deüişkenler, çağıran fonksiyonun çalışma alanında görülür.
Örnekleri yapmadan önce aşağıdaki fonksiyonları çalışma dizininize kaydedin.
fonksiyonmbardak.m:
2 girdi argumanı alan ve 2 değer döndüren örnek fonksiyon
function [y, z] = digerfonksiyonum(a, b)
y = a + b;
z = a - b;
Kullanımı :a = [1 2 3 4];
           b = fonksiyonmbardak(2 * a)
           a
 Görüldüğü üzere a değeri değişmedi. Şimdi de iki değişken döndüren örneğimizi çağıralım.
[c, d] = digerfonksiyonum(a, b)
c =

1 5 9 13

d =
1    -1    -3    -5

12.01.2011 //  03:19




Video Haber