Contents Sembolik değişken tanımlama

advertisement
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
Download