Fonksiyonlar, Giriş Çıkış İfadeleri
Doç. Dr. M. Akif CEVİZ
Fen ve Mühendislik Uygulamaları ile
MATLAB
Atatürk Üniversitesi Mühendislik Fakültesi
Makine Mühendisliği Bölümü
Fonksiyonlar, Giriş Çıkış İfadeleri
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.
Fonksiyonlar, Giriş Çıkış İfadeleri
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.
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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)
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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)
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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);
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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 )
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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
Fonksiyonlar, Giriş Çıkış İfadeleri
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;
Çözüm 5
Fonksiyonlar, Giriş Çıkış İfadeleri
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.
Fonksiyonlar, Giriş Çıkış İfadeleri
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.
Fonksiyonlar, Giriş Çıkış İfadeleri
Dosy Açma: fopen
'r' Okuma için dosya açar (default).
'w' Yazma için yeni dosya açar veya oluşturur. Varsa mevcut verileri siler.
'a' Yazma için yeni dosya açar veya oluşturur. Mevcut verilere ilave eder.
'r+' Okuma ve yazma için dosya açar.
'w+' Okuma ve yazma için yeni dosya açar veya oluşturur. Varsa mevcut verileri siler.
'a+' Okoma ve yazma için yeni dosya açar veya oluşturur. Mevcut verilere ilave eder.
Fonksiyonlar, Giriş Çıkış İfadeleri
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.
Fonksiyonlar, Giriş Çıkış İfadeleri
Verileri dosyaya yazma: fprintf
Formatlı verileri dosyaya yazma
Syntax:
fprintf(ifade,format,A,...)
fprintf (ifade,‘%format%format%format….’,var_1,var_2,var_3,….)
Fonksiyonlar, Giriş Çıkış İfadeleri
Örnek 7
Aşağıdaki M vektörünü veri.dat isimli dosyaya yazan program yazınız.
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));
end
fclose(a);
for döngüsü ile
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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));
end end
fclose(a);
Fonksiyonlar, Giriş Çıkış İfadeleri
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 : alınan bilgi
okunan_rakamların_sayısı : Alınan rakamların sayısı
sayi : Okunması istenen rakam sayısı: n, [n, m], Inf
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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
Fonksiyonlar, Giriş Çıkış İfadeleri
Ö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]);
end
fclose(a);
b
Fonksiyonlar, Giriş Çıkış İfadeleri
Bir dosyadan birden fazla değişkene veri atamak
Sol taraftaki dosyadan veri almak için, a = fopen('veri.dat', 'r');
b = fscanf(a, '%g %g', [2 inf]);
fclose(a)
Veri.dat 1 10 3 12 4 14 5 15 6 16 7 18
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,:) a=fopen('veri.dat','r')
for i=1:6
d(i)=fscanf(a,'%f',[1]);
e(i)=fscanf(a,'%f',[1]);
end Dorudan değişkenlere
eşitlemek için
Sonuç
Fonksiyonlar, Giriş Çıkış İfadeleri
Diğer metot
clc
clear all
a=fopen('veri.dat','r');
for i=1:6 for j=1:2
masa(i,j)=fscanf(a,'%g',[1,1]);
end end
fclose(a);
k=(masa(:,1))' % tırnak işareti transpoz işlemidir t=(masa(:,2))'
Veri.dat 1 10 3 12 4 14 5 15 6 16 7 18
Bir dosyadan birden fazla
değişkene veri atamak
Fonksiyonlar, Giriş Çıkış İfadeleri
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)
𝑝 𝑣 = 𝑅 𝑇
(Basınç * Özgül hacim = Gaz sabiti * Sıcaklı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
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);
end end vv
Fonksiyonlar, Giriş Çıkış İfadeleri
%% 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));
end
fprintf(a,'\n');
end
fclose(a);
%% Hepsini birden okutma clc
clear all
a=fopen('veri.dat','r');
b=fscanf(a,'%g',[2 inf]);
fclose(a);
T=b(1,:);
Fonksiyonlar, Giriş Çıkış İfadeleri
%% 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]);
end
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);
end end
Fonksiyonlar, Giriş Çıkış İfadeleri
Örnek 10
Bir kargo şirketinde, ücretlendirme 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