Fen ve Mühislik Uygulamaları ile MATLAB Doç. Dr. M. Akif CEVİZ Atatürk Üniversitesi Mühislik Fakültesi Makine Mühisliği Bölümü
Kullanıcı tanımlı fonksiyonlar Matlab da hazır tanımlı çok sayıda fonksison mevcuttur; sin, sqrt, sum. Şayet çeşitli Matlab komutlarını sıklıkla kullanıyorsanız, bu komutları bir fonksiyon haline getirebilirsiniz. Bu fonksiyonlar Matlab da tanımlı fonksiyonlar gibi çalıştırılabilir.
Kullanıcı tanımlı fonksiyonlar Yazım metodu function [out1, out2,...] = funname(in1, in2,...) Funname isimli bir bir fonksiyon oluşturur, in1, in2, giriş ifadelerini alır ve out1, out2, çıkış ifadelerini üretir. Kullanıcı tanımlı fonksiyon üretmek için: 1- İlk satır aşağıdaki gibi olmalıdır: function [output variables] = function_name(input variables); 2- m-dosyası nın adı, «function_name» ile aynı olmak zorundadır; 3- kullanıcı tanımlı fonksiyonlar, m-dosyasının adıyla çağrılırlar.
Örnek 1 Serbest düşen bir cismin son hızını hesaplayan fonksiyon yazınız Fonksiyon Dosyası (sonhiz.m) (altprogram) function v= sonhiz(g,h) v=sqrt(2*g*h); m_file (An aprogram) clc clear all g=9.81; h=10; v=sonhiz(g,h)
Örnek 2 Bir dairenin alan ve çevresini hesaplayan fonksiyon yazınız. Fonksiyon Dosyası (Dosya adı: circle.m) (Alt program) function [area,perimeter]=circle(r) area=pi*r^2; perimeter=2*pi*r; m_dosyası (Ana program) clc clear all R=1; [area,perimeter]=circle(r)
Örnek 3 İki nokta arası mesafeyi hesaplayan bir fonksiyon yazınız x1= birinci noktanın x koordinatı; x2= ikincinoktanın x koordinatı y1= birinci noktanın y koordinatı; y2= ikinci noktanın y koordinatı Fonksiyon dosyası (uzak.m) (Alt program) fundistance=sqrt((x2-x1).^2+(y2-y1).^2); ction distance= dis(x1,y1,x2,y2) M_dosyası (Ana Program) clc clear all x1=3; y1=4; x2=1; y2=2; distance= dis(x1,y1,x2,y2); fprintf('distance between two points=%g\n',distance);
Örnek 4 Aşağıdaki denklemi dışarıdan girilen x ve y değerlerine göre çözen bir fonksiyon yazınız. F(x,y)=x 2 y+x.y+ ln(x)+1 log 10 (y) +tan(x y )
Örnek 5 x in 0.1 er artımla 3 den 13 e kadar değerleri için aşağıdaki denklemi çözen ve x-y grafiğini çizen bir fonksiyon yazınız. Aşağıdaki değişkenler ana programda tanıtılmalıdır; a=5, b=6, and c=8
Çözüm 5 Ana m-file (Dosya adı: soru.m ) clc clear all x=3:0.1:13 a=5;b=6;c=8; y=deneme(a,b,c,x); plot(x,y) Function File (Dosya Adı: deneme.m) function y=deneme(a,b,c,x); y=a+(b*x.^2)/2+(c*exp(x)+2)/3;
Giriş Çıkış İfadeleri Programcılıkta ilerledikçe verilerinizi bilgisayara kaydetme ihtiyacı duyacaksınız. Matlab ve disk dosyaları arsında verilerinizin transfer edilmesi işlemleri; veri alma (diskten) ve veri gönderme (diske) isimleri ile adlandırılır. Veri miktarının fazla olduğu durumlarda, tamamının klavyeden girilmesi ve aynı veri ile tekrar tekrar uğraşmak zorlaşacaktır. Bu durumda dosyalar arasında veri alma veya gönderme işlemleri yapılır. Matlab a veri alma (diskten) ve Matlab dan veri gönderme (diske) işlemleri yapılabilir.
Dosya açma: fopen fopen, dosya açar veya açık dosya hakkında bilgi verir. Syntax ifade= fopen( dosya_adı, izin ) Bu satırile dosya_adı isimli tanımlanan izin ile açılır ve ifade ile tanımlanan dosya tanımlayıcıya eşitlenir. ifade-> dosya tanımlayıcı dosy_adı -> dosya ismi izin -> r,w,.., v.s.
Dosy Açma: fopen 'r' 'w' 'a' 'r+' 'w+' 'a+' Okuma için dosya açar (default). Yazma için yeni dosya açar veya oluşturur. Varsa mevcut verileri siler. Yazma için yeni dosya açar veya oluşturur. Mevcut verilere ilave eder. Okuma ve yazma için dosya açar. Okuma ve yazma için yeni dosya açar veya oluşturur. Varsa mevcut verileri siler. Okoma ve yazma için yeni dosya açar veya oluşturur. Mevcut verilere ilave eder.
Dosya Kapatma: fclose fclose bir dosyayı veya tüm açık dosyaları kapatır. Syntax durum = fclose(ifade); ifade-> dosya tanımlayıcı durum-> başarılı ise 0; değilse -1.
Verileri dosyaya yazma: fprintf Formatlı verileri dosyaya yazma Syntax: fprintf(ifade,format,a,...) fprintf (ifade, %format%format%format.,var_1,var_2,var_3,.)
Örnek 7 Aşağıdaki M vektörünü veri.dat isimli dosyaya yazan program yazınız. for döngüsü ile M=[1 2 3 4]; a=fopen('veri.dat','w'); fprintf (a,'%d %d %d %d',m); fclose(a); M=[1 2 3 4]; a=fopen('veri.dat','w'); for i=1:4 fprintf(a,'%d ',M(i)); fclose(a);
Örnek 8 Aşağıdaki M matrisini veri.dat isimli dosyaya yazan program yazınız. A=[1 5 11 ; 2 4 5]; a=fopen('veri.dat','w+'); for i=1:2 for j=1:3 fprintf(a,'%d ',A(i,j)); fclose(a); Atatürk University
Dosyadan veri okuma: fscanf fscanf: fscanf dosyadan formatlı verileri okumak için kullanılır. Syntax [deger, okunan_rakamların_sayısı] = fscanf(dosya_degiskeni, 'format', sayi); [value, number_of_values_read] = fscanf(file_variable, 'format', count); deger okunan_rakamların_sayısı sayi : alınan bilgi : Alınan rakamların sayısı : Okunması istenen rakam sayısı: n, [n, m], Inf
Örnek 9 Veri.dat isimli dosyadan tüm verileri alan ve b isimli dosyaya atayan program yazınız. 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 Atatürk University
Örnek 10 Veri.dat isimli dosyadan ilk iki veriyi alan ve b isimli değişkene atayn program yazınız. veri.dat 1 5 11 2 4 5 clear all clc a=fopen ('veri.dat', 'r' ); for i=1:2 b(i)=fscanf(a,'%d ',[1]); fclose(a); b Atatürk University
Bir dosyadan birden fazla değişkene veri atamak Veri.dat 1 10 3 12 4 14 5 15 6 16 7 18 Sol taraftaki dosyadan veri almak için, a = fopen('veri.dat', 'r'); b = fscanf(a, '%g %g', [2 inf]); fclose(a) Sonuç 1 3 4 5 6 7 10 12 14 15 16 18 Tsatırları değişkenlere atamak için c=b(1,:) d=b(2,:) Dorudan değişkenlere eşitlemek için a=fopen('veri.dat','r') for i=1:6 d(i)=fscanf(a,'%f',[1]); e(i)=fscanf(a,'%f',[1]); fclose(a) Atatürk University
Bir dosyadan birden fazla değişkene veri atamak Diğer metot Veri.dat 1 10 3 12 4 14 5 15 6 16 7 18 clc clear all a=fopen('veri.dat','r'); for i=1:6 for j=1:2 masa(i,j)=fscanf(a,'%g',[1,1]); fclose(a); k=(masa(:,1))' % tırnak işareti transpoz işlemidir t=(masa(:,2))'
SORU: Tabloda sıcaklık ve basınç verileri bulunmaktadır. Bu verileri ideal gaz denkleminde kullanarak özgül hacmi hesaplayan ve özgül hacmin 0.23 den büyük ve 0.33 den küçük olan değerlerini yeni bir dizi değişkenine atayan bir MATLAB programı yazınız. (R= 0.287 kj/kg.k) Deney no Basınç (kpa) Sıcaklık(K) 1 2200 1500 2 2400 2000 3 2600 2500 4 2800 3000 5 3000 3500 p v = R T (Basınç * Özgül hacim = Gaz sabiti * Sıcaklık) CEVAP: MATLAB Program clc clear all P=[2200 2400 2600 2800 3000]; T=[1500 2000 2500 3000 3500]; R=0.287; a=0; for i=1:5 v(i)=r*t(i)/p(i); if v(i)>0.23 & v(i)<0.33 a=a+1; vv(a)=v(i); vv Hafta 9-10 Atatürk University
%% dosya oluşturma clc clear all M=[2200 1500; 2400 2000;2600 2500;2800 3000;3000 3500]; a=fopen('veri.dat','w'); for i=1:5 for j=1:2 fprintf(a,'%g ',M(i,j)); fprintf(a,'\n'); fclose(a); %% Hepsini birden okutma clc clear all a=fopen('veri.dat','r'); b=fscanf(a,'%g',[2 inf]); fclose(a); T=b(1,:); P=b(2,:);
%% birer birer okutma clear all clc a=fopen('veri.dat','r'); for i=1:5 T(i)=fscanf(a,'%g',[1]); P(i)=fscanf(a,'%g',[1]); fclose(a); %% işlemler R=0.287; a=0; for i=1:5 v(i)=r*t(i)/p(i); if v(i)>0.23 & v(i)<0.33 a=a+1; vv(a)=v(i); vv Hafta 9-10 Atatürk University
Örnek 10 Bir kargo şirketinde, ücretlirme paket ağırlığına göre yapılmaktadır. Taban fiyat, 2 kg a kadar 5 TL olup ondan sonraki her kilo başına 0.5 TL ilave yapılarak hesaplanmaktadır. Eğer paket ağırlığı 35 kg dan fazlaysa, hesaplanan ücrete ilave 10 TL alınmakta ve 50 kg dan fazla tek paketler, işçi sağlığı açısından kabul edilmemektedir. Kullanım kolaylığı açısından paket ağırlığını kg cinsinden alıp, ücreti hesaplayan ve aşağıdaki formatta veri.dat isimli dosyaya yazdıran bir MATLAB programı yazınız. (Paket ağırlıklarını tam sayı alınız) Ağırlık (kg) Ücret(TL) 1 5 2 5 3 5.5 4 6 50 39 Atatürk University