FONKSİYONLAR(User Defined Functions)
MATLAB’de yazdığımız programları
daha etkili biçimde kullanmak için kodları dosyaya yazdırabilir veya
input/output durumu varsa fonksiyonları kullanabiliriz.
Oluşturduğumuz
fonksiyonları,başka bir fonksiyonda çağırarak kullanabiliriz.Bunu
yapmak,komplex yapıları daha kolay çözümlememizi
sağlayacaktır.Örneğin;üniversitede öğrencisiniz.Ve her dönem farlı dersler
alıyorsunuz.Ders notlarını da bilgisayarınıza depoluyorsunuz.Muhtemelen,tüm
ders notlarını,ödevleri,… kaydedip,hepsini aynı klasöre atmak yerine,her ders
için dosya açıp,notları ait olduğu dersin klasörüne kaydettiğinizde karmaşıklık
azalmış olacaktır.Bu örnek sadece programlamada ki hiyeraşik düzeni görmek
içindi.
MATLAB’de fonksiyonu çalıştırmak(çağırmak) : calling a funtion
input/output lar : arguments
Fonksiyonu
Çalıştırmak(Çağırma) :
Fonksiyon yapısı aşağıdaki gibidir;
[output_argument1,
output_argument2, …] =
function_name(input_argument1,
input_argument2, …)
Fonksiyonu çağırmak için,MATLAB’de Comand Window’a fonksiyonadi(input1,input2…)
şeklinde yazılarak çağırılır.
Fonksiyon,output ve/veya input olmadan da olabilir.
function fonksiyon_adi
|
input yok,output yok
|
function fonksiyon_adi(input’lar)
|
input var,output yok
|
function output’lar = fonksiyon_adi
|
input yok,output var
|
function output’lar = fonksiyon_adi(input’lar)
|
input var,output var
|
Fonksiyon içinde de değişkenler kullanabiliriz.Ancak bunlar
kullanıcı tarafından girilmez ya da çıktısı istenmez.Fonksiyonun işlemlerini
yapmak için kullanılırlar.Bu tip argument’ler
dummy
arguments olarak adlandırılır.
ÖRNEK 1 : 12x12 çarpım tablosunu oluşturunuz.Daha sonra MxN
boyutunda çarpım tablosu (fonksiyon kullanarak ) oluşturunuz.
for j = 1:12
for k = 1:12
fprintf(‘%d ‘, j*k);
end
fprintf(‘\n’);
end
Yukarıdaki kodlar script
dosyasına yazıldığında ve çalıştırıldığında 12x12 boyutunda çarpım tablosu oluşur,ama
biz MxN boyutunda oluşturmak istiyorsak fonksiyon kullanmamız gerekecektir ve
input’lar M ve N olacaktır.
function multiply(M, N)
for j = 1:M
for k = 1:N
fprintf(‘%d ‘, j*k);
end
fprintf(‘\n’);
end
NOT : Oluşturduğunuz fonksiyonu kaydedirken,fonksiyon_adi.m
olarak kaydetmelisiniz.
ÖRNEK 2 : Mühendisler genellikle açı hesaplamalarını derece
cinsinden yapmaktadır.Fakat,birçok bilgisayar programı ve hesap makinelerindeki
sonuçlarda radyan türünden verilere ihtiyacımız vardır.Sizde girilen dereceyi
radyan cinsinden hesaplayan program yazınız.(DR fonksiyonu)
function
output = DR(x)
%This
function changes degrees to radians
output = x*pi/180;
output =
0.000 (0)
0.262 (15)
0.524 (30)
0.785 (45)
1.047 (60)
NOT : Eğer bir fonksiyonda ,girdiniz vektör
olursa bir output için birden fazla veri
alırsınız.
function
[dist, vel, accel] = motion(t)
%
This function calculates the distance, velocity, and
%
acceleration of a particular car for a given value of t
%
assuming all 3 parameters are initially 0.
accel
= 0.5 .*t;
vel
= t.^2/4;
dist = t.^3/12;
Yukarıdaki
örnek çalıştırıldığında,t yerine fonksiyona göre sabit sayı girildiğinde,dist,vel,accel
değerlerini bir kere (girilen değere karşılık gelen değerler) hesaplayacaktır.
[distance,
velocity, acceleration] = motion(10)
distance
=
83.33
velocity
=
25
acceleration
=
5
Eğer programı
çağırırken sadece input girerseniz(output’ları belirtmezseniz),sadece ilk
output değeri yani dist yazdırılacaktır.
motion(10)
ans
=
83.333
Programı,hem
output’ları belirterek hem de input’u vektör olarak girerseniz,bir output için
birden
fazla veri elde edersiniz.
time
= 0:10:30;
[distance, velocity,
acceleration] = motion(time)
distance
=
0
83.33 666.67 2250.00
velocity
=
0
25.00 100.00 225.00
acceleration
=
0 5.00 10.00
15.00
Yukarıda ilk
olarak,time vektör olarak girilmiştir.time vektörünün değerleri
sırasıyla 0,10,20,30 değerleridir.
En
sonunda,sonuçları daha okunabilir görmek isterseniz,sonuçları bir matris olarak
belirtebilirsiniz.
results =
[time',distance',velocity',acceleration']
results
=
0
0 0 0
10.00
83.33 25.00 5.00
20.00
666.67 100.00 10.00
30.00 250.00 225.00 15.00
Programlama Fonksiyonları :
Yazdığımız
bazı fonksiyonlar değişken input,output sahibi olabilirler.Örneğin,fonksiyonda
normalde iki input olmasına rağmen,girdiğimiz bir input için işlem yapabilen
fonksiyonlar kullanabiliriz.
nargin ve nargout fonksiyonlarda (user-defined
function) aşağdaki gibi kullanılır;
nargin : input sayısı
nargout : output sayısı
Ayrıntı için
: help nargin
ÖRNEK 3 : f1 ve f2 frekanslar,ve girilen frekanslara
göre grafik çizen fonksiyon
X = [0,2p]
aralığında, y = [0,2p]
aralığında
Eğer fonksiyon
çalıştırıldığında 1 input alırsa, x,sin(f1*x) grafiği;
2 input alırsa ,X,Y,Z üç
boyutlu graği çizdiren program yazınız.
[X Y] =
meshgrid(x,y);
Z
=sin(f1.*X) + sin(f2.*Y);
%this funtion name
is plotSin.m
%this make a as a
input frequency ,draw a sin wave
%
%x is the range of
frequency
%plot is frequency,
sine wave plot
function
plotSin(f1, f2)
x =
linspace(0,2*pi,round(16*f1)+1);
figure
if nargin
== 1
plot(x,sin(f1*x),'rs--',...
'LineWidth',2,'MarkerFaceColor','k');
elseif nargin
== 2
y = linspace(0,2*pi,round(16*f2)+1);
[X Y] = meshgrid(x,y);
Z =sin(f1.*X) + sin(f2.*Y);
subplot(2,1,1);
imagesc(x,y,Z);
colorbar;
axis xy;
colormap hot
subplot(2,1,2);
surf(X,Y,Z);
end
end
Program çalıştırıldığında :
>>plotSin(2)
>> plotSin(2,3)
ÖRNEK 4 : Merkezi x,y ; yarıçapı r olan çember çizen fonksiyon yazınız.
Ayrıca aşağıdaki koşulları da sağlasın :
1 .center_x ==
0 && center_y == 0
plot(x,y,'LineWidth',4,'Color','k');
2 . center_x == -1 && center_y
== 0
plot(x,y,'LineWidth',4,'Color','b');
3 . center_x == 1 && center_y ==
0
plot(x,y,'LineWidth',4,'Color','r');
4 . center_x == -0.5 && center_y
== -0.5
plot(x,y,'LineWidth',4,'Color','y');
5. center_x == 0.5 && center_y == -0.5
plot(x,y,'LineWidth',4,'Color','g');
6. tüm durumla haricinde
plot(x,y,'LineWidth',2,'Color','r');
%this file's name is
getCircle.m
%get the x and y
coordinates of a circle.
%Return x and ysuch
that plot(x,y)will plot the circle.
function
[x,y]=getCircle(center_x,center_y,r)
%range of the t
t = 0:0.1:4*pi;
% r^2 = x^2 + y^2 is the
circle function
x = r .* cos(t) + center_x;
y = r .* sin(t) + center_y;
if center_x == 0 &&
center_y == 0
plot(x,y,'LineWidth',4,'Color','k');
elseif center_x == -1 && center_y == 0
plot(x,y,'LineWidth',4,'Color','b');
elseif center_x == 1 && center_y == 0
plot(x,y,'LineWidth',4,'Color','r');
elseif center_x == -0.5 && center_y == -0.5
plot(x,y,'LineWidth',4,'Color','y');
elseif center_x == 0.5 && center_y == -0.5
plot(x,y,'LineWidth',4,'Color','g');
else
plot(x,y,'LineWidth',2,'Color','r');
end
end
Program çalıştırıldığında :
>> getCircle(1,1,4)
>> getCircle(-1,0,0.7)
ÖRNEK 5 : Yukarıdaki getCircle fonksiyonunu
kullanarak,her birinin yarıçapı 0.4 br olan ve merkezleri sırasıyla, (0,0) ;
(-1,0) ; (1,0) ; (-0.5 , 0.5) ; (0.5 , -0.5) noktasında olan çemberleri aynı
grafikte çizdiriniz.(yazdırmak için script
dosyası kullanabilirsiniz,fonksiyona
gerek yoktur.)
%Make a script
called olympic.m.
%This script should
use your getCircle function to draw the Olympic logo
r = 0.4; %radius of circles
hold on
axis equal
a = getCircle(0,0,r);
b = getCircle(-1,0,r);
c = getCircle(1,0,r);
d = getCircle(-0.5,-0.5,r);
e = getCircle(0.5,-0.5,r);
Kaynaklar :
Introduction to
Programming with Matlab, 2000-2011 J. Michael Fitzpatrick and John D.
Crocetti,
Vanderbilt
University
MATLAB for Engineers by Holly Moore, Third Edition,
and published by Prentice Hall
MIT OpenCourseWare 6.094 Introduction to MATLAB® January Homework 2
Fonksiyonlar – Konu Anlatımı ve Soru Çözümü
YanıtlaSilLise hayatınızdan itibaren matematik dersini zorlaştıran, özellikle çok fazla çalışmayan öğrenciler için bela olan ve neredeyse her türlü alanda karşımıza çıkan fonksiyonlar konusunu işleyeceğiz. TYT Matematik fonksiyonlar konu anlatımı içeriğine baktığımızda ayt kısmına nazaran daha az, daha basit ve daha anlaşılabilir içerikler ile karşılaşacağız. Fakat ilkokulda öğrendiğiniz sayısal konularından sonra böyle bir olgu sizi biraz...
https://yksdestek.com/fonksiyonlar-tyt-matematik/