You are on page 1of 7

Lineer Olmayan Denklem Sistemlerinin zm

Lineer olmayan denklem ve denklem sistemlerinin zm iin Newton-Raphson, Secant, Bisection (ikiye
blme kural), Regula Falsi (yer deitirme) gibi birok nmerik yntem vardr. Matlab ortamnda bu
yntemlerin program kodlar kullanlabilecei gibi hazr baz fonksiyonlarla zm yaplabilmektedir.
Bunlardan fzero, fsolve, solve, optimset vb en yaygn kullanlanlardandr.

8.5.1. fzero Fonksiyonu


fzero fonksiyonu, tek deikenli bir denklemin verilen bir skaler say etrafndaki (balang tahmini)
kkn bulur yani onu sfr yapan deeri hesaplar. Genel yazm format
fzero(fonk,xo)

eklindedir. Burada fonk, fonksiyonu, xo ise kkn bulunaca say civardr. fonk ifadesi, string, anonim
(anonymous) ya da fonksiyon m-dosya eklinde olmaldr. fzero ile kullanlan fonksiyon f(x)=0 eklinde
olmaldr.

rnek-1: y = x3-2x-5 denkleminin x=2 civarndaki kkn bulunuz.


1.yol: Anonim fonksiyon kullanm:

>> f = @(x) x.^3-2*x-5;


>> y = fzero(f,2)
y =
2.0946

veya aadaki gibi direkt olarak da yazlabilir.

>> y = fzero(@(x) x.^3-2*x-5, 2)


y =
2.0946

2.yol: m-dosya kullanm: nce ifadeyi m-dosya eklinde yaznz ve ayn adla (burada fun1.m gibi)
kaydediniz.

function f = fun1(x)
f = x.^3-2*x-5;

sonra aadaki komut satrn yaznz

>> y = fzero(@fun1,2)
y =
2.0946

Not: Bu konuda fzeroda kullanlan @ iareti Matlabde fonksiyon tutamac (function handle) olarak
adlandrlr ve iki trl kullanm vardr:

- @fonksiyon_ad (m-dosya eklinde kullanlr)


- @(argmanlistesi)anonim_fonksiyon_ifadesi

3.yol: string (karakter) ifade kullanm:


>> f = 'x.^3-2*x-5'; >> f = inline('x^3-2*x-5');
>> y = fzero(f,2) >> y = fzero(f,2)
y = y =
2.0946 2.0946

veya
> fzero('x.^3-2*x-5',2)
ans =
2.0946

rnek-2: y = x2 - ex denkleminin x = 0 civarndaki kkn bulunuz.

>> f = fzero('x^2-exp(x)',0)
f =
-0.7035

rnek-3: y = x - e2x +2 denkleminin x = 5 civarndaki kkn bulunuz.

>> fzero('x-exp(2*x)+2',5)
ans =
0.4475

Benzer ekilde y = x - e2x +2 denkleminin x = -5 civarndaki kkn bulunuz.

>> fzero('x-exp(2*x)+2',-5)
ans =
-1.9810

rnek-4: y = x x 1 / 3 - 2 denkleminin x = 0.5 civarndaki kkn bulunuz.

Kk bulma ileminde balang deerini doru veremezseniz sonu alamazsnz. Aadaki rnekte
iterasyon ilemlerinin adm adm nasl olduu da gsterilmitir. nce 0.5 civarnda sonra da 2 civarnda
kk aranmtr.

>> ops=optimset('Display','iter')
>> [x,fx]=fzero('x-x^(1/3)-2',0.5,ops)

Search for an interval around 0.5 containing a sign change:


Func-count left f(left) right f(right) Procedure
1 0.5 -2.2937 0.5 -2.2937 initial
3 0.485858 -2.30029 0.514142 -2.28697 search
5 0.48 -2.30297 0.52 -2.28415 search
7 0.471716 -2.30673 0.528284 -2.28011 search
9 0.46 -2.31194 0.54 -2.27433 search
11 0.443431 -2.31913 0.556569 -2.266 search
13 0.42 -2.32889 0.58 -2.25396 search
15 0.386863 -2.34179 0.613137 -2.23641 search
17 0.34 -2.35795 0.66 -2.21066 search
19 0.273726 -2.37556 0.726274 -2.1726 search
21 0.18 -2.38462 0.82 -2.11599 search
23 0.0474517 -2.31458 0.952548 -2.03138 search
Exiting fzero: aborting search for an interval containing a sign change
because complex function value encountered during search.
(Function value at -0.14 is -2.3996-0.44968i.)
Check function or try again with a different starting value.
x =
NaN
fx =
NaN

