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

25 Ekim 2010 Pazartesi

Matlab'da Cell Array(Hücre Dizileri)

              
               Cell Array'in türkçesi "Hücre Dizisi"  demektir.Dizi oluştururken dizinin içine aynı tipten veriler atardık.Cell Arraylerde alışılmışın dışında tek tip veri yazmak zorunda değiliz, birbirinden farklı veri tiplerini içeren bir dizi oluşturabilme imkanı sağlar.Kullanımı şu şekildedir:

ca={4,[1 2 3;4 5 6],'derya','c'}  %   gördüğünüz gibi oluşturduğum dizide integer,matrix,string veri tiplerini bir arada kullandım.

matlab ekranına yukarda yazdığım kodu yazarsanız şöyle bir çıktı alırsınız:

ca =

    [4]    [2x3 double]    'derya'    'c'

Diğer dizilerde olduğu gibi cell arraylerde istediğiniz elemana ulaşabilmeniz mümkündür,şu şekilde ulaşabilirsiniz:      

ca{2}

Şöyle bir çıktısı olacaktır:

ans =

     1     2     3
     4     5     6

Eleman olan matrixin tek elemanına da ulşamak mümkündür:
ca{2}(2,2)         

ans =

     5


Hatta cell arraye eleman olarak başka bir cell array yazmak da mümkündür:

bigca={ 2,'derya',ca,[1 2 3;3 4 5] }

bigca'den ca deki  elemanlara da ulaşabilmek mümkündür,ca deki matrixdeki herhangi bir elemana ulaşmak istersek:

bigca{3}{2}(2,2)


ans =

     5

Bir de "cellplot"  denen bir konut vardır bu da dizinizin şekilsel gösterimini verir,bizim oluşturduğumuz ca ve bigca in nasıl gözüktüğüne bir bakalım:

cellplot(ca)


cellplot(bigca)


"Num2cell"  adındaki komut da normal olarak yazılmış ifadeleri(matrix ya da integer tipinde veriler olabilir) cell arraylere çevirir,kullanımı şu şekildedir:


num2cell([1 2 3;4 5 6])

ans =

    [1]    [2]    [3]
    [4]    [5]    [6]

Cell array oluşmuş oldu.




DERYA GÜNDÜZ

19 Ekim 2010 Salı

Matlab'da Fonksiyonlar

        
         Matlab'da kendimizin oluşturduğu fonksiyonları bir m-file'a kaydedip o şekilde kullanmak çoğu açıdan daha fonksiyoneldir.Bu m-file'ı oluşturuken dikkat edilmesi gereken birkaç önemli nokta var,bunları maddeleyerek anlatmak istiyorum:

  • m-file'ı fonksiyona verdiğiniz ismi ile kaydetmelisiniz,örneğin fonksiyonun ismi "f" is "f.m"  şeklinde kaydetmelisiniz,
  • kod yazmaya "function" ile başlamalısınız, örneğin;
               function y=f(x)
                    y=x+3
  • m-file içinde tanımladığınız tipler oranın içinde geçerlidir yani localdir,başka yerden ulaşmazsınız,
  • kaç tane input ve output kullanmak istediğinizi siz belirlersiniz,
     function [x,y]=fon(a,b,c)                  %    burda fon fonksiyonu için 2 output ve 3 input vardır
       x=a+b+c
       y=30-x 
command window'da fonksiyonu kullanırken de(birden fazla input ve outputu olanlar için)
            x=fon(1,2,3)             %  x=6
           ya da
           [x,y]=fon(1,2,3)      % x=6 ve y=-24 sonucunu alırsınız

  • kendi oluşturduğunuz fonksiyonda yazdığınız yorum satırlarını "help fon" dediğinizde görüntüleyebilirsiniz,fonksiyonunuzu daha da fonksiyonel hale getirmiş olursunuz,fakat burda yazdığınız ilk blok help dediğiniz kısımda görünür,



  • nargin(number of input arguments) fonksiyonda kaç tane input kullanıldığını geri döner,çeşitli kontroller de yapılabilir.
        function x=fon(a,b,c)
             if nargin==3
                   x=a+b+c
         else
             disp('yazılan argumenler yetersiz')
        end
        gibi bir örnek verilebilir.

  • nargout(number of output arguments),kaç tane output kullanıldığı bilgisini geri döner,
  • kullanılacak olan input ve output sayısını  varargout,varargin kullanarak tam  olarak belirtmesek de olur,
      function varargout=fon(varargin)                %şeklinde tanımlama yapılır ve isteğe göre kontroller yapılabilir


