tbt1_ders_notu
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
İÇİNDEKİLER<br />
WHİLE DÖNGÜSÜ 2<br />
KULLANIM ŞEKLİ 2<br />
BREAK VE CONTİNUE DEYİMLERİ 3<br />
MATLAB`DA İÇİÇE DÖNGÜLER 3<br />
MATLAB`DA İKİ DEĞİŞKENİN DEĞERİNİN YER DEĞİŞTİRMESİ 7<br />
SELECTION SORT (SEÇMELİ SIRALAMA ALGORİTMASI) 7<br />
BUBBLE SORT (KABARCIK SIRALAMA ALGORİTMASI) 8<br />
HIZ KIYASI 8<br />
MATLAB FONKSİYONLARI 9<br />
ALT FONKSİYONLAR<br />
11<br />
ÖNEMLİ BAZI SİSTEM FONKSİYONLARI 13<br />
SERBEST PARAMETRELİ FONKSİYONLAR 13<br />
UYGULAMA 14<br />
1
22.10.2014 Çarşamba<br />
WHİLE DÖNGÜSÜ<br />
Döngü işleminin bir şarta bağlanılması gereke durumlarda for döngüsü yerine while döngüsü<br />
kullanılır.Bu döngü çeşidinde kaç kez dönüleceği verilen şartın yerine gelip gelmediğine bağlıdır. Bu<br />
yüzden sonsuz döngülere girme tehlikesi vardır. For ve while birbiri yerine kullanılabilir.<br />
KULLANIM ŞEKLİ<br />
While (koşul)<br />
Deyim 1<br />
Deyim 2<br />
Koşul_degisikligi<br />
End<br />
ÖRNEK:<br />
clc;<br />
clear;<br />
n=5;<br />
while(n>0)<br />
fprintf(‘%d 0 dan büyüktür’,n);<br />
n=n-1;<br />
end<br />
ÖRNEK: 10 TL`nin %30 faiz ile 150 TL geçtiği yada eşit olduğu ilk yılı ve paranın kaç TL olduğunu<br />
hesaplayan bir matlab programı yazınız.<br />
clc;<br />
clear;<br />
sayaç=0;<br />
while(n
Break ve Continue Deyimleri<br />
Uygulamanın herhangi bir anında döngüyü durdurmak için (for veya while) break deyimi kullanılır.<br />
Uygulama döngüyü kapatan end deyiminden itibaren devam edecektir.<br />
Herhangi bir çevrimi iptal edip sonraki çevrime geçmek için continue terimi kullanılır.<br />
Bu deyimler iç içe döngüler içerisinde kullanılmış ise yalnızca içinde bulunduğu döngüye etki eder.<br />
ÖRNEK: Bir önceki para ile ilgili sorunun for ile yapılmış hali ve süre farkı?<br />
clc;<br />
clear;<br />
yil=0;<br />
para=10;<br />
tic;<br />
for i=1:1:inf<br />
yil=yil+1;<br />
para=para+para*0.30;<br />
if(para>=150)<br />
break;<br />
end<br />
end<br />
toc;<br />
fprintf('%d yil sonra para %g kadar olur',yil,para);<br />
ÖRNEK: x=10 ve y=7 olarak verilsin. Bu sayıların toplamı 52.347`den küçük kalıncaya kadar x sayısı<br />
2 ye katlanarak toplamaya devam edilmektedir. Döngü bittiğinde x sayısı kaç kez katlanmış olur.<br />
clc;<br />
clear;<br />
x=10;<br />
y=7;<br />
s=0;<br />
sonuc=17;<br />
while (sonuc
clc;<br />
clear;<br />
for i=1:1:5<br />
for j=1:1:3<br />
fprintf('%d,%d\n',i,j)<br />
end<br />
end<br />
ÖRNEK: Kullanıcıdan sütun ve satır değerlerini isteyip, ( İndislerini belirterek isteyen bir program<br />
yazınız).<br />
clc;<br />
clear;<br />
A=[];<br />
n=input('Matrisin satır sayısını giriniz');<br />
m=input('Matrisin sütun sayısını giriniz');<br />
for i=1:1:n<br />
for j=1:1:m<br />
fprintf('A %d. satır %d . sütunun değerini<br />
giriniz: ',i,j);<br />
A(i,j)=input('');<br />
end<br />
end<br />
ÖRNEK: Çarpım tablosunu oluşturan program.<br />
clc;<br />
clear;<br />
for i=1:1:10<br />
for j=1:1:10<br />
fprintf('%5d',i*j)<br />
end<br />
fprintf('\n');<br />
end<br />
4
ÖRNEK: Kullanıcının girdiği bir n değerine kadar<br />
1<br />
2! + 1 3! + 1 4! + ⋯ 1 n =?<br />
clc;<br />
clear;<br />
n=input('n sayısını giriniz: ');<br />
fakt=1;<br />
sonuc=0;<br />
for i=2:1:n<br />
fakt=1;<br />
for j=1:1:i<br />
fakt=fakt*j;<br />
end<br />
sonuc=sonuc+(1/fakt);<br />
end<br />
for i=2:n-1<br />
fprintf('1/%d! + ',i);<br />
end<br />
fprintf('1/%d!= %f',n,sonuc);<br />
ÖRNEK:<br />
4 ∑<br />
100000 (−1) k<br />
k=0 2k+1<br />
clc;<br />
clear;<br />
topl=0;<br />
deger=0;<br />
for i=0:1:100000<br />
topl=topl+(-1)^i/(2*i+1);<br />
end<br />
fprintf('Sonuc= %g',4*topl);<br />
SONUC=3.1416<br />
5
03.12.2014 Çarşamba<br />
ÖRNEK: Kullanıcı tarafından girilen iki matrisin toplamını bulacak olan matlab kodlarını yazınız.<br />
A=input('Lütfen ilk matrisi giriniz [,,]');<br />
B=input('Lütfen ikinci matrisi giriniz [,,]');<br />
[x,y]=size(A);<br />
[m,n]=size(B);<br />
T=[];<br />
if(x~=m)||(y~=n)<br />
error('Matrislerin boyları eşit değil !');<br />
else<br />
for i=1:1:x<br />
for j=1:1:y<br />
T(i,j)=A(i,j)-B(i,j);<br />
end<br />
end<br />
end<br />
T<br />
ÖRNEK: Kullanıcı tarafından girilen iki matrisin çarpımını bulacak olan matlab kodlarını yazınız.<br />
A=input('Lütfen ilk matrisi giriniz [,,]');<br />
B=input('Lütfen ikinci matrisi giriniz [,,]');<br />
[x,y]=size(A);<br />
[m,n]=size(B);<br />
T=zeros(x,n);<br />
if(y~=m)<br />
error('Birinci matrisin sütunu ikinci matrisin<br />
satırına eşit değil !');<br />
else<br />
for i=1:1:x<br />
for j=1:1:n<br />
for k=1:n<br />
T(i,j)=T(i,j)+A(i,k)*B(k,j);<br />
end<br />
end<br />
end<br />
end<br />
C<br />
6
ÖRNEK: Kullanıcı tarafından girilen bir matrisin transpozunu ekrana yazan matlab kodlarını<br />
yazınız.<br />
A=input('Lütfen ilk matrisi giriniz [,]: ');<br />
[x,y]=size(A);<br />
C=zeros(y,x);<br />
for i=1:x<br />
for j=1:y<br />
C(j,i)=A(i,j);<br />
end<br />
end<br />
C<br />
ÖDEV: 4x4 tipinde bir matrisin determinantını hesaplayacak olan, matlab komutlarını yazınız.<br />
ÖDEV: Kullanıcı tarafından girilen bir dizinin (satır vektörünün) elemanlarını tersten başka bir satır<br />
vektörüne aktaracak matlab kodlarını yazınız.<br />
A=input('Lütfen bir satır vektörü [,,] giriniz: ');<br />
B=[];<br />
j=length(A);<br />
for i=1:length(A)<br />
B(i)=A(j);<br />
j=j-1;<br />
end<br />
B<br />
ÖRNEK: 4x4 tipinde bir matrisin tersini alan, matlab komutlarını yazınız.<br />
MATLAB`DA İKİ DEĞİŞKENİN DEĞERİNİN YER DEĞİŞTİRMESİ<br />
X ve y gibi iki değişkenin değerlerinin yer değiştirmesi için ilk olarak geçici bir değişken<br />
oluşturulur. X` in değeri geçici bir değişkene atanır. Daha sonra y`nin değeri x e atanır. Son olarak<br />
geçici değişkenin değeri y ye atanır.<br />
Matlab da verilen bir A dizisinin (satır vektörünün) elemanlarının küçükten büyüğe veya büyükten<br />
küçüğe sıralamak için sort(A) fonksiyonu kullanılır. Biz bu işlemi kendimiz yapmaya çalışacağız.<br />
ÖRNEK: Elemanları 1 ile 50 arasında değişen 10 elemanlı rastgele oluşturulan bir dizinin<br />
elemanlarını küçükten büyüğe doğru sıralayıp, dizinin sıralanmış halini ekrana yazan matlab<br />
komutlarını yazınız.<br />
SELECTION SORT (Seçmeli Sıralama Algoritması)<br />
A=round(rand(1,10)*49+1);<br />
for i=1:length(A)<br />
min=i;<br />
for j=i+1:length(A)<br />
if(A(j)
end<br />
A<br />
gecici=A(i);<br />
A(i)=A(min);<br />
A(min)=gecici;<br />
BUBBLE SORT (Kabarcık Sıralama Algoritması)<br />
B=round(rand(1,10)*49+1);<br />
for i=1:length(B)<br />
for j=length(B):-1:(i+1)<br />
if(B(j)
end<br />
end<br />
toc;<br />
Elapsed time is 8.652372 seconds.<br />
Elapsed time is 0.160322 seconds.<br />
10.12.2014 Çarşamba<br />
MATLAB FONKSİYONLARI<br />
M dosyalarının önemli kullanım alanlarından biriside fonksiyonlardır. Kısaca bir fonksiyon<br />
belirli görevi yerine getirmek için bir araya getirilmiş komutlardan oluşur.<br />
Matlab fonksiyonları bir veya daha fazla giriş parametresi alarak, yine bir veya daha fazla çıkış<br />
parametresi verirler. Hiç giriş ve çıkış parametresi olmayan fonksiyonlarda yazılabilir. Hatta<br />
fonksiyonun parametresi başka bir fonksiyon bile olabilir.<br />
Matlab fonksiyonları sistemde hazır bulunan (MathWorks firmasının yazmış olduğu<br />
fonksiyonlar) ve kullanıcılar tarafından yazılan fonksiyonlar olmak üzere iki gruba ayrılır.<br />
Sistem tarafından yazılan fonksiyonlar bir açıklamaya sahip oldukları için kolayca kullanılırlar.<br />
Sistem tarafından yazılan fonksiyonlar, her an kullanılabilir. Ancak kullanıcı fonksiyonları<br />
varsayılan (aktif) klasörde iseler kullanılırlar.<br />
Matlab herhangi bir değişkeni, fonksiyonu hatta M-dosyası ismini farklı görmez bu sebeple<br />
fonksiyon ismi (dolayısıyla m-dosyası ismi) verirken değişken isimlendirme kurallarına uyulmalıdır.<br />
Fonksiyon isimleri daima harfle başlamalıdır. Bunu harfler rakamlar ve “_” işareti<br />
izleyebilir.<br />
Büyük küçük harf duyarlılığı vardır.<br />
En fazla 63 karakter kullanılabilir.<br />
Bir fonksiyonun ismi, giriş parametreleri ve çıkış parametreleri fonksiyonun imzası(prototipi)<br />
olarak adlandırılır. Fonksiyon olan bir m-dosyası function anahtar kelimesi ile başlamalıdır (İLK<br />
SATIRDA) ve (son satırda ) end anahtar kelimesiyle bitmelidir.<br />
ÖRNEK: Verilen x parametresi için f(x)=1+x+…+x 15<br />
function [sonuc]=ilk(x)<br />
sonuc=0;<br />
for i=0:15<br />
sonuc=sonuc+x^i;<br />
end<br />
end<br />
9
Fonksiyon imzaları için aşağıdaki kalıplar kullanılır. (gp: giriş parametresi, cp: çıkış<br />
parametresi)<br />
Function cp=fonk_adi(gp)<br />
Function cp=fonk_adi(gp1,gp2,…,gpn)<br />
Function [cp1,cp2,…,cpn]=fonk_adi(gp)<br />
Function [cp1,cp2,…,cpn]= fonk_adi(gp1,gp2,…,gpn)<br />
Function cp=fonk_adi()<br />
Function fonk_adi(gp)<br />
Function fonk_adi()<br />
ÖRNEK: İki nokta arasındaki uzaklığı bulan matlab fonksiyonunu yazınız.<br />
function sonuc= uzaklik(A,B)<br />
% (x1,y1) ve (x2,y2) noktaları arasındaki<br />
% uzaklığı bulmak için kullanılır.<br />
%uzaklik([x1,y1],[x2,y2]) biçiminde çalıştırılır<br />
sonuc=sqrt((B(1)-A(1))^2+(B(2)-A(2))^2);<br />
end<br />
2.YOL:<br />
function sonuc= uzaklik(x1,y1,x2,y2)<br />
if(length(A)~=2)||(length(B)~=2)<br />
error(‘Yanlış giriş’);<br />
else<br />
% (x1,y1) ve (x2,y2) noktaları arasındaki<br />
% uzaklığı bulmak için kullanılır.<br />
%uzaklik(x1,y1,x2,y2) biçiminde çalıştırılır<br />
sonuc=sqrt((x2-x1))^2+(y2-y1)^2);<br />
end<br />
end<br />
ÖRNEK: x ve y birbirinden farklı olmak üzere<br />
|x|+|y|≤3<br />
Eşitsizliğini sağlayan tam sayı çiftlerini ekrana yazan bir matlab fonksiyonu yazınız.<br />
function mutlakdeger()<br />
clc;<br />
syc=0;<br />
for x=-3:3<br />
for y=-3:3<br />
if(x==y) continue;<br />
else<br />
10
if(abs(x)+abs(y)2)<br />
s=0;<br />
return;<br />
end<br />
end<br />
if(length(liste)==2)<br />
s=1;<br />
else<br />
s=0;<br />
end<br />
end<br />
ALT FONKSİYONLAR 17.12.14<br />
Çarşamba<br />
Matlab`da bir fonksiyon yazarken problemi alt fonksiyonlara bölmek hem okumayı<br />
kolaylaştırır hem de fonksiyonumuzu hızlandırır. Alt fonksiyonlar fonksiyon ile aynı belgeye yazılır. Ve<br />
yalnızca ana fonksiyon tarafından çağırılır. Diğer fonksiyonlar aynı aktif klasörde olsalar bile bu alt<br />
fonksiyonu çağıramazlar.<br />
ÖRNEK: Verilen bir sayıdan küçük olan tüm asal sayıların listesini veren bir matlab<br />
fonksiyonu yazınız.<br />
11
function [ liste ] = asallar( n )<br />
% verilen bir sayıdan<br />
% küçük olan asal sayıların listesini verir<br />
liste=[];<br />
tic;<br />
for i=1:n-1<br />
if (asalmi(i)==1)<br />
liste=[liste i];<br />
end<br />
end<br />
toc;<br />
end<br />
function sonuc=asalmi(n)<br />
liste=[];<br />
for i=1:n<br />
if (mod(n,i)==0)<br />
liste=[liste i];<br />
end<br />
end<br />
if(length(liste)==2)<br />
sonuc=1;<br />
else<br />
sonuc=0;<br />
end<br />
end<br />
Daha hızlı hali;<br />
function [ liste ] = asallar( n )<br />
% verilen bir sayıdan<br />
% küçük olan asal sayıların listesini verir<br />
liste=[];<br />
tic;<br />
for i=1:n-1<br />
if (asalmi(i)==1)<br />
liste=[liste i];<br />
end<br />
end<br />
toc;<br />
end<br />
function sonuc=asalmi(n)<br />
liste=[];<br />
for i=1:n<br />
if (mod(n,i)==0)<br />
liste=[liste i];<br />
if (length(liste)>2)<br />
sonuc=0;<br />
break;<br />
end<br />
end<br />
end<br />
if(length(liste)==2)<br />
sonuc=1;<br />
else<br />
sonuc=0;<br />
end<br />
end<br />
Matlab`da fonksiyonlar rekürsif(özyinelemeli) olarak çalışabilir. Ancak bu her zaman tehlikeli bir<br />
durumdur. Mutlaka fonksiyona bir bitim noktası koymanız gerekir.<br />
Örnek: Verilen bir sayının faktöriyelini alacak olan fonksiyonu kendisini çağıracak şekilde yazınız.<br />
12
function [ sonuc ] = faktoriyel( n )<br />
if(n
function [ sonuc ] = toplam( varargin )<br />
n=nargin;<br />
sonuc=0;<br />
for i=1:n<br />
sonuc=sonuc+varargin{i};<br />
end<br />
end<br />
Örnek: Giriş parametresi olarak girilen iki sayının toplamını verecek, eğer 3 sonuç istenirse<br />
toplamın karesi, n tane istenirse n. kuvvetine kadar tüm değerleri veren<br />
function [ varargout ] = toplacarp( varargin )<br />
n=nargin;<br />
c=nargout;<br />
if(c>6)<br />
error('abartma !');<br />
end<br />
sonuc=0;<br />
for i=1:n<br />
sonuc=sonuc+varargin{i};<br />
end<br />
varargout{1}=sonuc;<br />
for j=2:c<br />
varargout{j}=sonuc^j;<br />
end<br />
end<br />
Uygulama<br />
1: Girilen bir kelimenin polindrome olup olmadığını bulan matlab fonksiyonunu<br />
yazınız.(kabak,kazak vb. kelimeler polindromdur)<br />
function sonuc = polindrome( kelime )<br />
boyut=length(kelime);<br />
yarisi=fix(boyut/2); %fix aşağıya yuvarlar<br />
sonuc=1;<br />
for i=0:yarisi<br />
if (kelime(i+1)==kelime(boyut-i))<br />
continue;<br />
else<br />
sonuc=0;<br />
break;<br />
end<br />
end<br />
end<br />
24.12.2014 Çarşamba<br />
14
2: Verilen bir yarıçap değer için çemberin alanı ve çevresini hesaplayan fonksiyon yazınız.<br />
function A = cember(r)<br />
A=[];<br />
A(1)=pi*r*r;<br />
A(2)=2*pi*r;<br />
end<br />
% function [alan,cevre]=cember(r)<br />
% alan=pi*r*r;<br />
% cevre=2*pi*r;<br />
% end<br />
3: Alt fonksiyon ile iki sayının karelerinin toplamını bulan fonksiyon örneği<br />
function [ sonuc ] = kt( x,y )<br />
sonuc=karetopla(x,y);<br />
end<br />
function [ sonuc ] = karetopla( x,y )<br />
sonuc=x^2+y^2;<br />
end<br />
4: Öyle bir matlab fonksiyonu yazınız ki, fonksiyon tek parametre ile çalıştırılmış ise girilen sayının 5<br />
katını versin eğer iki parametre ile çalıştırılmış ise girilen sayıların toplamının 10 katını versin.<br />
function [ sonuc ] = ornek4( x,y )<br />
if nargin==1<br />
sonuc=x*5;<br />
elseif nargin==2<br />
sonuc=(x+y)*10;<br />
end<br />
end<br />
5: Verilen bir liste için bir tek çıkış parametresi isteniyor ise aritmetik ortalamayı eğer iki çıkış<br />
parametresi isteniyorsa standart sapmayı da veren bir fonksiyon yazınız.<br />
1<br />
∑ t<br />
x t i=1 i Aritmetik ortalama<br />
√ t ∑ x2−<br />
(∑ t=1 x i<br />
i)<br />
t(t − 1)<br />
function [ varargout ] = ornek5( N )<br />
tp=0;<br />
n=length(N);<br />
for i=1:n<br />
tp=tp+N(i);<br />
end<br />
sonuc=(1/n)*tp;<br />
varargout{1}=sonuc;<br />
if nargout==2<br />
t<br />
t<br />
2<br />
15
tp2=0;<br />
for i=1:n<br />
tp2=tp2+N(i)^2;<br />
end<br />
topkare=tp^2;<br />
pay=n*tp2-topkare;<br />
payda=n*(n-1);<br />
sonuc1=sqrt(pay/payda);<br />
varargout{2}=sonuc1;<br />
end<br />
end<br />
6: Kendisine parametre olarak girilen tüm sayıların 3.kuvvetlerinin toplamını bulan bir fonksiyon<br />
yazınız.<br />
function [ toplam ] = ornek6( varargin )<br />
toplam=0;<br />
for i=1:nargin<br />
toplam=toplam+varargin{i}^3;<br />
end<br />
end<br />
7: Verilen bir n değerine karşılık * lardan oluşan n satır ve n sütunlu bir üçgen çizen matlab<br />
fonksiyonunu yazınız.<br />
function ucgen( n )<br />
for i=1:n<br />
for j=1:i<br />
fprintf('*');<br />
end<br />
fprintf('\n');<br />
end<br />
end<br />
8: İkilik sayı sisteminde verilen bir sayıyı onluk sayı sistemine çeviren matlab fonksiyonunu yazınız.<br />
function [ sonuc ] = ornek8( sayi ) %101 girildi<br />
sonuc=0;<br />
ikili=num2str(sayi); %101 sayısını kelimeye çevirdik<br />
boyut=length(ikili); %kelimenin uzunluğunu aldık (3)<br />
kuvvet=boyut-1; % kuvvet(2)<br />
for i=1:boyut<br />
if str2num(ikili(i))>1 % eğer 101in içindeki<br />
elemanlar 1den büyükse hata ver sadece(1,0)olmak<br />
zorunda<br />
error('sayı istenilen formatta değil');<br />
else<br />
sonuc=sonuc+str2num(ikili(i))*2^kuvvet;<br />
kuvvet=kuvvet-1;<br />
end end %sonuc=5 end<br />
16
9: Onluk sisteminde verilen bir sayıyı ikili sayı sistemine çeviren matlab fonksiyonunu yazınız.<br />
function [ sonuc ] = ornek9( sayi )<br />
i=1;<br />
q=fix(sayi/2);<br />
r=rem(sayi,2);<br />
sonuc(i)=num2str(r);<br />
while (2