Sembolik değişken tanımlama... 1 İfadeleri daha görsel biçimde görme... 2 Türev alma... 2 Integral alma... 3 Limit alma... 4 Sembolik fonksiyonları çizdirme... 5 Sembolik ifadeleri basitleştirme... 9 Sembolik denklem çözme... 9 Çok bilinmeyenli sembolik denklemler... 9 Diferansiyel denklem çözme... 12 Çok bilinmeyenli diferansiyel denklemler... 13 Laplace dönüşümü... 14 Ters Laplace dönüşümü... 15 Diğer dönüşümler... 16 Sembolik ifadelerde değişkenlere değer verme... 16 Çok değişken içeren sembolik ifadelerde değişkenlere değer verme:... 17 Sembolik matrisler... 18 Sembolik matris işlemleri 1... 18 Sembolik matris işlemleri 2... 20 Sembolik fonksiyonlarla interaktif işlem yapmak için bir araç (funtool)... 21 Sembolik değişken tanımlama a, t, x ve y değişkenlerini sembolik olarak tanımlayalım ve değişken listesinde görelim: syms a t x y whos Name Size Bytes Class Attributes a 1x1 112 sym t 1x1 112 sym x 1x1 112 sym y 1x1 112 sym Sembolik değişkenler ile her türlü hesap yapılabilir, bu değişkenler kullanılarak başka değişkenler oluşturulabilir: f = exp(-2*t) g = sin(3*t)/(3*t) h = x^2+y^3; f =
exp(-2*t) g = sin(3*t)/(3*t) İfadeleri daha görsel biçimde görme pretty komutu ile ifadelerin daha görsel biçimde formatlanarak ekrana yazdırılmasını sağlayabiliriz: pretty(f) pretty(g) pretty(h) exp(-2 t) sin(3 t) -------- 3 t 2 3 x + y Türev alma diff komutu ile türev alınabilir: dfdt = diff(f) dgdt = diff(g) dfdt = -2*exp(-2*t) dgdt = cos(3*t)/t - sin(3*t)/(3*t^2) Yüksek dereceli türevler: dfdt2 = diff(f,2) % İkinci türev dfdt3 = diff(f,3) % Üçüncü türev dfdt10 = diff(f,10) % Onuncu türev dfdt2 = 4*exp(-2*t)
dfdt3 = -8*exp(-2*t) dfdt10 = 1024*exp(-2*t) Birden fazla değişken varsa, hangi değişkene göre türev alınacağını belirtebiliriz: dhdx = diff(h,x) dhdy = diff(h,y) dhdx = 2*x dhdy = 3*y^2 Integral alma int komutu ile integral alınabilir: fi = int(f) gi = int(g) fi = -exp(-2*t)/2 gi = sinint(3*t)/3 Yine integralin de hangi değişkene göre alınacağını belirtelibiliriz: hix = int(h,x) hiy = int(h,y) hix = x^3/3 + x*y^3 hiy =
x^2*y + y^4/4 Belirli integral aldırma: fi = int(f,0,1) gi = int(g,1,2) hix = int(h,x,-1,2) hiy = int(h,y,-1,2) fi = 1/2 - exp(-2)/2 gi = sinint(6)/3 - sinint(3)/3 hix = 3*y^3 + 3 hiy = 3*x^2 + 15/4 Limit alma limit komutu ile limit bulunabilir: f0 = limit(f,0) % t 0'a giderken f'nin limiti finf = limit(f,inf) % t sonsuza giderken f'nin limiti g0 = limit(f,0) % t 0'a giderken g'nin limiti ginf = limit(f,inf) % t sonsuza giderken g'nin limiti f0 = 1 finf = 0 g0 = 1
ginf = 0 Yine limitin de hangi değişkene göre alınacağını belirtelibiliriz: hx2 = limit(h,x,2) hy3 = limit(h,y,3) hx2 = y^3 + 4 hy3 = x^2 + 27 Sembolik fonksiyonları çizdirme İki boyutlu çizimler ezplot(f); % f'yi çizdir ezplot(f,[-1 1]); % f'yi istenilen aralıkta çizdir
ezplot(g); % g'yi çizdir
ezplot(g, [2 4]); % g'yi istenilen aralıkta çizdir Üç boyutlu çizimler ezsurf(h); % h'yi çizdir
ezsurf(h, [-1 1-2 2]); % h'yi x [-1,1] ve y [-2,2] aralığında çizdir
Sembolik ifadeleri basitleştirme Aşağıdaki ifadede normalde olduğundan paydaki ile sadeleşebilir. Yine basitleştirmesi yapılabilir. f = (x^2-1)/(x-1)+cos(x)^2+sin(x)^2; pretty(f); 2 2 2 x - 1 cos(x) + sin(x) + ------ x - 1 MATLAB'da sembolik ifadeleri basitleştirmek için simplify kullanabiliriz: simplify(f) x + 2 Sembolik denklem çözme Tek bilinmeyenli denklem çözme xs = solve('x^2-9=0') xs = -3 3 xs = solve('sin(x)=1/2') xs = pi/6 (5*pi)/6 Çok bilinmeyenli sembolik denklemler İki bilinmeyenli iki denklem çözdürelim: [xs,ys] = solve('3*x+5*y=9','2*x+3*y=5') xs =
-2 ys = 3 Alternatif notasyon S = solve('3*x+5*y=9','2*x+3*y=5') % Tüm değişkenler için çözümü S'ye yaz S = x: [1x1 sym] y: [1x1 sym] S.x % x için çözüm -2 S.y % y için çözüm 3 Üç bilinmeyeli üç denklem çözdürelim: eq1 = 'x+y*z=-5'; eq2 = '2*x^2+3*y-z=-7'; eq3 = 'x*y^2*z=12'; S = solve(eq1,eq2,eq3) % Tüm değişkenler için çözümü S'ye yaz S = x: [5x1 sym] y: [5x1 sym] z: [5x1 sym]
Birkaç tane çözüm bulunduğuna dikkat edin. Bu çözümlerin hepsi de bu denklemleri sağlar. Örnek olarak birinci çözümün doğruluğunu kontrol edelim. x, y ve z değişkenlerine birinci çözüm değerlerini verelim: x = S.x(1) y = S.y(1) z = S.z(1) x = 1 y = -2 z = 3 Birinci denklemin sol tarafını hesaplayalım, sağ tarafa (-5) eşit çıkmalı x+y*z -5 İkinci denklemin sol tarafını hesaplayalım, sağ tarafa (-7) eşit çıkmalı 2*x^2+3*y-z -7 Üçüncü denklemin sol tarafını hesaplayalım, sağ tarafa (12) eşit çıkmalı x*y^2*z 12
Diğer çözümler için de benzer şekilde sağlama yapabiliriz. Diferansiyel denklem çözme dsolve komutu ile diferansiyel denklemler çözülebilir. Bunun için iki yaklaşım izlenebilir. Birinci yöntemde önce zamana bağlı bir değişken şu şekilde tanımlanır: syms x(t) Burada değişkeni 'ye bağlı, yani 'nin bir fonksyonu olarak düşünülebilir. Bu fonksiyonun türevini belirmek için diff komutunu kullanarak bir diferansiyel denklem oluşturularak çözdürülebilir. Örneğin denklemini için çözdürelim: dsolve(diff(x) == -3*x) C5*exp(-3*t) = atama komutu olduğundan diferansiyel denklemdeki eşitliği belirtmek için == kullanıldığına dikkat ediniz. Ayrıca denkeml için ilk koşul vermediğimiz için çözümde bir C sabiti var. Eğer ilk koşul da vermek istersek (mesela ilk koşul verelim) dsolve(diff(x) == -3*x, x(0)==1) exp(-3*t) denklemini ve için çözdürelim. Türeve bağlı ilk koşulu verebilmek için önce türev fonksiyonunu oluşturmalıyız: Dx = diff(x); % x'in türev fonksiyonunu Dx değişkenine atayalım dsolve(diff(x,2)-4*diff(x)+5*x==1,x(0)==1,dx(0)==0) % İstenilen ilk değerler için çözdürelim (4*exp(2*t)*cos(t))/5 - (8*exp(2*t)*sin(t))/5 + 1/5 Türevsel denklem çözdürmek için ikinci yaklaşım da şudur: Sembolik değişkenleri içeren ifadeleri metin şeklinde ifade edebiliriz. Metin içerisinde türevi belirtmek için D harfi kullanılır. İkinci türev D2, üçüncü türev D3... şeklinde belirtilir. MATLAB bu metin ifadelerini kendi içinde sembolik ifadelere çevirerek işlem yapar. Metin içerisinde geçen değişkenlerin daha öncesinde syms ile tanımlanmasına gerek yoktur. Örneğin denklemini için çözdürelim:
dsolve('dx = -3*x') C5*exp(-3*t) İlk koşul vermediğimiz için çözümde bir C sabiti var. Eğer ilk koşul da vermek istersek (mesela ilk koşul verelim) x = dsolve('dx = -3*x','x(0) = 1') x = exp(-3*t) denklemini ve için çözdürelim dsolve('d2x-4*dx+5*x=1','x(0)=1','dx(0)=0') (4*exp(2*t)*cos(t))/5 - (8*exp(2*t)*sin(t))/5 + 1/5 dsolve normalde bağımsız değişkeni zaman (t) olarak alır. Bağımsız değişkene başka bir şey demek istersek onu da parametre olarak belirtebiliriz. Mesela bağımsız değişken olsun ve denkleminden 'yi çözdürelim: dsolve('dx = -3*x','s') C12*exp(-3*s) Yukarıda verilen iki yaklaşım (bağımlı değişken tanımlama ve metin tabanlı yaklaşım) teoride eşdeğerdir, birbiri yerine kullanılabilir. Fakat problem tipine göre pratikte bir metot diğerine göre daha kodlama açısından daha avantajlı olabilir, tercih programcıya aittir. Çok bilinmeyenli diferansiyel denklemler Çok bilinmeyenli diferansiyel denklemleri de normal denklemleri çözdürdüğümüze benzer çekilde çözdürebiliriz. Örneğin
denklemlerini ilk koşullar ve olmak üzere çözdürelim: S = dsolve('dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1') S = y: [1x1 sym] x: [1x1 sym] S.x % x(t) için çözüm sin(t) S.y % y(t) için çözüm cos(t) Laplace dönüşümü laplace komutu ikl sembolik fonksiyonların Laplace dönüşümü alınabilir. Örneğin birim dürtü fonksiyonu için Laplace dönüşümü: syms t F = laplace(dirac(t)) % dirac = birim dürtü F = 1 Birim basamak fonksiyonu için Laplace dönüşümü: F = laplace(heaviside(t)) % heaviside = birim basamak F = 1/s
Rampa fonksiyonu için Laplace dönüşümü: f = int(heaviside(t)); % rampa, birim basamağın integralidir F = laplace(f) F = 1/(2*s^2) + laplace(t*sign(t), t, s)/2 Sinüs ve kosinüs fonksiyonları için Laplace dönüşümü syms w F = laplace( sin(w*t) ) F = w/(s^2 + w^2) F = laplace( cos(w*t) ) F = s/(s^2 + w^2) Ters Laplace dönüşümü ilaplace komutu ile ters Laplace dönüşümü alınabilir. Örneğin: syms s; f = ilaplace(1/(s+2)) f = exp(-2*t) f = ilaplace(3/(s^2+9)) f = sin(3*t) f = ilaplace(s/(s^2+9))
f = cos(3*t) F = 1/(s^2*(s+1)*(s+2)); pretty(f); % Fonksiyonu güzel formatlanmış olarak görelim 1 ------------------ 2 s (s + 1) (s + 2) f = ilaplace(1/(s^2*(s+1)*(s+2))); pretty(f); % Sonucu güzel formatlanmış olarak görelim t exp(-2 t) 3 - + exp(-t) - --------- - - 2 4 4 Laplace ve ters Laplace dönüşümü birbirinin tersidir. f'nin Laplace'ını alırsak yine F'yi elde ederiz: laplace(f) 1/(s + 1) - 1/(4*(s + 2)) - 3/(4*s) + 1/(2*s^2) Eşit olduklarını görebilmek için sonucu basitleştirelim ve güzel formatlanmıl bir biçimde görelim pretty(simplify(laplace(f))) 1 ----------------- 2 2 s (s + 3 s + 2) Diğer dönüşümler Laplace dönüşümüne benzer şekilde başka faydalı sembolik dönüşümler, örneğin Fourier ve z- dönüşümleri ve tersleri de MATLAB'da kolayca gerçekleştirebilir. Detaylı bilgi ve örnekler için: doc fourier, doc ifourier, doc ztrans, doc iztrans ile ilgili yardım dosyalarına ulaşabilirsiniz. Sembolik ifadelerde değişkenlere değer verme subs komutu ile sembolik ifadede bir değişkene nümerik bir değer verebiliriz.
syms x f = x^3+x^2+x+4 f = x^3 + x^2 + x + 4 f ifadesindeki sembolik değişken (x) yerine 2 koyalım subs(f,2) 18 subs komutu ile bir sembolik değişkeni başka bir sembolik değişkenle veya ifadeyle de değiştirebiliriz: syms y f2 = subs(f,y) % f'de x yerine y koyarak f2 değişkenini oluştur f2 = y^3 + y^2 + y + 4 f3 = subs(f,(x+1)) % f'de x yerine x+1 koyarak f3 değişkenini oluştur f3 = x + (x + 1)^2 + (x + 1)^3 + 5 Not: f3'teki terimleri açmak için expand komutunu kullanabiliriz: expand(f3) x^3 + 4*x^2 + 6*x + 7 Çok değişken içeren sembolik ifadelerde değişkenlere değer verme: syms x y; f = x*y
f = x*y f'de x yerine 2, y yerine de 3 koyalım: subs(f, {x, y}, {2,3}) 6 f'de x yerine x+2, y yerine de y^3 koyalım: subs(f, {x, y}, {x+2,y^3}) y^3*(x + 2) Sembolik matrisler Sembolik değişkenler kullanılarak matrisler de oluşturulabilir: syms x; A = [1 x;2 x^2+1] B = [x^2+1 4*x; x-3 1] A = [ 1, x] [ 2, x^2 + 1] B = [ x^2 + 1, 4*x] [ x - 3, 1] Sembolik matris işlemleri 1 Nümerik matrislerle yaptığımız işlemlerin çoğunu sembolik matrislerde de yapabiliriz. Örneğin matris toplamı
C = A+B C = [ x^2 + 2, 5*x] [ x - 1, x^2 + 2] Matris çarpımı C = A*B C = [ x*(x - 3) + x^2 + 1, 5*x] [ (x^2 + 1)*(x - 3) + 2*x^2 + 2, x^2 + 8*x + 1] Matris tersi Ai = inv(a) Ai = [ (x^2 + 1)/(x^2-2*x + 1), -x/(x^2-2*x + 1)] [ -2/(x^2-2*x + 1), 1/(x^2-2*x + 1)] Matris tersinin doğruluğunu kontrol edelim Ai*A [ (x^2 + 1)/(x^2-2*x + 1) - (2*x)/(x^2-2*x + 1), 0] [ 0, (x^2 + 1)/(x^2-2*x + 1) - (2*x)/(x^2-2*x + 1)] Bu sonuç aslında birim matrise eşit ama MATLAB sadeleştirmeleri yapmamış olduğu için böyle olduğu anlaşılmıyor. Bu durumlarda simplify kullanabiliriz: simplify(ai*a) [ 1, 0]
[ 0, 1] Sembolik matris işlemleri 2 Özdeğer buldurma eig(a) x^2/2 - (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + 1 (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + x^2/2 + 1 Determinant det(a) x^2-2*x + 1 Karakteristik polinom charpoly(a) [ 1, - x^2-2, x^2-2*x + 1] Matris exponansiyeli expm(a) [ (x^2*exp(x^2/2 - (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + 1) - x^2*exp((x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + x^2/2 + 1) + exp(x^2/2 - (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + 1)*(x*(x + 2)*(x^2-2*x + 4))^(1/2) + exp((x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + x^2/2 + 1)*(x*(x + 2)*(x^2-2*x + 4))^(1/2))/(2*(x*(x + 2)*(x^2-2*x + 4))^(1/2)), -(x*exp(x^2/2 - (x^4 + 8*x)^(1/2)/2 + 1) - x*exp((x^4 + 8*x)^(1/2)/2 + x^2/2 + 1))/(x^4 + 8*x)^(1/2)] [ -(2*(exp(x^2/2 - (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + 1) - exp((x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + x^2/2 + 1)))/(x*(x + 2)*(x^2-2*x + 4))^(1/2), (x^2*exp((x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + x^2/2 + 1) - x^2*exp(x^2/2 - (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + 1) + exp(x^2/2 - (x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + 1)*(x*(x + 2)*(x^2-2*x + 4))^(1/2) + exp((x*(x + 2)*(x^2-2*x + 4))^(1/2)/2 + x^2/2 + 1)*(x*(x + 2)*(x^2-2*x +
4))^(1/2))/(2*(x*(x + 2)*(x^2-2*x + 4))^(1/2))] Sembolik fonksiyonlarla interaktif işlem yapmak için bir araç (funtool) funtool
Published with MATLAB R2015a