7.4.. diff Türev Alma Fonksiyonu >> syms x >> A=3*x^4+x^-3*x A = 3*x^4+x^-3*x >> diff(a) // A fonksiyonunun türevini alır. 1*x^3+*x-3 >> diff(a,) // A fonksiyonunun türevini kere alır. 36*x^+ ÖRNEK: >> syms x >> f1=cos(x)^; >> diff(f1) -*cos(x)*sin(x) ÖRNEK: >> syms x >> syms y >> F=x^3+x^-3*y; >> diff(f,x) // F fonksiyonunun x e göre türevini alır. 3*x^+*x >> diff(f,y) // F fonksiyonunun y ye göre türevini alır. -3 >> diff(f,x,) // F fonksiyonunun x e göre. türevini alır. 6*x+ >> diff(f,y,) // F fonksiyonunun y ye göre. türevini alır. 0 1
7.4.3. İntegral Alma Fonksiyonları function myfun(x) 1./(x.^3-*x-5) // bu iki satır m-file (File New M-File) de yazılır. // Aşağıdaki quad bu fonksiyonun altsınırı 0 üst sınırı olan // integral sonucunu hesaplar. >> Q = quad(@myfun,0,) //Quad simpson yöntemine göre integral alır. ÖRNEK: dblquad iki katlı integral alma fonksiyonu dblquad pi pi x.cos y integralini çözer. 0 pi function dy=fonk1(x,y) dy=*x*cos(y)^ >> dblquad('fonk1',0,pi,-pi,pi) 19.739 7.4.4. dsolve Diferensiyel Denklem Çözüm Fonksiyonları d y y Matlab da gösterimi Dy şeklindedir. dx y dy Matlab da gösterimi Dy şeklindedir. dx (1+t^). dy +*t*y=cost diferansiyel denkleminin çözümü için; dt >> k=dsolve('(1+t^)*dy+*t*y=cost(t)') // ' ' lar arasındaki k diferensiyel denklemini çözer. k = (Int(cost(t),t)+C1)/(1+t^) // genel çözümü verir. >> pretty(k) // k diferansiyel denkleminin C ye bağlı çözümünü matematiksel olarak yazar. / cost(t) dt + C1 / ------------------- 1 + t
Alıştırma Soruları: Aşağıdaki dif.denklemleri dsolve komutu ile çözünüz. MATLAB ta ; lnx log(x), x y -y +y= e.lnx y -y -3*y = 1 1 e y +3y +y= 1 x 1 e y +y = 1 sin x x x e exp(x) ve log10 x = log10(x) şeklinde ifade edilir. 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 Columns 1 through 1.0000 1.0300 Columns 1 through 3 1.0000 1.0300 1.0600 3
Columns 1 through 4 1.0000 1.0300 1.0600 1.0900 Columns 1 through 5 1.0000 1.0300 1.0600 1.0900 1.100 Columns 1 through 6 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 Columns 1 through 7 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 Columns 1 through 8 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 Columns 1 through 9 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 1.400 Columns 1 through 10 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 1.400 1.700 Columns 1 through 11 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 1.400 1.700 1.3000 Euler Çözümü x y 0 1.0000 0.0300 1.0300 0.0600 1.0600 0.0900 1.0900 0.100 1.100 0.1500 1.1500 0.1800 1.1800 0.100 1.100 0.400 1.400 0.700 1.700 0.3000 1.3000 1.4 1.35 1.3 1.5 1. 1.15 1.1 1.05 1 0 0.05 0.1 0.15 0. 0.5 0.3 0.35 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)); k=h*(y(i)+k1/-(x(i)+h/)); k3=h*(y(i)+k/-(x(i)+h/)); k4=h*(y(i)+k3-(x(i)+h)); y(i+1)=y(i)+(k1+*k+*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 Columns 1 through 1.0000 1.0300 Columns 1 through 3 1.0000 1.0300 1.0600 Columns 1 through 4 1.0000 1.0300 1.0600 1.0900 Columns 1 through 5 1.0000 1.0300 1.0600 1.0900 1.100 5
Columns 1 through 6 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 Columns 1 through 7 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 Columns 1 through 8 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 Columns 1 through 9 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 1.400 Columns 1 through 10 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 1.400 1.700 Columns 1 through 11 1.0000 1.0300 1.0600 1.0900 1.100 1.1500 1.1800 1.100 1.400 1.700 1.3000 x y 0 1.0000 0.0300 1.0300 0.0600 1.0600 0.0900 1.0900 0.100 1.100 0.1500 1.1500 0.1800 1.1800 0.100 1.100 0.400 1.400 0.700 1.700 0.3000 1.3000 1.4 1.35 1.3 1.5 1. 1.15 1.1 1.05 1 0 0.05 0.1 0.15 0. 0.5 0.3 0.35 6
ÖRNEK: ode3 komutu. 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]=ode3( fonksiyon adı,[t0 tson],x0) M- file dosyasına. dereceden bir fonksiyon yazıp bunu ode3 komutuyla çözelim. dy Diferensiyel denklem fonksiyonumuz 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 1 y x C olup y(1)=1 için C=1/3 olup y= x olarak gerçek çözümü bulunur. 3 3 3 Şimdi ise ode3 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) d *x^; Bunu m-file( File New M-File) klasörüne gcoz olarak kaydedelim. Analitik çözümü ya=(/3)*x.^3+1/3 olarak tanımlayalım. Ode3 ile Matlab çözüm komutları şöyle olacaktır; >> [x ysay] = ode3('gcoz',[1 3],1); >> [x ysay] 1.0000 1.0000 1.0400 1.083 1.81 1.568 1.481.751 1.681 3.104 1.881 4.4063.081 5.8947.81 7.7075.481 9.8769.681 1.4347.881 15.4131 3.0000 18.3333 7
Burada 1.sütun x e ait değerler,.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=(/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; 0 18 16 14 1 10 8 6 4 0 1 1. 1.4 1.6 1.8..4.6.8 3 Grafik incelendiğinde ode3 ile elde edilen sayısal çözüm değerlerinin( o ) sürekli çizgi şeklindeki analitik(gerçek) çözüm değerleri ile üst üste çakıştığı görülmektedir. Bu durum ode3 ile yapılan Matlab sayısal çözümünün hatasız olduğunu, çok başarılı bir çözüm olduğunu göstermektedir. 8