Grld gibi sonu vermedi. imdi x = 2 balang deeri ile ilem yapalm.
>> [x,fx]=fzero('x-x^(1/3)-2',2,ops)

Search for an interval around 2 containing a sign change:


Func-count left f(left) right f(right) Procedure
1 2 -1.25992 2 -1.25992 initial
3 1.94343 -1.3045 2.05657 -1.21512 search
5 1.92 -1.32289 2.08 -1.1965 search
7 1.88686 -1.34884 2.11314 -1.17011 search
9 1.84 -1.38539 2.16 -1.13266 search
11 1.77373 -1.43677 2.22627 -1.07947 search
13 1.68 -1.50878 2.32 -1.00382 search
15 1.54745 -1.60921 2.45255 -0.896019 search
17 1.36 -1.74793 2.64 -0.742085 search
19 1.0949 -1.93578 2.9051 -0.521781 search
21 0.72 -2.17628 3.28 -0.205792 search
23 0.189807 -2.38489 3.81019 0.248309 search

Search for a zero in the interval [0.18981, 3.8102]:


Func-count x f(x) Procedure
23 3.81019 0.248309 initial
24 3.46879 -0.0449751 interpolation
25 3.52115 -0.000199025 interpolation
26 3.52138 8.69532e-009 interpolation
27 3.52138 -3.19744e-014 interpolation
28 3.52138 -2.22045e-016 interpolation
29 3.52138 -2.22045e-016 interpolation

Zero found in the interval [0.189807, 3.81019]


x =
3.5214
fx =
-2.2204e-016

rnek-5: y = 0.1ex + sin(x) 5 = x denkleminin x = 0 ve x = 5 civarndaki kkn bulunuz.

ncelikle denklemi f(x)=0 ekline getiriniz, sonra kkn bulunuz.

>> f = fzero('0.1*exp(x) + sin(x) -5 - x',5)


f =
4.6699

>> f = fzero('0.1*exp(x) + sin(x) -5 - x',0)


f =
-4.1516

Grlecei gibi lineer olmayan denklemlerde farkl balang deerleri iin farkl kkler bulabilirsiniz.

Kk bulma ilemini grafiksel olarak grmek iin aadaki kodu grafn2.m olarak kaydedip altrnz.
Grafik ekranndaki steki grafik normal izim, alttaki ise fonksiyonun sfr olduu yerin bytlm
grafiidir.

x = 0:0.01:5;
f = 0.1*exp(x) + sin(x) - 5 - x;
subplot(2,1,1)
plot(x,f)
xlabel('x'); ylabel('f(x)');
grid on

subplot(2,1,2)
plot(x,f)
axis([4.6,4.7, -1, 1])
xlabel('x'); ylabel('f(x)');
grid on
8.5.2. fsolve Fonksiyonu
fsolve fonksiyonu, birka deikenli lineer olmayan denklem ve denklem sisteminin zmn yapar.
Genel yazm format
fsolve(fonk,xo)

eklindedir. Burada fonk, fonksiyonu, xo ise kk bulmak iin balang deeridir. fonk ifadesi, anonim
(anonymous) ya da fonksiyon m-dosya eklinde olmaldr. Fonksiyonlar f(x)=0 eklinde olmaldr; burada f
ve x vektr eklinde olabilir.

rnek-1: 0.1ex + sin(x) - 5 = x eklindeki lineer olmayan denklemin kkn xo=5 balang deerini
temel alarak bulunuz
>> [x,fx] = fsolve('0.1*exp(x) + sin(x) -5 - x',5)
Optimization terminated: first-order optimality is less than options.TolFun.
x =
4.6699
fx =
2.2615e-011

Bu tr denklem zmlerinde ezplot('fonk') ile fonksiyonun grafiini izdirerek kklerin yani grafik
izgisinin x-eksenini kestii noktalar grebilirsiniz. rnek-1 iin
>> ezplot('0.1*exp(x) + sin(x) -5 - x')

komutu ile grafiini izidrebilirsiniz.

rnek-2: Aadaki lineer olmayan denklem sisteminin kkn xo=[-5 -5 ] balang deerlerini temel
alarak bulunuz
f1(x1,x2) = 2x1-x2-e-x1
f2(x1,x2) = -x1+2x2-e-x2

Cevap:
nce denklem sistemini bir fonksiyon m-dosyas eklinde yazarak nlinf1.m adyla kaydediniz.

function F = nlinf1(x)
F = [2*x(1) - x(2) - exp(-x(1));
-x(1) + 2*x(2) - exp(-x(2))];
>> x0 = [-5; -5]; % zm iin balang tahmini
>> [x,fval] = fsolve(@nlinf1,x0)
Optimization terminated: first-order optimality is less than options.TolFun.
x =
0.5671
0.5671
fval =
1.0e-006 *
-0.4059
-0.4059