DERYA GÜNDÜZ

5 Ekim 2010 Salı

Matlab'da overlapping olayı

   Matlab'da çizim yaparken,aynı grafik üstünde birden fazla fonksiyonu çizmek zorunda olduğumuz zamanlarda  verilen x ve çıkan y değerlerine göre grafikteki  görüntüsünde zaman zaman istenmeyen durumlar ortaya çıkabiliyor,örneğin bekleneden daha farklı bir grafik çıkabiliyor karşımıza.Bunun nedeni overlapping olabilir,yani grafiklerin üstüste binmesi  ve  de net görüntülenememesi olayı:Bunu bir örnekle anlatmak daha açıklayıcı olacak sanıyorum,


X=[0 ,2π]
Y1=ex
Y2=e2x

veriliyor ve bu iki fonksiyonu aynı grafik üzerinde çizmemiz isteniyor.
ilk yazacağımız  matlab kodu şöyle olacaktır:

X=0:0.1:2*pi
Y1=exp(X)
Y2=exp(2*X)
plot(X,Y1,'g+',X,Y2)

bu koddan da çıkacak şekli şöyle olacaktır:

   
        Gördüğünüz gibi iki grafiği net görüntüleyemedik,işte bu overlapping dediğim olaydır,yani iki grafik üst üste biniyor ve ben ikisini net olarak göremiyorum.
peki neden overlapping oldu?

cevap,x değerlerinin aynı olması.X değerleri aynı veya yakın olduğu zaman iki grafik net olarak görüntülenemez.

Bunu engellemenin yolu da axis komutunu kullanmaktır.Axis komutu grafik üzerinde ölçeklendirme yapar(bir bölgeyi zoomlamış gibi oluyor şuanki durumda).
Kullanımı:axis([xmin xmax ymin ymax])

xmin=0
xmax=2π
ymax=0        çıkan matrixlerden görülebileceği üzre
ymin=492     çıkan matrix değerlerinden en büyüğü yazılır

kodun son hali:

X=0:0.1:2*pi
Y1=exp(X)
Y2=exp(2*X)
plot(X,Y1,'g+',X,Y2,'bo')
axis([0 2*pi 0 492])

olmuş oldu,çıkan şekil şöyle olacaktır:



DERYA GÜNDÜZ

10 Ocak 2010 Pazar

shooting problem

%ikinci dereceden türevi verilen denklemleri çözerken iki tane birinci

%türeve parçalayarak çözülür burda z brinci dereceden türev t ikinci dereceden türev olmak üzre t(1) ve t(başka değer) veriliyor
%amaç verilen t degerlerinden yola çıkarak z(1) degerini bulmak
%f fonksiyon   dosyasını f.m olarak açmayı unutmayın!!!

disp('baslangıc degerlerini giriniz:t(x)=p ve t(k)=l formatında olmalı' );

x=input('x:');

p=input('p:');

k=input('k:');

l=input('l:');

h=input('h:');

n=(k-x)/h;

t(1)=p;

buyukdeger=0;

kucukdeger=0;

a=0;

b=0;

z(1)=input('z için tahmini degeri girniz:');

while(1)



for i=1:n

t(i+1)=t(i)+z(i)*h;

z(i+1)=z(i)+(f(t(i)))*h%/verilen tahmini degrden yola çıkılarak yapılır

end

if(a==1 && b==1)% bir buyuk bir kucuk deger bulmuşsa yetr demek

break;

end

if(t(n+1)>l)

buyukdeger=t(n+1)

zbuyuk=z(1)

if(b==0)%kucuk deger bulmamışsan git kucuk degr bul

disp('daha kucuk bir z tahmini degeri girniz:')

z(1)=input('z(1):');

end

a=1;%kucuk deger buldugunu kanıtlamak için

else

kucukdeger=t(n+1)

zkucuk=z(1)

if(a==0)%buyuk degr bulmamışsan git buyuk deger bul

disp('daha buyuk bir z(1) degeri girniz');

z(1)=input('z(1):');

end

b=1;%kucuk degr bulduğunu kanıtlamak için

