Contents Sembolik değişken tanımlama İfadeleri daha görsel biçimde görme Türev alma Integral alma Limit alma Sembolik fonksiyonları çizdirme Sembolik ifadeleri basitleştirme Sembolik denklem çözme Çok bilinmeyenli sembolik denklemler Diferansiyel denklem çözme Çok bilinmeyenli diferansiyel denklemler Laplace dönüşümü Ters Laplace dönüşümü Diğer dönüşümler Sembolik ifadelerde değişkenlere değer verme Çok değişken içeren sembolik ifadelerde değişkenlere değer verme: Sembolik matrisler Sembolik matris işlemleri 1 Sembolik matris işlemleri 2 Sembolik fonksiyonlarla interaktif işlem yapmak için bir araç (funtool) 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 a t x y 1x1 1x1 1x1 1x1 Bytes 112 112 112 112 Class Attributes sym sym sym 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 = 1/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) 1 -------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 = -1/(2*exp(2*t)) 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 - 1/(2*exp(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 = finf g0 = ginf limit(f,0) % t = limit(f,inf) limit(f,0) % t = limit(f,inf) 0'a % t 0'a % t giderken f'nin limiti sonsuza giderken f'nin limiti giderken g'nin limiti 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 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 ile sadeleşebilir. MATLAB'da sembolik ifadeleri basitleştirmek için simplify kullanabiliriz: simplify(f) ans = 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 ans = -2 S.y % y için çözüm ans = 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 ans = -5 İkinci denklemin sol tarafını hesaplayalım, sağ tarafa (-7) eşit çıkmalı 2*x^2+3*y-z ans = -7 Üçüncü denklemin sol tarafını hesaplayalım, sağ tarafa (12) eşit çıkmalı x*y^2*z ans = 12 Diğer çözümler için de benzer şekilde sağlama yapabiliriz. Diferansiyel denklem çözme dsolve komutu ile diferansiyel denklemler çözülebilir. Türevi belirtmek için D harfi kullanılır. İkinci türev D2, üçüncü türev D3 ... şeklinde belirtilir. Örneğin denklemini için çözdürelim: dsolve('Dx = -3*x') ans = C126/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 = 1/exp(3*t) denklemini ve için çözdürelim dsolve('D2x-4*Dx+5*x=1','x(0)=1','Dx(0)=0') ans = (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') ans = C152/exp(3*s) Ç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 = x: [1x1 sym] y: [1x1 sym] S.x % x(t) için çözüm ans = sin(t) S.y % y(t) için çözüm ans = 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/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 = 1/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 1 1 3 - + ------ - ---------- - 2 exp(t) 4 exp(2 t) 4 Laplace ve ters Laplace dönüşümü birbirinin tersidir. f'nin Laplace'ını alırsak yine F'yi elde ederiz: laplace(f) ans = 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 s (s + 1) (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) ans = 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) ans = 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}) ans = 6 f'de x yerine x+2, y yerine de y^3 koyalım: subs(f, {x, y}, {x+2,y^3}) ans = 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 - 1)^2, -x/(x - 1)^2] [ -2/(x - 1)^2, 1/(x - 1)^2] Matris tersinin doğruluğunu kontrol edelim Ai*A ans = [ (x^2 + 1)/(x - 1)^2 - (2*x)/(x - 1)^2, 0] [ 1)^2] 0, (x^2 + 1)/(x - 1)^2 - (2*x)/(x - 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) ans = [ 1, 0] [ 0, 1] Sembolik matris işlemleri 2 Özdeğer buldurma eig(A) ans = x^2/2 - (x^4 + 8*x)^(1/2)/2 + 1 (x^4 + 8*x)^(1/2)/2 + x^2/2 + 1 Determinant det(A) ans = x^2 - 2*x + 1 Karakteristik polinom poly(A) ans = t^2 - t*(x^2 + 2) - 2*x + x^2 + 1 Matris exponansiyeli expm(A) ans = [ (2*exp(x^2/2 - (x^4 + 8*x)^(1/2)/2 + 1)*((x^4 + 8*x)^(1/2)/4 + x^2/4))/(x^4 + 8*x)^(1/2) + (2*exp((x^4 + 8*x)^(1/2)/2 + x^2/2 + 1)*((x^4 + 8*x)^(1/2)/4 - x^2/4))/(x^4 + 8*x)^(1/2), (2*exp((x^4 + 8*x)^(1/2)/2 + x^2/2 + 1)*((x^4 + 8*x)^(1/2)/4 - x^2/4)*((x^4 + 8*x)^(1/2)/4 + x^2/4))/(x^4 + 8*x)^(1/2) - (exp(x^2/2 - (x^4 + 8*x)^(1/2)/2 + 1)*((x^4 + 8*x)^(1/2) - x^2)*((x^4 + 8*x)^(1/2)/4 + x^2/4))/(2*(x^4 + 8*x)^(1/2))] [ (2*exp((x^4 + 8*x)^(1/2)/2 + x^2/2 + 1))/(x^4 + 8*x)^(1/2) - (2*exp(x^2/2 - (x^4 + 8*x)^(1/2)/2 + 1))/(x^4 + 8*x)^(1/2), (exp(x^2/2 - (x^4 + 8*x)^(1/2)/2 + 1)*((x^4 + 8*x)^(1/2) - x^2))/(2*(x^4 + 8*x)^(1/2)) + (2*exp((x^4 + 8*x)^(1/2)/2 + x^2/2 + 1)*((x^4 + 8*x)^(1/2)/4 + x^2/4))/(x^4 + 8*x)^(1/2)] Sembolik fonksiyonlarla interaktif işlem yapmak için bir araç (funtool) funtool Published with MATLAB® 7.9