MATLAB de Bilgisayar Programlama Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK
ALT PROGRAMLAR:M-Fonksiyon Yapısı function cikis_ifadesi1, 2,, n =fonksiyon_adi (giris_ifadesi1, 2, n) M-Fonksiyonlar kullanılırken dikkat edilecek hususlar: 1- Kullanıcılar kendi fonksiyonlarını yazmak için m-fonksiyonlarını kullanabilirler. 2- Function alt programı ve ana program şeklinde iki program yazılarak bu iki program ayrı ayrı kaydedilir. 3- Alt programdaki fonksiyon_adi, m-dosyasına verilen isimle aynı olmalıdır. 4- Ana programdan alt program, function adı kullanılarak l k çağrılır. ğ 5- Alt programdan da ana programa geçiş yapılabilir fakat genelde tercih edileni tersidir. 6- Parametre aktarımı olması durumunda alt ve ana programda eşit sayıda parametre ve giriş değişkeni olmalıdır.
function cikis_ifadesi1, 2,, n =fonksiyon_adi (giris_ifadesi1, 2, n) Örnek: İki nokta arasındaki uzaklığı bulan programı m-fonksiyon (alt program) kullanarak yazınız. ax = a noktasının apsisi; bx = b noktasının apsisi ay = a noktasının oordinati; by = b noktasının oordinati FUNCTION ALT PROGRAMI (uzak.m): function uzaklik = uzak(x1,y1,x2,y2) uzaklik=sqrt((x2-x1)^2+(y2-y1)^2); Bu function alt programı uzak.m olarak kaydedilir. ANA PROGRAM (mesafe.m): m): ax=3; ay=4; bx=1; by=2; uzaklik = uzak(ax,ay,bx,by); % uzak.m alt programını çağırıyor. fprintf( iki nokta arasındaki uzaklık = %6.2f birim.\n,uzaklik);
Adım adım gerçekleştirilen ş işlemler: ş Ana program herhangi bir isimle kaydedilir ve koşturulur. Program, function adına (uzak) geldiği zaman alt program çağrılır ve ax, ay, bx, by parametreleri sırasıyla x1, y1, x2, y2 giriş değişkenlerine aktarılır. Function alt programında hesaplama gerçekleştirilir. ş Function daki çıkış değişkeni olan uzaklik hem alt programda hem de ana programda hesaplanan sonuç değerinin aktarıldığı değişkendir. Alt programdan ana programa parametre aktarımı zorunlu değildir. İstenirse değişkenlerin değerleri alt programda da girilebilir ve sonuç alt programda yazdırılabilir.
Uygulama: Yukarıdaki örneği ğ ana programdan alt programa parametre aktarımı yapmadan yeniden yazınız. (Değişkenlerin girilmesi, sonucu hesaplama ve yazdırma işlemi alt programda yapılacaktır) FUNCTION ALT PROGRAMI: function uzaklik = uzak x1=3; y1=4; x2=1; y2=2; uzaklik=sqrt((x2-x1)^2+(y2-y1)^2); fprintf( iki nokta arasindaki uzaklık=%6.2f birim.\n, uzaklik); ANA PROGRAM: uzak; % uzak.m alt programını çağırıyorğ
Örnek: Verilen bir dizinin ortalamasını ve standart sapmasını hesaplayan stat isimli bir function yazınız. Alt program (function): function [ort, stdsap] = stat(x) n = length(x); ort= sum(x) / n; stdsap = sqrt(sum((x - ort).^2)/n); Ana program: Çıktı: clear all; clc; Ortalama= 4.50 ve Std. Sapma= 2.87 dir. x=[0 1 2 3 4 5 6 7 8 9]; [a,b]=stat(x); fprintf('ortalama= %5.2f ve Std. Sapma= %5.2f dir.\n',a,b);
ÖDEV: Dışarıdan girilen x ve y değerlerine göre aşağıdaki fonksiyonun değerini hesaplayan bir program yazınız (M-fonksiyonu kullanınız). F(x,y) = x 2 y + xy x.y + ln( x ) + 1 log ( y) 10 + x tan( ) y function f=fxy(x,y) f=x^2*y+sqrt(x*y)+(log(x)+1)/log10(y)+tan(x/y); clear all; clc; x=1;y=1; fxy=fxy(x,y); fprintf('fonksiyonun f('f i değeri ğ = %f\n',fxy); 'f
DOSYA YÖNETİMİ Şu ana kadar bir programda hesaplanan veya elde edilen veriler RAM de saklanacak şekilde tanımlanmıştı. Yani, bilgisayar kapatıldığında veya MATLAB programı sona erdirildiğinde veriler de kaybolmaktaydı. Oysa pek çok uygulamada elde edilen veriler daha sonra kullanılmak üzere saklanması gerekir. Bunun için verilerin bir dosyaya yazılması gerekmektedir.
MATLAB de VERİ İ GİRİŞ-ÇIKIŞ İ İ FONKSİYONLARIİ Dosya açma: fopen fopen komutu bilgi kaydetmek için veri dosyası açar veya oluşturur. Yazım formatı: ifade = fopen( dosya adı, izin ) Burada: ifade-> dosya belirteci dosya adı->verilerin kaydedileceği dosyanın adı izin-> dosyanın kullanım izni:r r,w,.., vs.
İzin Tipleri: Tipler r r+ Açıklama Dosyayı sadece okumaya açar (yazmaya izin vermez) Dosyayı yazmaya ve okumaya açar (dosya oluşturulmaz) w Varolan bir veri dosyasının içindekini siler, dosya yoksa oluşturur ve dosyayı yazmaya açar w+ Varolan bir veri dosyasını yazmak kiçin i açar, dosya yoksa oluşturur ve dosyayı okumaya ve yazmaya açar a a+ Varolan bir veri dosyasını yazmak için açar, dosya yoksa oluşturur ve girilecek bilgileri dosya sonuna ekler (okuma yok) Varolan bir veri dosyasını okumak ve yazmak için açar, dosya yoksa oluşturur ve girilecek bilgileri dosya sonuna ekler
Dosya kapama: fclose Dosya yazma ve/veya okumaya açılan dosyanın MATLAB den ilişkisini kesmeye (dosyayı kapatmaya) yarayan komuttur. Kullanımı: fclose(ifade)
Dosyaya bilgilerin kaydedilmesi: fprintf Verilerin ekrana yazılmasında kullanılan fprintf fonksiyonu, aynı zamanda fopen komutuyla açılmış dosyaya yazmakta da kullanılır. Kullanımı: fprintf (ifade, %format%format%format.%format,değişken1, değişken2,değişken3,.)
Örnek Aşağıda ğ verilen M dizisini i i i( (vektörünü) ü) bir dosyaya kaydeden d bir MATLAB programı yazınız For döngüsü ile: M=[1 2 3 4]; M=[1 2 3 4]; a=fopen('veri.dat','w'); fprintf (a,%d (a,'%d %d %d %d',m); fclose(a); a=fopen('veri.dat','w'); for i=1:4 fprintf(a,'%d\n ',M(i)); end fclose(a);
Örnek Aşağıda verilen matrisi veri.dat dosyasına kaydeden bir MATLAB programı yazınız. A=[1 5-11;-2 4 5]; a=fopen('veri.dat','w+'); for i=1:2 for j=1:3 end fprintf(a, '%3d',A(i,j)); fprintf(a, \n ); end fclose(a); veri.dat isimli dosyayı silmeden A dizisini bu dosyanın sonuna eklemek için hangi izin kulanılmalıdır?
Dosyadan an bilgilerin okunması: fscanf fscanf: Formatlanmış verileri içeren dosyadan değerleri okuma komutudur ve yazılımı: [değişken, sayi] = fscanf (ifade, format,alan) Burada; değişken: okunan değerlerin atandığı değişken sayi : okunan data sayısı alan : inf ile verilerin tamamını okunması sağlanır Örnek Aşağıda verilen vektörü bir dosyadan okuyup b değişkenine atayan MATLAB programı veri.dat 1 5 11 2 4 5 clear all; clc; a=fopen ('veri.dat', 'r' ); [b,sayi]=fscanf(a,'%d ',inf); fclose(a); b sayi
Dosyadan birden fazla değişkene bilgi okunması Yanda verilen formattaki bir dosyadan bilgilerin aynı formatta okunması için: b=fscanf(a, %d,[2 inf]); b aşağıda verilen matris formatına sahip olur: 1 3 4 5 6 7 10 12 14 15 16 18 Veri.dat 1 10 3 12 4 14 5 15 6 16 7 18 Satır vektörlerini farklı değişkenlere atamak için: c=b(1,:) d=b(2,:) Dosyadan bilgilerin direkt olarak farklı değişkenlere okutmak için a=fopen('veri veri.dat dat', 'r') r) for i=1:6 d(i)=fscanf(a,'%f',[1]); d=fscanf(a,'%f',[1,3]); e(i)=fscanf(a,'%f',[1]); e=fscanf(a,'%f',[1,3]); f( f( end fclose(a); cose(a)
Uygulama Bir data dosyasında verilen sayıları kullanarak aşağıdaki fonksiyonun değerini alt fonksiyonda hesaplayıp sonucu ana programda yazdıran bir MATLAB programı yazınız. F(x,y) = x 2 y+ x.y + ln( x ) + 1 log 10 ( y ) 10 x y 1 10 3 13 5 15 8 16 9 18
ÖDEV: Dışarıdan girilen 5 adet öğrencinin numarasını ve 2 dersten aldığı notları kaydeden ve okuyan MATLAB programlarını yazınız.