end

end

z(1)=zkucuk+((zbuyuk-zkucuk)/(buyukdeger-kucukdeger))*(l-kucukdeger);

fprintf('znin gercek degeri=%f',z(1));
  f FONKSİYONU
%ikinci türevin denklemi


function y=f(t);

y=0.01*t-0.2;
OUTPUT
baslangıc degerlerini giriniz:t(x)=p ve t(k)=l formatında olmalı


x:0

p:40

k:10

l:200

h:2

z için tahmini degeri girniz:17
buyukdeger =231.8144
zbuyuk =
17
daha kucuk bir z tahmini degeri girniz:
z(1):16
buyukdeger =
221.0112
zbuyuk =16
daha kucuk bir z tahmini degeri girniz:
z(1):12
kucukdeger =177.7984
zkucuk =12

znin gercek degeri=14.055095

solving systems of ODEs...(ikinci dereceden türevi olan sistemleri çözmek)

%ikinci dereceden türevi verilen denklemleri çözmek için o ikinci dereceyi

%iki tane birinci dereceye parçalayarak çözeriz y dediğim birinci
%dereceden türev,z ikinci dereceden türev değri
%f dosyasını açmayı unutmayın
disp('baslangıc degerlerni griniz:');

y(1)=input('y(1):');

z(1)=input('z(1)');

h=input('h:');

a=input('üst sınır degri:');

b=input('alt sınır degeri');

n=(b-a)/h;

x=a:h:b;

for i=1:n

y(i+1)=y(i)+z(i)*h;

z(i+1)=z(i)+f(x(i),y(i))*h;

end

fprintf('ikinci türev degeri=%f',z(n+1));

f FONKSİYONU

function y=f(x,t);

y=x-t;

OUTPUT
baslangıc degerlerni griniz:


y(1):2

z(1)0

h:0.1

üst sınır degri:0

alt sınır degeri5

ikinci türev degeri=3.127871>>

9 Ocak 2010 Cumartesi

integral bulmada sympson 1/3 kuralı ile sympson 3/8 kuralının beraber uygulanması

daha önce sympson 1/3 kuralını vermiştim bu kez sympson 1/3 ile 3/8 in beraber kullanılmasını  ekledim.çünkü hatırlarsanız 1/3 sadece aralık sayısı  çift olanlar için kullanılıyordu,tek olanlar için ise aşağıdaki kod geçerli olur. %kodu eklerken f fonksiyon dosyasını da eklemeyi unutmayın!!!!!
a=input('alt sını değerini girinz:');

b=input('üst sınır degerini giriniz:');

n=input('segment sayısını ggirniz:');

h=(b-a)/n;

if rem(n,2)==0

k=0;%0a atamayınca hata veriyor

p=0;

x=a:h:b;

for i=2:n %verilen n değeri çift olduğu için sympson 1/3 kuralı uygulanır

if rem(i,2)==0 %indisi çift olanlar(xin indisi 1den başladığı için kitaba göre ters oluyor)

k=k+4*f(x(i));

else %indisi tek olanalr

p=p+2*f(x(i));
end

end

I=(f(a)+f(b)+k+p)*(h/3)

syms x;

trueval=int(sin(x),a,b)

Et=trueval-I

Ea=-((((b-a)^5)/(180*n^4))*(int(sin(x),a,b)/(b-a)))

else %aralık sayısı tek ise sympson 1/3 ile 3/8 beraber kullanılır

if(n==3)%aralık 3 ise sadece sympson 3/8 uygulanır

x=a:h:b;

sum=f(x(1))+3*f(x(2))+3*f(x(3))+f(b);

I=((b-a)/8)*sum

else%aralık tek fakat 3den düyükse ilk 4 nokta için sympson 3/8 geriye kalan noktalara da sympson 1/3 uygulanır

x=a:h:b;

sum1=f(a)+f(4);

sum1=sum1+3*(f(2)+f(3));

I=(b-a)*(sum1/8)%sympson 3/8in uygulandığı kısım

sum2=f(4)+f(b);%geriye kalan noktalara sympson 1/3 uygulanır

for i=6:n

if rem(i,2)==0 %indisi çift olanlar(xin indisi 1den başladığı için kitaba göre ters oluyor)

k=k+4*f(x(i));

else %indisi tek olanalr