Cevap: x1 = 0.5671 ve x2 = 0.5671 eklindedir.

rnek-3: Aadaki lineer olmayan denklem sisteminin kkn xo = [0 0 ] ve xo = [-5 0 ] balang


deerlerini temel alarak bulunuz
f1(x,y) : y = -x-3
f2(x,y) : x2+y2 = 17

Cevap:
nce denklem sistemini f (x,y) = 0 ekline getiriniz ve bir fonksiyon m-dosyas eklinde yazarak nlinf2.m
adyla kaydediniz.

function F = nlinf2(x)
F = [x(2)+x(1)+3 ; x(1)^2+x(2)^2-17];
>> x0 = [0;0]; % zm iin balang tahmini
>> [ck,fval] = fsolve(@nlinf2,x0)
Optimizer appears to be converging to a minimum that is not a root:
Sum of squares of the function values is > sqrt(options.TolFun).
Try again with a new starting point.

ck =
-2.8742
-2.8742
fval =
-2.7484
-0.4781

imdi dier balang deerleri iin zm araynz.


>> x0=[-5;0];
>> [ck,fval] = fsolve(@nlinf2,x0)
Optimization terminated: first-order optimality is less than options.TolFun.
ck =
-4.0000
1.0000
fval =
1.0e-007 *
0.0000
0.1633

Burada ck deikeni zm kmesi ksaltmas olarak kulanlmtr ve sonuta x = -4 ve y = 1 cevaptr.

8.5.3. solve Fonksiyonu


solve fonksiyonu, herhangi bir lineer veya lineer olmayan denklem ve denklem sisteminin zmn
yapar. Genel yazm format
solve('denklem1','denklem2','. . .')

eklindedir. Denklem ifadeleri f(x)=0 eklinde olmak zorunda deildir. Her ne kadar sembolik denklem
zmleri sunmasyla beraber nmerik sonu ta vermektedir.
rnek-1: 0.1ex + sin(x) - 5 = x denkleminin kkn bulunuz.
>> eq1 = '0.1*exp(x)+sin(x)-5=x';
>> [x] = solve(eq1)
x =
-4.1515936788037046341400951202097

! Ancak grlecei gibi negatif kkn buldu oysa yukardaki zmde grdnz zere bir de pozitif
kk vardr. Denklemin grafiini izdirerek sfr geii civarndaki kkn fsolve ya da fzero bulmak
gerekir.

rnek-2: x2 + 2xy = 0 ve x2 x + y = 2 denklem sisteminin zm kmesini bulunuz.

>> [x,y]=solve('x^2+2*x*y=0','x^2-x+y=2')
x =
0
3/4+1/4*41^(1/2)
3/4-1/4*41^(1/2)

y =
2
-3/8-1/8*41^(1/2)
-3/8+1/8*41^(1/2)

>> double([x,y])
ans =
0 2.0000
2.3508 -1.1754
-0.8508 0.4254

={ (x = 0 , y = 2) , (x = 2.35, y = -1.17), (x = -0.85 , y = 0.42)}

rnek-3: sinx+ey = 0 ve x+y = 2 denklem sisteminin zm kmesini bulunuz.


>> [x,y]=solve('sin(x)-exp(y)=0','x+y=2')
x =
2.2549571848750966919825951949202

y =
-.2549571848750966919825951949202

>> double([x,y])
ans =
2.2550 -0.2550

={x = 2.25 , y = -0.25}

rnek-4: x2 - e (x-1) = 0 denkleminin zm kmesini bulunuz.


>> solve('x^2-exp(x-1)')
ans =
-2*lambertw(-1,-1/2*exp(-1/2))
-2*lambertw(1/2*exp(-1/2))

>> double(ans)
ans =
1.0000
3.5129
-0.4777
={1, 3.5, -0.47}

rnek-5: Aadaki denklem sisteminin zm kmesini bulunuz.


x12 - x2 = 0.25
x12 + x22 = 1

Cevap:
>> [x1,x2]=solve('x1^2-x2=0.25','-x1^2+x2^2=1')
x1 =
-1.4052561586385554955493348980068
1.4052561586385554955493348980068
-.68901732299818779599728492840056*i
.68901732299818779599728492840056*i

x2 =
1.7247448713915890490986420373529
1.7247448713915890490986420373529
-.72474487139158904909864203735294
-.72474487139158904909864203735294

>> double([x1,x2])
ans =
-1.4053 1.7247
1.4053 1.7247
0 - 0.6890i -0.7247
0 + 0.6890i -0.7247

You might also like