MAK1010 MAKİNE MÜHENDİSLİĞİ BİLGİSAYAR UYGULAMALARI fprintf komutu text veya verinin ekranda göstermek veya bir dosyaya yazdırmak amacı ile kullanılır. Bu komutla (disp komutuna benzemez) çıkışın formatı ayarlanır. Numara formatları kontrol edilebilir. 1. fprintf komutu ile ekrana bir mesaj yazdırma; fprintf ( Ekranda Görüntülenen Mesaj ) >> fprintf(' Girilen parametre değerlerine göre problemin çözümü yoktur. Lütfen giriş verileri kontrol edin') Girilen parametre değerlerine göre problemin çözümü yoktur. Lütfen giriş verileri kontrol edin>> fprintf(' Girilen parametre değerlerine göre problemin çözümü yoktur.\n Lütfen giriş verileri kontrol edin \n') Girilen parametre değerlerine göre problemin çözümü yoktur. Lütfen giriş verileri kontrol edin Birden fazla fprintf komutu icra ediliyorsa, ekranda mesajlar otomatik olarak peş peşe görülür. 1. fprintf komutu ile ekrana bir mesaj yazdırma; fprintf ( Ekranda Görüntülenen Mesaj ) >> fprintf(' Problemin çözümü yoktur. Lütfen giriş verileri kontrol edin') Problemin çözümü yoktur. Lütfen giriş verileri kontrol edin >> fprintf(' Problemin çözümü yoktur. \n Lütfen giriş verileri kontrol edin \n ') Problemin çözümü yoktur. Lütfen giriş verileri kontrol edin fprintf(' Problemin çözümü yoktur. Lütfen giriş verilerini kontrol edin.') x=6; d=19+5*x; fprintf(' Bu programı sonra çalıştırmayı deneyin.') y=d+x; fprintf('farklı giriş değerleri kullanın.') >> Ders4Orn6 Problemin çözümü yoktur. Lütfen giriş verilerini kontrol edin. Bu programı sonra çalıştırmayı deneyin. Farklı giriş değerleri kullanın. 2. fprintf komutu ile yazı ve sayısal verinin birlikte ekrana yazdırılması; fprintf ( Ekranda Görüntülenen Mesaj %-5.2f ilave Mesaj, değişken_adı ) 2. fprintf komutu ile yazı ve sayısal verinin birlikte ekrana yazdırılması; Flag, seçim(opsiyonel) - Alana sadece sayıyı yazar + Sayının önüne işaretini de basar 0 Sayı alandan küçük ise sıfır ekler - 5.2 f % : işareti yazının içine yazılacak rakamın yerini gösterir. Alanın genişliği ve hassasiyeti (opsiyonel) -5.2f değişken_adı : sayının biçimini tanımlar : Hangi ismdeki değişkenin ekrana yazdırılacağı >> Ders4Orn7 1. Sayıyı giriniz, x1= 5 2. Sayıyı giriniz, x2= 6 3. Sayıyı giriniz, x3= 8 Girdiğinin bu üç sayının ortalaması 6.33 dir Dönüşüm Karakteri (Gerekli) e Küçük e, üslü sayı notasyonu ( 1.709098e+001). E Büyük E, üslü sayı notasyonu ( 1.709098E+001). f Sabit-nokta notasyonu ( 17.090980). g Küçük e üslü veya sabit-nokta notasyonun kısası G Büyük E üslü veya sabit-nokta notasyonun kısası i Tamsayı 1
3. fprintf komutu ile yazı ve birden fazla sayısal verinin birlikte ekrana yazdırılması; fprintf ( mesaj. %g %g %f ilave, değişken1, değişken2, değişken3 ) % Bu program ilk hızı ve atış açısı verilmiş bir merminin % yörüngesini hesaplar. % fprintf komutu ile ekrana metin ve sayısal değer yansıtılır. v=1584; % İlk hızı [km/h] teta=30; % Atış açısı [Derece] vmh=v*1000/3600; t=vmh*sind(teta)/9.81; d=vmh*cosd(teta)*2*t/1000; >> Ders4Orn8 Bir mermi 30.00 derece açı ve 1584.00 km/h ilk hızla atılırsa gideceği maksimum mesafe 17.091 km.dir fprintf('bir mermi %3.2f derece açı ve %4.2f km/h ilk hızla atılırsa gideceği maksimum mesafe %g km.dir\n ',teta,v,d) fprintf komutu vektörler de de kullanılır. Değişken bir vektör ise vektör elemanları ile ilgilenir. Eğer bir matris ise sütun sütun işlem yapılabilir. >> x=1:5; >> x=1:3:15; >> y=x.^(1/3); >> S=[x;y] S = 1.00 4.00 7.00 10.00 13.00 1.00 1.59 1.91 2.15 2.35 >> fprintf('eğer sayı %i ise küp kökü %f dir.\n',s) Eğer sayı 1 ise küp kökü 1.000000 dir. Eğer sayı 4 ise küp kökü 1.587401 dir. Eğer sayı 7 ise küp kökü 1.912931 dir. Eğer sayı 10 ise küp kökü 2.154435 dir. Eğer sayı 13 ise küp kökü 2.351335 dir. >> x=1:3:15; x = 1.00 4.00 7.00 10.00 13.00 >> >> fprintf('eğer sayı %i ise küp kökü %4.2f dir.\n',x) Eğer sayı 1 ise küp kökü 4.00 dir. Eğer sayı 7 ise küp kökü 10.00 dir. Eğer sayı 13 ise küp kökü >> >> fprintf('eğer sayı %i ise küp kökü %4.2f dir.\n',s) Eğer sayı 1 ise küp kökü 1.00 dir. Eğer sayı 4 ise küp kökü 1.59 dir. Eğer sayı 7 ise küp kökü 1.91 dir. Eğer sayı 10 ise küp kökü 2.15 dir. Eğer sayı 13 ise küp kökü 2.35 dir. 4. fprintf komutu ile sayısal olmayan verinin ekrana veya dosyaya yazdırılması; fprintf ( mesaj. %f %c %c ilave, S1, S2, S3 ) fprintf ( İşlemin Sonuç Değeri %d ve karakteri %c\n',30-17,'x'); >> fprintf('işlemin Sonuç Değeri %d ve karakteri %c\n',30-17,'x'); İşlemin Sonuç Değeri 13 ve karakteri x save fonksiyonu bir veri dosyasından bir matrise veri yazmak için veya bir veri dosyasına veri eklemek için kullanılır. Bu fonksiyonun çağırma veya kullanma biçimi; save dosya_adı matris_değişken_adı ascii -ascii nitelendiricisi düz metin veya veri dosyası oluşturmak için kullanılır. Örnek olarak önce rand fonksiyonu ile bir matris oluşturulmuş ve daha sonra bu matris save foksiyonu ile testverisi adı ile saklanmıştır. >> mymat = rand(2,3) mymat = 0.4565 0.8214 0.6154 0.0185 0.4447 0.7919 >> save testverisi.dat mymat -ascii mymat değişkeni adı altında oluşturulan verileri saklayan, testverisi.dat adında bir dosya oluşturur ve dosyayı MATLAB ın o andaki mevcut klasörüne (Current Folder) kaydeder. ascii biçimi dosyasını metin dosyası gibi saklanmasını sağlar. Böylece dosya notepad gibi metin düzenleyicilerinde de görüntülenebilir. Eğer bu ascii biçimi eklenmezse dosyadaki veri MAT dosyası olarak saklanır ve ancak MATLAB ortamında açılabilir. load bir MAT-dosyasındaki değişkenleri MATLAB çalışma ortamına yükler. Genelde ikili sayılar (binary) biçimdeki saklanan sıkıştırılmış MAT-dosyası (.mat uzantılı MATLAB dosyası) save komutu ile oluşturulabilir. MAT dosyası MATLAB ortamında yapısal diziler veya çift tamlıkta diziler şeklinde yüklenir. Bir önceki örnekte save komutu ile saklanan testverisi.dat dosyasını aşağıdaki şekilde yükleyebiliriz. >> clear >> load testverisi.mat -ascii >> who Your variables are:testverisi >> testverisi testverisi= 0.4565 0.8214 0.6154 0.0185 0.4447 0.7919 Burada clear fonksiyonu MATLAB alanındaki tüm değişkenleri temizlemek için kullanılmıştır. Böylece load komutu ile yüklenen verileri başka verilerle karışması önlenmiştir. load komutundan sonraki who fonksiyon komutu da MATLAB çalışma alanına yüklenen dosya adını görüntülemiştir. Daha sonra dosya adı çağırılınca bu dosyadaki değişkenler görüntülenmiştir. Burada ascii kodunda saklanan dosya yine ascii olarak çağrılmıştır. Bunun dışında load komutunun çeşitli kullanım veya çağırma biçimleri vardır. Bunlara help komutu veya diğer elektronik notlardan ulaşılabilir >> a=magic(4),b=ones(2,4)*-5.7 a = b = >> c=[8 6 4 2] c = >> save -ascii maydata.dat a b c >> load maydata.dat >> maydata maydata = Komut satırları sonucunda oluşturulan a b c değişkenleri mydata dosyasında saklanır ve daha sonra load komutu ile çağırıldığında; tüm veriler tek bir dosyada aktarılır. 2
MATLAB FONKSİYON DOSYALARI Fonksiyonlarla İşlem Yapmak >> a=magic(4);b=ones(2,4)*-5.7; >> c=[8 6 4 2]; >> save maydata a b c >> clear a b c >> load maydata >> maydata Undefined function or variable 'maydata'. >> a a = >> b b = >> c c = Buna karşılık, komut satırları sonucunda a b c değişkenleri maydata isimli dosyada.mat uzantılı olarak saklanır. load komutu ile de bu dosya içindeki a b c değişkenleri çalışma ortamına aktarılır MATLAB da çeşitli hesaplama işlemleri fonksiyon adı verilen hazır çözüm programları ile yerine getirilir. Çok sayıda olan ve günden güne sayısı artan bu fonksiyonlar diğer programlama dillerindeki (FORTRAN, BASIC, Pascal, Basic, C/C++ vb) altprogramlara (subroutine) veya yöntemlere eşdeğerdir. Kısaca MATLAB bir fonksiyonlar derlemesinden ibarettir denilebilir. Bu fonksiyonlar karekök alma, üst alma, sinus veya cosinus hesaplama gibi en basit temel matematik işlemlerden diferansiyel denklem çözümü, integral hesaplama işlemleri gibi en karmaşık matematik işlemlere kadar çeşitlilik gösterir. MATLAB içinde yer alan bu fonksiyonlar M-dosya fonksiyonları olarak bilinir ve bunların bir kısmı sistem içinde gömülü, kodları görüntülenemez olup diğer bir kısmı ise düze metin formatında olup bir metin düzleyicisinde kodları görüntülenebilir ve incelenebilir. MATLAB ortamında veya bir program içindeki hesaplama işlemlerinin büyük bir kısmı fonksiyonlarla yerine getirilir. Bir fonksiyonla işlem yapmak için bunun MATLAB ortamında veya program içinde tanıtılması veya çağrılması gerekir. Daha önceki bölümlerde de çeşitli şekillerde bazı fonksiyonlar tanıtılmış olup burada kısaca burada fonksiyon çağırma biçimleri verilecektir. Bir fonksiyonla hesaplama işleminde, işlem konusu giriş argümanı parantez içinde tanımlanır. Örneğin; max(a); tanıtımı ile max fonksiyonu önden tanıtımı yapılmış A giriş argümanına ait işlemi yerine getirir. Burada A basit bir sıkalar sayı, vektör veya matris olabilir. Bu örnekte max fonksiyonu A dizisindeki sayıların maksimum değerini bulur. Daha karmaşık işlemleri yerine getiren fonksiyonlarda giriş argümanı basit bir denklem veya başka bir fonksiyon da olabilir. Birden fazla giriş argümanı kullanılması halinde argümanlar arası virgül ile ayrılır. max(a,b); Fonksiyon çözüm çıkışı bir değişkene atanarak bir sonraki işlemden kullanılabilir veya saklanabilir. Aşağıda olduğu gibi, maxa=max(a,b); Fonksiyonlarla İşlem Yapmak Birden fazla çıkış argümanı kullanılması halinde çıkış argümanları köşeli parantezle tanımlanır. [maxa,location] = max(a); Çıkış argümanları virgüle ayrılabileceği gibi aralarına boşluk konarak da ayrılabilir. Yalnız giriş argümanları arasında mutlaka virgül kullanılmalıdır. Herhangi bir karakter seri girişi argümanı tek tırnak içinde tanılanır. disp('hello world'); Herhangi giriş ve çıkış argümanı gerektirmeyen fonksiyonlar sadece isimleri tanımlanır veya çağrılır. Örneğin clc fonksiyonu tanımı komut penceresinde (Command Window) yazıları siler-temizler. clf fonksiyonu tanımı figür penceresinde (Figure Window) grafiği siler. MATLAB' ta yer alan temel matematiksel işlem ve program hazırlamada kullanılan fonksiyonlar aşağıda olduğu gibi sınıflandırılabilir. M-dosyası olarak da bilinen fonksiyon dosyalarının hazırlanması ve kullanılması konusunda ayrıntılı bilgi bir sonraki bölümde yer almaktadır. Temel Matematiksel işlem fonksiyonları: Bu sınıfta temel matematiksel işlemlerin yürütülmesinde kullanılan trigonometrik, üstel; karmaşık ve yuvarlatma fonksiyonları yer alır. Bu fonksiyonların listesi ve işlevleri hakkında yardım almak için, help elfun Özel işlem fonksiyonları: Bu sınıfta bessel, gamma gibi özel ve koordinat dönüşüm fonksiyonları yer alır. Bu fonksiyonların listesi ve işlevleri hakkında yardım almak için, help specfun Matris ve lineer cebir işlem fonksiyonları: MATLAB'ın desteklediği matris fonksiyonları ile matris oluşturma ve matris işlemleri (toplama-çıkarma ve çarpma-bölme) yerine getirilir. Lineer cebir işlemleri ise lineer denklem çözümleri, özdeğer bulma, tekil değerler bulma ve matrisin çarpanlara ayırma (factorizations) işlemlerini kapsar. Bu fonksiyonların listesi ve işlevleri hakkında yardım almak için, help matfun Polinom ve aradeğer bulma işlem fonksiyonları: Bu fonksiyonlar ile bir polinomun köklerinin bulunması, değerlendirilmesi ve türev işlemleri yerine getirilir. Ayrıca bu sınıfta yer alan fonksiyonlar eğri uydurma ve kısmi kesirlere ayırma işlemlerinde de kullanılır. Bu fonksiyonların listesi ve işlevleri hakkında yardım almak için, help polyfun 3
Veri çözümleme ve istatistiksel işlem fonksiyonları: Bu sınıfta yer alan fonksiyonlar veri çözümlemesinde matris biçimindeki dizileri düzenleme, basit betimsel istatistiksel fonksiyon işlemleri, MATLAB içinde veri ön işlemlerini yerine getirme işlemlerini kapsar. Bunlara ilaveten bu fonksiyonlarla eğri uydurma, yinelemeli işlemler (regression), veri f iltreleme ve hızlı Fourier dönüşümü (FTT) işlemleri gibi basit istatistiksel işlemler de gerçeklenebilir. Bu fonksiyonların listesi ve işlevleri hakkında yardım almak için, help datafun Fonksiyon fonksiyonları: Bu fonksiyonlar sayısal diziler yerine matematiksel fonksiyonların çözüm işlemlerini yerine getirir. Bu fonksiyonların kullanımında kullanıcı tarafından hazırlanan özel fonksiyon dosyalarının hazırlanması gerekir. Bu sınıfta yer alan fonksiyonlar bir fonksiyonun eğrisini oluşturma, optimum yapma (enuygunlama) ve sayısal integral hesaplama işlemlerini yerine getirir. Bu fonksiyonların listesi ve işlevleri hakkında yardım almak için, help funfun MATLAB Düz Metin Dosyaları (Script) MATLAB programının en basit türü düz metin (script) programı olarak bilinir. Düz metin programı.m uzantılı bir dosya olup MATLAB komutları ve fonksiyon çağıran (tanımlayan) ardışık satırlardan oluşur. Bir düz metin programı komut hattından tekrarlı bir şekilde yürütülen hesaplamalar gibi geçerli bir dizi MATLAB komutunun yürütülmesini otomatik hale getirmek için kullanılır. Bu dosyalar çalışma alanındaki mevcut değişkenleri işler veya işlediği değişkenlerden yenilerini oluşturur. Bu dosyaların yürütülmesinden elde edilen sonuçlar da çalışma alanında kalır. Bu dosyalar MATLAB komut ortamında.m soneki kullanmaksızın dosya adını yazarak çalıştırılır. Düz metin program dosyası, yerleşik MATLAB fonksiyon ve kullanıcı tarafından oluşturulan fonksiyon dosyaları da dahil olmak üzere her hangi bir sayıda komut içerebilir. MATLAB Düz Metin Dosyaları (Script) Fonksiyon Dosyası Örneği Fonksiyon Dosyaları ve Programları Fonksiyon program dosyası ilk satırında function kelimesi bulunan.m sonekli bir M-dosyasıdır. Fonksiyon dosyası giriş argümanlarına karşılık gelen çözümü çıkış argümanları olarak sonuçlandırır. Fonksiyon dosyaları kendi çalışma alanındaki yerel değişkenleri işletir ve fonksiyon içinde yapılan hesaplamaların sonuçları çıkış argümanları olarak tanımlandığı taktirde alınır. MATLAB içinde bulunan tüm M-dosyaları fonksiyon dosyaları biçiminde olup bunlar M-dosyası olarak hazırlanan herhangi bir program içinde çağrılabilir. Gerçekte bunlar Fortran, BASIC, C ve benzeri programlama dillerinde kullanılan alt programlar (subroutines) gibi işlem görürler. Bir fonksiyon dosyası giriş ve çıkış argümanları tanımlayan bir fonksiyon (function) tanım satırı ile başlar. function kelimesinin bulunduğu bu satır olmadan bu dosya da düz metin dosyası gibi işlem görür. Fonksiyon dosyasının program başlığını teşkil eden fonksiyon tanım satırı aşağıda olduğu gibidir. function [çıkış değişkenleri]=fonksiyon_ismi(çıkış değişkenleri) Fonksiyon Dosyaları ve Programları function [çıkış değişkenleri]=fonksiyon_ismi(çıkış değişkenleri) Burada fonksiyon_ismi fonksiyonun yazıldığı dosya adı ile aynı (.m soneki olmaksızın) olmalıdır. Örneğin, eğer fonksiyon ismi deneme ise deneme ismi altında yazılmalı ve deneme.m olarak kaydedilmelidir. Herhangi bir fonksiyon M-dosyasının hazırlanması ile ilgili açıklayıcı bilgi aşağıda olduğu gibidir. function[x, y]=deneme(a, b, c) % Fonksiyon tanım satırı % H1 Line (H1 Satır) Fonksiyonun amacı belirleyen tek satırlık % Help Text (Yardım Metni) Fonksiyonun nasıl kullanılacağını % açıklayan bir veya daha fazla satırdan oluşan % yardım metni. Kullanıcı tarafında % "help <fonksiyon_isim>".yazılınca bu metin görüntülenir. % Fonksiyon gövdesi; normal olarak ilk boş satırdan sonra başlar % Comments (yorum) Fonksiyonun ne yaptığı, beklenen % girişler, beklenen çıkışlar hakkında açıklama % (dahili kullanım için). "help <fonksiyon_isim>". % yazılınca bu metin görüntülenmez x = deneme(a,b,c); % Fonksiyonunun MATLAB komut ortamında çağırılma (tanıtma) biçimi Fonksiyon dosyasının oluşturulmasını ve çalıştırılmasını aşağıda verilen basit bir örnekle açıklayabiliriz. Burada MATLAB'ta mevcut bir vektörün ortalamasını hesaplayan "ortalama.m" dosyasına ait bildirimler listesi verilmiştir. function y=ortalama(x) % ortalama(x) her bir % sütunda ortalama % değeri olan bir satır vektörüdür. [m,n]=size(x) if m = =1 m=n; end y=sum(x)/m; 4
Yukarıdaki şekilde, MATLAB Editor (metin düzenleyicisi) de hazırlanıp ve "ortalama.m" olarak saklanan (dosya adı ile fonksiyon adı aynı olmalı) yeni fonksiyon dosyasının komut penceresinde çağrılması herhangi bir MATLAB dosyasının çağırılmasından farklı değildir. Örneğin z, 1'den 99'a kadar tamsayıları gösteren bir vektör olsun, z=1:99; komutu ile z vektörü veya satır matrisi oluşturulmuş olur. Bu vektör içinde yer alan sayıların ortalama değeri ise aşağıda gösterildiği gibi "ortalama" ifadesini kullanmak suretiyle yapılır. veya ortalama(z) a=ortalama(z) Birinci durumda "z" matrisinde yer alan sayıların ortalama değerleri "ortalama.m" fonksiyon dosyası yolu ile hesaplanıp ekranda ans=50 şeklinde görüntülenecektir. İkinci durumda ise "z" ortalama değeri hesaplanıp görüntülendikten sonra aynı zamanda "a" değişkenine atanarak saklanacaktır. Bir fonksiyon dosyasının belli başlı bölümlerini ve özelliklerini örnek "ortalama.m" fonksiyon dosyası üzerinden aşağıdaki şekilde açıklayabiliriz. Birinci satır fonksiyon tanım satırı olup, fonksiyon adını, giriş ve çıkış argümanlarının sayısını ve sırasını tanımlar. Bu satır bulunmadığı zaman, dosya düz yazı dosyası gibi işlem görür. % işareti ile başlayan satırlar yardım açıklama satırlarıdır. Bu satırların biricisi 1.yardım (help 1) satırıdır. lookfor fonksiyonu veya tüm klasör yolu üzerinden yardım talebi olduğunda bir fonksiyon için MATLAB bu satırı görüntüler. Bundan sonraki satırlar yardım metnidir. Belli bir fonksiyon hakkında yardım istendiğinde MATLAB 1 yardım satırı ile birlikte tüm yardım metnini görüntüler. Bu satırlarda yazılanlar MATLAB tarafından icra edilmez. Fonksiyon gövdesi, % işareti ifade edilen satırlardan sonraki satırlardır. Fonksiyonun bu kısmı hesaplamaları yerine kod içerir ve herhangi çıkış argümanları için değerleri saptar. Fonksiyon dosyası içinde yer alan m, n ve y gibi değişkenler "ortalama" dosyasının çalışması sırasında kendi çalışma ortamında geçerli olup MATLAB çalışma ortamında görüntülenemez ve kullanılamazlar. MATLAB'ta bir fonksiyon içinde kullanılan değişkenler yerel (local) değişkenler ve MATLAB çalışma ortamında yer alan ve işletilen değişkenler de genel (global) değişkenler adını alır. Hesaplatılması gereken değişkenlerin fonksiyon dosyası içinde yer alan değişkenler cinsinden atanması şart değildir. Örneğimizde 1 den 99 a kadar olan tam sayılar, fonksiyon dosyası içinde yer alan x cinsinden değil de z cinsinden atanmıştır. Veriler x cinsinden de veya z dışındaki bir karakter olarak da atanabilirdi. 1 den 99 a kadar sayıları içeren z vektörü, "ortalama" içine geçirilerek veya kopya edilerek onun x adı ile bilinen yerel değişkeni haline gelir. Benzer şekilde çıkış argümanında fonksiyon dosyasında tanımlanan karakterle aynı olması gerekmez. Örneğimizde hesaplanan sonuç "a" şeklinde bir değişkene atanmıştır ki bu "ortalama" fonksiyon dosyasında "y" ile belirtilen bir değişkene atanmaktadır. Fonksiyon dosyaları hakkında daha ayrıntılı bilgi alma ve çeşitli MATLAB fonksiyon dosyalarını incelemek için MATLAB ortamında edit fonsiyon_adı yazılarak editörde yazım ve hazırlanış biçimleri görüntülenebilir. Yalnız bunların değiştirilmemesi gerekir. 5