MAK 210 SAYISAL ANALİZ BÖLÜM 4- LİNEER OLMAYAN DENKLEMLERİN ÇÖZÜMÜ SORULAR ÇÖZÜMLER & MATLAB PROGRAMLAMA Doç. Dr. Ali Rıza YILDIZ Arş. Gör. Emre DEMİRCİ 1
4.1: Aşağıdaki verilen fonksiyonun belirten aralıklarda köklerinin olup olmadığını araştırınız. Kök varsa yarıya bölme yöntemi ile bulunuz. Çözüm 4.1: f x = e x 2x 2 = 0 x L = 1 y L = f x L = 1,2817 x R = 2 y R = f x R = 1,3890 y L y R < 0 olduğundan arada kök var. x M = X R + X L 2 f x = e x 2x 2 = 0 aralık [1,2] = 1,5 y M = f 1,5 = 0,5183 y L y M = 1,2817 0,5183 = 0,6643 > 0 x L = 1,5 y L = 05183 2
no x L x R x M y L y R y M 1 1 2 1.5-1.2817 1.3890-0.5183 2 1.5 2 1.75-0.5183 1.3890 0.2546 3 1.5 1.75 1.625-0.5183 0.2546-0.1715 4 1.625 1.75 1.6875-0.1715 0.2546 0.0309 5 1.625 1.6875 1.6562-0.1715 0.0309-0.0730 6 1.656 1.6875 1.6719-0.0729 0.0309-0.0216 7 1.672 1.6875 1.6719-0.0216 0.0309 0.0045 3
Çözüm 4.1 - MATLAB: BURSA TECHNICAL UNIVERSITY (BTU) %Soru 4.1 %Yarıya Bölme ile fonksiyon kökü bulma clear,clc F=inline('exp(x)-2*x-2');% Fonksiyonu inline bir fonksiyon olarak tanimla Xl=1;Xr=2;% Verilen aralıkları gir imax=15;tol=0.01;% maximum iterasyon sayisini sec, tolerans degerini ata Yl=F(Xl);Yr=F(Xr);% fonksiyonun Xl ve Xr noktalarindaki degerini hesapla 4
if Yl*Yr>0 % eger isaretler ayni ise disp('belirtilen aralıkta kök yok') else disp('iter. Xl Xr Xm Yl Yr Ym tolerans') for i=1:imax % maximum iterasyon sayisinca Xm=(Xr+Xl)/2; % Xl ile Xr nin orta deðerini bul Ym=F(Xm); % fonksiyonun Xm degerini hesapla tole=abs(ym);% tolerans degerini Ym al Yl=F(Xl);Yr=F(Xr); fprintf('%3i %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n',i,Xl,Xr,Xm,Yl,Yr,Ym,tole) if Ym==0% Eger fonksiyonun degeri 0 a esit ise fprintf('gercek cozum x=%15.5f bulundu',xm)% Cozumu yazdir break 5
if tole<tol % Eger toleranstan kucuk deger bulunmus ise break % iterasyonu sonlandir if i==imax % Son iterasyon icin fprintf('%i itereasyonda cözüm elde edilemedi',imax) break % Xi ile a veya b' den hangisi arasinda isaret degisimi var ise % Diger ucu at if Yl*Ym <0 Xr=Xm;% xi' yi yeni b yap else Xl=Xm; % xi' yi yeni a yap 6
%Soru 4.1b %"fzero" komutunun kullanımı clear, clc F=inline('exp(x)-2*x-2'); %fonksiyonu tanımla x0=[1 2]; %Tahmin değerleri x=fzero(f,x0) 7
4.2: Aşağıdaki verilen fonksiyonun belirten aralıklarda köklerinin olup olmadığını araştırınız. Kök varsa lineer interpolasyon (Regula-Falsi) yöntemiyle bulunuz. TD=0,0001 Çözüm 4.1: f x = e x sin πx 3 = 0 aralık [ 3.5, 2.5] f x = e x sin πx 3 = 0 x L = 3,5 y L = f x L = 0,4698 x R = 2,5 y R = f x R = 0,5821 y L y R < 0 olduğundan arada kök var. x M = x L y R x R y L y R y L = 3,0534 y M = f 0,6079 = 0,0087 y L y M = 0,4698 0,0087 = 0,0041 > 0 x L = 3,0534 y L = 0,0087 8
no x L x R x M y L y R y M 1-3,5000-2,5000-3,0534-04698 0,5821-0,0087 2-3,0534-2,5000-2,8062-0,0087 0,5821 0,2620 3-3,0534-2,8062-3,0497-0,0087 0,2620-0,0047 4-3,0497-2,8062-3,0420-0,0047 0,2620 0,0038 5-3,0497-3,0420-3,0496-0,0047 0,0038-0,0046 6-3,0496-3,0420-3,0454-0,0046 0,0038 0,0001 9
Çözüm 4.2 - MATLAB: %Soru 4.2 %Lineer Interpolasyon ile fonksiyon kökü bulma clear,clc F=inline('exp(x)-sin(pi*x/3)');% Fonksiyonu inline bir fonksiyon olarak tanimla Xl=-3.5;Xr=-2.5;% Verilen aralıkları gir imax=15;tol=0.0001;% maximum iterasyon sayisini sec, tolerans degerini ata Yl=F(Xl);Yr=F(Xr);% fonksiyonun Xl ve Xr noktalarindaki degerini hesapla 10
if Yl*Yr>0 % eger isaretler ayni ise disp('belirtilen aralıkta kök yok') else disp('iter. Xl Xr Xm Yl Yr Ym tolerans') for i=1:imax % maximum iterasyon sayisinca Xm=(Xl*Yr-Xr*Yl)/(Yr-Yl); % Xm degerini hesapla Ym=F(Xm); % fonksiyonun Xm degerini hesapla tole=abs(ym);% tolerans degerini Ym al Yl=F(Xl);Yr=F(Xr); fprintf('%3i %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f %10.4f\n',i,Xl,Xr,Xm,Yl,Yr,Ym,tole) if Ym==0% Eger fonksiyonun degeri 0 a esit ise fprintf('gercek cozum x=%15.5f bulundu',xm)% Cozumu yazdir break 11
if tole<tol % Eger toleranstan kucuk deger bulunmus ise break % iterasyonu sonlandir if i==imax % Son iterasyon icin fprintf('%i itereasyonda cözüm elde edilemedi',imax) break % Xi ile a veya b' den hangisi arasinda isaret degisimi var ise % Diger ucu at if Yl*Ym <0 Xr=Xm;% xi' yi yeni b yap else Xl=Xm; % xi' yi yeni a yap 12
4.3: x 2 + y 2 = 4 y 2 sin x = 0 eğrilerinin kesim noktalarından birini basit iterasyonla bulunuz. (TD=0.01) Çözüm 4.3: y = 4 x 2 x = sin 1 y 2 x = 4 x 2 sin 1 2 x 0 = π 2 = 1,5708 (Başlangıç değeri) x = sin 1 4 x2 0 2 = 0,6675 Tolerans= 0,6675-(-1,5708)=2,2383 13
X F TD -1,5708 0,6675 2,2382 0,6675 1,2305 0,5630 1,2305 0,9081-0,3224 0,9081 1,0995 0,1914 1,0995 0,9887-0,1107 0,9887 1,0537 0,0649 1,0537 1,0159-0,0377 1,0159 1,0379 0,0220 1,0379 1,0251-0,0128 1,0251 1,0326 0,0075 1,0326 1,0282-0,0043 1,0282 1,0308 0,0025 1,0308 1,0293-0,0014 1,0293 1,0301 0,0008 14
4.3: ilk hızı sıfır olarak kini boşluğa bırakan bir paraşütçünün hızı V = gm c [1 e ct/m ] olup burada yer çekimi ivmesi g = 9.81m/s 2, paraşütçünün kütlesi m = 70 kg ve hava direnci c dir. t=10 s sonunda hız 40 m/s olduğuna göre hava direncini hesaplayınız. (Tolerans değeri=10-4 ) Çözüm 4.3: c = gm V 1 e ct/m verilenler yerine konulursa: c = 9,81 70 40 1 e c 10/70 c = 17,1675 1 e 0,1429c 15
Basit iterasyon ile çözüm yaparsak; c n+1 = 17,1675 1 e 0,1429c n c 0 = 10 başlangıç değeri ile iterasyona başlayalım c = 17,1675 1 e 0,1429 10 = 13.0551 İterasyona devam edersek: n c n 0 10 1 13,0551 2 14,5098 3 15,0087 4 15,1572 5 15,1994 6 15,2113 7 15,2146 8 15,2155 9 15,2158 10 15,2158 16
Çözüm 4.4 - MATLAB: %Basit Iterasyon ile denklem kökü bulma clear,clc F=inline('17.1675*(1-exp(-0.1429*x))');% Fonksiyonu inline bir fonksiyon olarak tanimla x(1)=10; % Baslangic degerini gir imax=15;td=0.0001;% maximum iterasyon sayisini sec, tolerans degerini ata disp( İter. C Tolerans') for i=1:imax x(i+1)=f(x(i)); tol=x(i+1)-x(i); fprintf('%3i %10.4f %10.4f\n',i,x(i+1), tol) if tol<td break 17
4.5: y = x 3 3x + 18 denkleminin bir kökünü Newton-Raphson yöntemi ile bulunuz. Çözüm 4.5: y = x 3 3x + 18 Newton-Raphson çözümü için fonksiyonun türevini alırsak: genel iterasyon denkleminde yazılırsa Başlangıç değeri olarak x 0 = 2 alalım y = 3x 2 3 x n+1 = x n x n 3 3x + 18 3x n 2 3 x 1 = 2 2 3 3 2 + 18 3 2 2 3 İterasyona devam edersek aşağıdaki değerler elde edilir: = 3,7778 18
n x n 0-2 1-3,7778 2-3,1604 3-3,0089 4-3,0 5-3,0 19
Çözüm 4.5 - MATLAB: BURSA TECHNICAL UNIVERSITY (BTU) %Newton Raphson yöntemi ile lineer olmayan denklem çözümü clear,clc syms x f=x^3-3*x+18;% Fonksiyonu tanimla ff=diff(f,x); %Fonksiyonun turevini al x0=-2; %Baslangic degeri TD=0.0001; %Tolerans Degeri tole=100; k=0; disp('iter. x tolerans') while abs(tole)>td X=x0-(subs(f,x,x0)/subs(ff,x,x0)); tole=x0-x; x0=x; k=k+1; fprintf('%2.0f %10.4f %10.4f\n',k,X,tole) 20
4.6: Bir otomobilin V hızıyla gitmesi için gerekli olan güç P = 4.2 + 0.45V + 0.0025V 2.8 (P kw, V[m/s]) ifadesiyle verilmektedir. 12m/s den daha büyük hızlarda bir motorun verdiği güç ise P = 60 + 8V 0.16V 2 Denklemiyle temsil edilebilmektedir. Bu motorla aracın hareket hızını ve motorun vereceği gücü %2 hassasiyetle hesaplayınız. Aracın tüketeceği maksimum gücü nasıl bulabileceğinizi belirtiniz. Çözüm 4.6: Problemi Genelleştirilmiş Newton Raphson yöntemi ile çözelim f 1 = P 4,2 0.45V 0,0025V 2,8 f 1P = 1 f 1V f 2 = P 60 8V + 0,16V 2 f 2P = 1 f 2V = 0,45 0,007V1,8 = 8 + 0,32V 21
Başlangıç değerleri olarak P 0 = 100 ve V 0 = 50 alalım f 1 = 69,06089 f 1P = 1 f 1V = 8,4528 f 2 = 40 f 2P = 1 f 2V = 8 olarak bulunur. Buna göre yeni P ve V değerleri P i+1 = P i + x = 100 69,6089 8 8,4528 40 1 8 8,4528 1 = 113,2961 V i+1 = V i + x = 50 + 69,6089 1 40 1 1 8 8,4528 1 = 43,3380 olarak elde edilir. Yeni bulunan değerler ile aynı işlemler tekrarlanır: 22
f 1 = 6,1635 f 1P = 1 f 1V = 6,6367 f 2 = 7,1013 f 2P = 1 f 2V = 5,8682 olarak bulunur. Buna göre yeni P ve V değerleri P i+1 = P i + x = 113,2961 6,1635 5,8682 6,6367 7,1013 1 5,8682 6,6367 1 = 112,4196 V i+1 = V i + x = 43,3380 + 6,1635 1 7,10113 1 1 5,8682 6,367 1 = 42,2772 Bulduğumuz son değerler %2 tolerans değerini sağlamaktadır. Buna göre aracın hareket hızı V = 42,2772 m/s, motorun vereceği güç P = 112,4196 kw olarak bulunur. 23
4.7: f x = x 5 3.5x 4 + 2.75x 3 + 2.125x 2 3.875x + 1.25 Polinomu veriliyor. Bu polinomun türevini, x = 1 noktasındaki değerini ve köklerini Matlab kodu yazarak bulunuz. 24
Çözüm 4.7 - MATLAB: BURSA TECHNICAL UNIVERSITY (BTU) %Soru 4.7 %Polinom hesaplama, polinom türevi alma, polinom kökü bulma clear,clc P=[1-3.5 2.75 2.125-3.875 1.25]; % Polinomun katasayıları sısrası ile tanımlanır disp('polinomun türevi:') turev=polyder(p) %"polyder" komutu ile polinomun türevi alınır disp('polinomun x=1''deki deðeri:') A=polyval(P,1) %"polyval" komutu ile polinomun istenilen noktadaki degeri bulunur disp('polinomun kökleri:') kokler=roots(p) %"roots" komutu ile polinomun kökleri bulunur 25