7.4.2. diff Türev Alma Fonksiyonu
>> syms x
>> A=3*x^4+x^2-3*x A =
3*x^4+x^2-3*x
>> diff(A) // A fonksiyonunun türevini alır.
ans =
12*x^3+2*x-3
>> diff(A,2) // A fonksiyonunun türevini 2 kere alır.
ans = 36*x^2+2 ÖRNEK:
>> syms x
>> f1=cos(x)^2;
>> diff(f1) ans =
-2*cos(x)*sin(x)
ÖRNEK:
>> syms x
>> syms y
>> F=x^3+x^2-3*y;
>> diff(F,x) // F fonksiyonunun x e göre türevini alır.
ans = 3*x^2+2*x
>> diff(F,y) // F fonksiyonunun y ye göre türevini alır.
ans = -3
>> diff(F,x,2) // F fonksiyonunun x e göre 2. türevini alır.
ans = 6*x+2
>> diff(F,y,2) // F fonksiyonunun y ye göre 2. türevini alır.
ans =
0
7.4.3. İntegral Alma Fonksiyonları
function y = myfun(x) // bu iki satır m-file (FileNewM-File) de yazılır.
y = 1./(x.^3-2*x-5) // Aşağıdaki “quad” bu fonksiyonun altsınırı 0 üst sınırı 2 olan // integral sonucunu hesaplar.
>> Q = quad(@myfun,0,2) //Quad simpson yöntemine göre integral alır.
ÖRNEK: dblquad iki katlı integral alma fonksiyonu
dblquad
20
2 .cos integralini çözer.
pi pi
pi
x y
function dy=fonk1(x,y) dy=2*x*cos(y)^2
>> dblquad('fonk1',0,pi,-pi,pi) ans =
19.7392
7.4.4. dsolve Diferensiyel Denklem Çözüm Fonksiyonları
y” d y
2dx Matlab da gösterimi D2y şeklindedir.
y’ dy
dx Matlab da gösterimiDy şeklindedir.
(1+t^2). dy
dt +2*t*y=cost diferansiyel denkleminin çözümü için;
>> k=dsolve('(1+t^2)*Dy+2*t*y=cost(t)') // ' ' lar arasındaki k diferensiyel denklemini çözer.
k =
(Int(cost(t),t)+C1)/(1+t^2) // genel çözümü verir.
>> pretty(k) // k diferansiyel denkleminin C ye bağlı çözümünü matematiksel olarak yazar.
/ |
| cost(t) dt + C1 |
/
---
2
1 + t
Alıştırma Soruları: Aşağıdaki dif.denklemleri dsolve komutu ile çözünüz.
MATLAB’ta ; lnx log(x) , e
xexp(x) ve log x = log10(x) şeklinde ifade edilir.
10y”-2y’+y= e .lnx
xy”’-2y”-3*y’= 1 1 e
xy”+3y’+2y= 1
1 e
xy”+y’= 1
sin x
7.4.5. Euler Sayısal Yöntemiyle Diferensiyel Denklem Çözümü
y’= y-x diferansiyel denklemini y(0)=1 başlangıç şartıyla 0 x 0.3 aralığında 10 adımda Euler yöntemiyle çözelim.
Matlab’ta file new M-file diyerek aşağıdaki kodları yazalım.
%Euler Yöntemi
%y'=y-x ve y(0)=1 başlangıç değeri
%0<= x <= 0.3 aralığında Euler çözümü x0=0;
xn=0.3;
y0=1;
m=10;
h=(xn-x0)/m;
x=x0:h:xn;
y(1)=y0;
for i=1:m
y(i+1)=y(i)+h*(y(i)-x(i)) end
display(' Euler Çözümü') display(' x y') disp([x;y]')
plot(x,y)
daha sonra bu dosyayı
euler1
adıyla kaydedip Matlab ana ekranına (Command Window) euler1 yazalım.Ekran çıktımız şu şekilde olacaktır.
( Columns 1 y nin çözüm değerlerini göstermektedir. Son satır son çözüm değerlerini verir.)
>> euler1
y =
Columns 1 through 2
y =
Columns 1 through 4
1.0000 1.0300 1.0600 1.0900 y =
Columns 1 through 5
1.0000 1.0300 1.0600 1.0900 1.1200 y =
Columns 1 through 6
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 y =
Columns 1 through 7
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 y =
Columns 1 through 8
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 y =
Columns 1 through 9
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 1.2400 y =
Columns 1 through 10
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 1.2400 1.2700 y =
Columns 1 through 11
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 1.2400 1.2700 1.3000
Euler Çözümü x y 0 1.0000 0.0300 1.0300 0.0600 1.0600 0.0900 1.0900 0.1200 1.1200 0.1500 1.1500 0.1800 1.1800 0.2100 1.2100 0.2400 1.2400 0.2700 1.2700 0.3000 1.3000
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35
1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4
7.4.6. Runge-Kutta Sayısal Yöntemiyle Diferensiyel Denklem Çözümü
y’= y-x diferansiyel denklemini y(0)=1 başlangıç şartıyla 0 x 0.3 aralığında 10 adımda Runge-Kutta yöntemiyle çözelim.
Matlab’ta file new M-file diyerek aşağıdaki kodları yazalım.
%Euler örneğinin Runge-Kutta çözümü x0=0;
xn=0.3;
y0=1;
m=10;
h=(xn-x0)/m;
x=x0:h:xn;
y(1)=y0;
for i=1:m
k1=h*(y(i)-x(i));
k2=h*(y(i)+k1/2-(x(i)+h/2));
k3=h*(y(i)+k2/2-(x(i)+h/2));
k4=h*(y(i)+k3-(x(i)+h));
y(i+1)=y(i)+(k1+2*k2+2*k3+k4)/6 end
display(' x y') disp([x;y]')
plot(x,y)
daha sonra bu dosyayı
rungekutta1
adı altında kaydedip matlab ana ekranına (Command Window) rungekutta1 yazalım. Ekran çıktımız şu şekilde olacaktır.>> rungekutta1
y =
Columns 1 through 2 1.0000 1.0300
y =
Columns 1 through 3 1.0000 1.0300 1.0600
y =
Columns 1 through 4
1.0000 1.0300 1.0600 1.0900
y =
Columns 1 through 5
1.0000 1.0300 1.0600 1.0900 1.1200
y =
Columns 1 through 6
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 y =
Columns 1 through 7
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800
y =
Columns 1 through 8
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100
y =
Columns 1 through 9
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 1.2400
y =
Columns 1 through 10
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 1.2400 1.2700
y =
Columns 1 through 11
1.0000 1.0300 1.0600 1.0900 1.1200 1.1500 1.1800 1.2100 1.2400 1.2700 1.3000
x y 0 1.0000 0.0300 1.0300 0.0600 1.0600 0.0900 1.0900 0.1200 1.1200 0.1500 1.1500 0.1800 1.1800 0.2100 1.2100 0.2400 1.2400 0.2700 1.2700 0.3000 1.3000
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35
1 1.05 1.1 1.15 1.2 1.25 1.3 1.35 1.4
ÖRNEK: ode23 komutu 2. ve 3. mertebeden Runge-Kutta yaklaşımını, ode45 komutu 4. ve 5. mertebeden Runge-Kutta yaklaşımını kullanır. Ode fonksiyonunun kullanımı şöyledir:
[t x]=ode23(‘fonksiyon adı’,[t0 tson],x0)
M- file dosyasına 2. dereceden bir fonksiyon yazıp bunu ode23 komutuyla çözelim.
Diferensiyel denklem fonksiyonumuz dy 2
2. x olsun
dx
Bunun analitik(gerçek) çözümünü y(1)=1 başlangıç koşulu(x0=1,y0=1) altında, x in 1 ve 3 sınır değerleri arasında ise sayısal çözümünü bulalım.
Analitik(gerçek) çözüm: Diferensiyel denklem değişkenlerine ayrılabilen olduğundan sol ve sağ tarafının doğrudan integrali alındığında genel çözümü
3 3
2 2 1
olup y(1)=1 için C=1/3 olup y= olarak gerçek çözümü bulunur.
3 3 3
y x C x
Şimdi ise ode23 Matlab komutuyla Sayısal çözümünü bulalım: Öncelikle diferensiyel denklem fonksiyonunu bir function alt programıyla tanıtmamız gerekmektedir:
function dy=gcoz(x,y) dy = 2*x^2;
Bunu m-file( File New M-File) klasörüne gcoz olarak kaydedelim. Analitik çözümü ya=(2/3)*x.^3+1/3
olarak tanımlayalım. Ode23 ile Matlab çözüm komutları şöyle olacaktır;
>> [x ysay] = ode23('gcoz',[1 3],1);
>> [x ysay]
ans =
1.0000 1.0000
1.0400 1.0832
1.2281 1.5682
1.4281 2.2751
1.6281 3.2104
1.8281 4.4063
2.0281 5.8947
2.2281 7.7075
2.4281 9.8769
2.6281 12.4347
2.8281 15.4131
3.0000 18.3333
Burada 1.sütun x e ait değerler, 2.sütun ise ysay a ait y nin(dif. Denklemin) Sayısal çözüm
değerleridir. Şimdi Diferensiyel denklemin ysay Sayısal çözümünün ya Analitik(gerçek) çözümüne ne kadar yaklaştığını grafik üzerinde görelim.Aşağıdaki komutlar bu grafiğin çizimini gerçekleştirecektir:
>> ya=(2/3)*x . ^3+1/3; % Dif. Denklemin Analitik Çözümü
>> plot(x,ysay,x,ya,'o');% ysay ı çizgi ile ve ya yı o ile aynı grafikte çizen komut
>> xlabel('x');
>> ylabel('y=f(x)');
>> grid;
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
0 2 4 6 8 10 12 14 16 18 20