p=p+2*f(x(i));
end

end

sum2=sum2+k+p;

T=((b-a)/(3*n))*sum2

integral=I+T%en sonda bulunan iki integral değeri toplanır

end

end
f foNKSİYONU f.m dosyası
function y=f(x);

y=sin(x);

4 Ocak 2010 Pazartesi

sympson 1/3 yöntemi ile integral hesaplama

%sympson 1/3 kuralına göre integral heasaplama 
%sympson 1/3 kuralı n nin tek olduğu durumlarda çalışır
%f fonkisyounun kodunu ayrı bir m-file da açmak gerek


a=input('alt sını değerini girinz:');

b=input('üst sınır degerini giriniz:');

n=input('segment sayısını ggirniz:');//aralık sayısı

h=(b-a)/n;

if rem(n,2)==0;//mod görevi görüyor

else

disp('verilen n degeri gecersiz' )

n=input('yeni n degeri');

end



k=0;%0a atamayınca hata veriyor

p=0;



x=a:h:b;

for i=2:n

if rem(i,2)==0 %indisi çift olanlar(xin indisi 1den başladığı için)

k=k+4*f(x(i));

else %indisi tek olanalr

p=p+2*f(x(i));

end

end

I=(f(a)+f(b)+k+p)*(h/3)

syms x;

trueval=int(sin(x),a,b)

Et=trueval-I

Ea=-((((b-a)^5)/(180*n^4))*(int(sin(x),a,b)/(b-a)))
F FONKSİYONU
function y=f(x);
y=sin(x);
OUTPUT
alt sını değerini girinz:0

üst sınır degerini giriniz:pi
segment sayısını ggirniz:4
I =2.0046
trueval =2
Et =
-10267655424369/2251799813685248
Ea =
-7656611879816833/(576460752303423488*pi)

30 Aralık 2009 Çarşamba

matlab kodu(ordinary differential equations/eulers metod)

numeric metods dersinde differansiyel denklemi verilen eğrinin farklı x değerlerine karşın y değerlerinin bulunması için kulllanılan EULER YÖNTEMİ


a=input('alt sınır:');


b=input('üst sınır');
p=input('baslangıc degeri::');

h=input('h:');//aralık

y=[];

y(1)=p;

n=(b-a)/h;
     
for i=1:n

y(i+1)=y(i)+fon(a,y(i))*h

a=a+h;

end

çağırılan fon fonksiyonu

      function y=fon(x,y);
        y=y*(x^2)-1.2*y;

                ayrı bir mfile dosyasına yazılır
         OUTPUT
alt sınır:0


üst sınır2

baslangıc degeri::1

h:0.5
y =

1.0000 0.4000 0.2100 0.1890 0.2882

25 Kasım 2009 Çarşamba

yaklaşık 4 saatir uğraştığım matlab kodu yrn ödevi öldüm bittim:(

disp('to use exponential form enter 0')


disp('to use power equation enter 1')

disp('to use saturation method enter 2')

deger=input('cozum metodu');

switch deger

case 0

n=input('vektörler kac elemanlı olsun');

a=input('ilk vektörü giriniz:');

b=input('ikinci vektörü giriniz:');

x=a;

y=log(b);



a1=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.^2)-sum(x)^2);

a0=mean(y)-a1*mean(x);

B1=a1

A1=exp(a0)

y=A1*(exp(B1)*a)%farklı bişeyler çıkıyor biyerlerde bi yanlışlık var?

case 1

n=input('vektörler kac elemanlı olsun');

a=input('ilk vektörü giriniz:');

b=input('ikinci vektörü giriniz:');

x=log10(a);

y=log10(b);

a1=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.^2)-sum(x)^2)

a0=mean(y)-a1*mean(x)

A2=10^(a0)

B2=a1

y=A2*(a^B2)%hata veriyor?

case 2



n=input('vektörler kac elemanlı olsun');

a=input('ilk vektörü giriniz:');

b=input('ikinci vektörü giriniz:');

x=1./a;

y=1./b;

a1=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.^2)-sum(x)^2)

a0=mean(y)-a1*mean(x)

A3=1/a0

B3=a1*A3

b=A3*a/(B3+a)

end
 
Facebook

Bizi takip edin!

ESOGÜ Bilişim GünleriESOGÜ Bilişim Günleri