FONKSİYONLAR(User Defined Functions)

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



1 yorum:

  1. Fonksiyonlar – Konu Anlatımı ve Soru Çözümü
    Lise 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/

    YanıtlaSil