LİNEER OLMAYAN DENKLEMLER:

Lineer Olmayan Denklemlerin Çözümü
http://80.251.40.59/science.ankara.edu.tr/ozturk/Dersler/ist310/Ders2/Denklem.doc
Lineer denklemlere örnekler.
Bir bilinmeyenli lineer denklem:
2x+3=0
2 x  3 y  4
İki bilinmeyenli lineer denklem sistemi: 
5 x  6 y  8
Lineer olmayan denklemlere örnekler.
Bir bilinmeyenli lineer olmayan denklemler: * x 2  x  1  0
* x3  2 x  1  0
* x-sinx=0
 x 7  2 y  3
İki bilinmeyenli lineer olmayan denklem sistemi: 
4 x  5 y  6
Newton-Rapshon Yöntemi
a0 , b0  aralığında bir tane kökü ( f ( x )  0 ) bulunsun.
f (a0 )  f (b0 )  0 ve f :  a0 , b0   R fonksiyonu sürekli türevlenebilir olsun. x ‘ın bir
yaklaşık değeri x0 olsun. ( x0   a0 , b0 ) f ( x) fonksiyonunun ( x0 , f ( x0 )) noktasındaki teğetini
f ( x)  0 denkleminin
bulalım.
y  f ( x0 )  f ( x0 )  ( x  x0 )
1) ( x0 , f ( x0 )) noktasından f ( x) fonksiyonuna çizilen teğetin x eksenini kestiği yer x1 olmak
üzere, y=0 için
0  f ( x0 )  f ( x0 )  ( x1  x0 )
olup,
f ( x0 )
x1  x0 
f ( x0 )
olarak bulunur.
1
2) ( x1 , f ( x1 )) noktasından geçen teğet denkleminden teğetin x eksenini kestiği nokta x2 olmak
üzere,
x2  x1 
f ( x1 )
f ( x1 )
ve böyle devam ederek,
xn 1  xn 
f ( xn )
f ( xn )
bağıntısı ile x0 , x1 , x2 ,..., xn ,... dizisi elde edilir. Amaç bu dizinin yakınsak olması ve limitinin
de f ( x)  0 denkleminin çözümü olmasıdır.
Newton-Raphson Yöntemi
Eğer, bir  a0 , b0  aralığında,
i) f (a0 )  f (b0 )  0 ,
ii) x   a0 , b0  için f ( x ) ’in işareti aynı yani f ( x ) >0 veya f ( x ) <0,
iii) (a0 , f (a0 )) ve (b0 , f (b0 )) noktalarından çizilen teğetler x eksenini  a0 , b0 
aralığının içinde kesiyorsa f ( x)  0 denkleminin  a0 , b0  ’da bir tek x çözümü
vardır ve
xn 1  xn 
f ( xn )
, n  0,1, 2,3,...
f ( xn )
yinelemesi ile elede edilen x0 , x1 , x2 ,..., xn ,... dizisi x0  a0 , b0  için x ’a yakınsar.
Durdurma kuralı: x1 , x2 ,..., xn ,... dizisi,
a) belirlenen küçük bir  (  0) sayısı için | xn1  xn |  olduğunda,
b) belirlenen küçük bir  (  0) sayısı için | f ( xn1 ) |<  olduğunda,
c) belli bir adım sayısı sonrası,
durdurulur ve xn çözüm olarak alınır. Başka durdurma kuralları da
oluşturulabilir. Bir tanesi veya birkaç tanesi aynı anda uygulanabilir.
2
Örnek:
a  R için x3  a  0 denkleminin reel sayı olan çözümünü, başka bir ifade ile
değerini ( a  R için a ‘nın küpkökünü, a  0 için
bulalım.
f ( x)  x 3  a , x  R
3
3
a
a  0 ) Newton-Raphson yöntemi ile
f ( x)  3x 2  0
Algoritma: Başlangıç değer x0  a / 3
xn3  a 2 xn3  a 2 
a 

  xn 

2
2
3xn
3xn
3
2 xn xn 
Durdurma kuralı: | xn1  xn | 0.0001
xn1  xn 
,
x0 , x1 , x2 ,..., xn ,...
Matlab Programı:
>> a=27
>> x0=a/3;x1=2/3*(x0+a/(2*x0*x0));
>> while (abs(x1-x0)>=0.0001);x0=x1;x1=2/3*(x0+a/(2*x0*x0));end; x1
x1 =
3.0000
>> a=28
>> x0=a/3;x1=2/3*(x0+a/(2*x0*x0));
>> while (abs(x1-x0)>=0.0001);x0=x1;x1=2/3*(x0+a/(2*x0*x0));end; x1
x1 =
3.0366
>> 28^(1/3)
ans =
3.0366
>> a=-28
>> x0=a/3;x1=2/3*(x0+a/(2*x0*x0));
>> while (abs(x1-x0)>=0.0001);x0=x1;x1=2/3*(x0+a/(2*x0*x0));end; x1
x1 =
-3.0366
>> solve('x^3-27=0')
ans =
3
-3/2+3/2*i*3^(1/2)
-3/2-3/2*i*3^(1/2)
3
Lineer Olmayan Denklem Sistemleri
Denklem sayısı bilinmeyen sayısına eşit olan denklem sistemleri ile ilgileneceğiz.
Örnek:
 x1  2 x2  3  0
 2
2
2 x1  x2  5  0
Birinci denklemden x1 ‘i çekip ikinci denklemde yerine yazalım.
x1  3  2 x2
2  (3  2 x2 ) 2  x22  5  0
9 x22  24 x2  13  0
x2 için 2 kök var. Bunlar x2* =1.91068 x2* =0.755983 dır.
Denklem sisteminin iki çözümü vardır.
x1*  -0.8214
x2* =1.91068
ve
x1*  1.488
x2* =0.755983
>> [x1,x2]=solve('x1+2*x2-3=0','2*x1^2+x2^2-5=0');
>> [eval(x1) eval(x2)]
ans =
-0.8214 1.9107
1.4880 0.7560
4
Bilinmeyenler : x1 , x2 ,....., xn
Denklemler :
f1 ( x1 , x2 ,....., xn )  0
f 2 ( x1 , x2 ,....., xn )  0
f n ( x1 , x2 ,....., xn )  0
olsun.
 x1 
 
 x2 
Gösterimler: x   x3 
 
 
x 
 n



f 




f1 

f2 
f3 


f n 
,
 f1 ( x1 , x2 ,...., xn ) 
 f ( x , x ,...., x ) 
n 
f ( x)  f ( x1 ,..., xn )   2 1 2




 f n ( x1 , x2 ,...., xn ) 
Newton Yöntemi
 f1 ( x1 , x2 ,...., xn ) 
 f ( x , x ,...., x ) 
n 
f ( x)  f ( x1 ,..., xn )   2 1 2
olmak üzere, n bilinmeyenli denklem sistemi




 f n ( x1 , x2 ,...., xn ) 
f ( x)  0
olsun. Bu denklem sisteminin bir kökü  , yani f ( )  0 olsun.
Bu denklem sistemindeki f fonksiyonunun bir x 0 noktası komşuluğunda Taylor
açılımı,
f ( x 0 )
0
f ( x)  f ( x ) 
( x  x 0 )  ...
x
olsun. Burada,
 f1 ( x 0 ) f1 ( x 0 )
f1 ( x 0 ) 


x2
xn 
 x1
 f ( x 0 ) f 2 ( x 0 )
f 2 ( x 0 ) 
f ( x 0 )  2

  x1
x2
xn 
x




 f n ( x 0 ) f n ( x 0 )
f n ( x 0 ) 
 x
x2
xn 
1

5
olmak üzere, bu matrisi J ( x 0 ) ile gösterelim. x 0 noktası komşuluğundaki birinci dereceden
Taylor açılımı için,
f ( x)  f ( x 0 )  J ( x 0 )( x  x 0 )
yazılabilir.
Şimdi,
f ( x)  0
denklem sisteminde, f fonksiyonu yerine x0 noktası komşuluğundaki birinci dereceden
Taylor açılımı alınırsa,
f ( x 0 )  J ( x 0 )( x  x 0 )  0
denklem sistemi karşımıza çıkar. Bu denklem sistemi için
J ( x 0 )( x  x 0 )   f ( x 0 )
( x  x0 )    J ( x0 )
x  x0   J ( x0 )
olmak üzere,
1
1
f ( x0 )
f ( x0 )
x  x 0   J ( x 0 )  f ( x 0 ) değerini  kökü için bir yaklaşık değer olarak
1
kullanabiliriz. Hatta,

köküne daha iyi bir yaklaşım sağlamak amacıyla bu
x  x 0   J ( x 0 )  f ( x 0 ) değeri komşuluğunda f fonksiyonunu yeniden Taylor serisine açıp
1
yukarıda yapılanları tekrarlayabiliriz. Özetlenirse, x 0 noktasından başlanıp,
x k  x k 1   J ( x k 1 )  f ( x k 1 ) , k  1, 2,3,...
1
ardışık yinelemesi ile,
x 0 , x1 , x 2 ,..., x k ,...
dizisi elde edilir. Bu dizi bilinmeyen  köküne yakınsıyorsa, bir durdurma kuralı
tanımlanarak kök yaklaşık olarak bulunabilir. Özetle, Newton Yöntemi
Denklm sistemi:
f ( x)  0
Başlangıç değer (vektör):
x0
Ardışık yineleme (iterasyon): x k  x k 1   J ( x k 1 )  f ( x k 1 ) , k  1, 2,3,...
1
Durdurma kuralı:
xk  x
k 1

biçimindedir. Algoritmadaki matris inversi, varlık ve zayıf koşulluluk açısından problemler
yaratmaktadır. Birçok durumda Newton Yöntemi çözüme götürmemektedir. Newton
Yöntemindeki başlangıç değer çok dikkatli bir şekilde seçilmelidir.
6
Örnek:
 x1  2 x2  3  0
 2
2
2 x1  x2  5  0
denklem sisteminin köklerini yukarıda,
x1*  -0.8214
x1*  1.488
ve
x2* =1.91068
x2* =0.755983
olduğunu söyledik.
Bu kökleri bilmiyormuş gibi davranıp Newton Yöntemi ile bulmaya çalışalım. İkinci
denklemi göz önünde tutarak iki denklemi ayrı ayrı sağlayan noktalar kümesini iki boyutlu bir
koordinat sisteminde gösterelim.
>> x=-5:.1:5;
>> plot(x,(3-x)/2)
>> hold on
>> plot(x,sqrt(5-2*x.^2))
>> plot(x,-sqrt(5-2*x.^2))
>> plot([-5 5],[0 0])
>> plot([0 0],[-4 4])
4
3
2
1
0
-1
-2
-3
-4
-5
-4
-3
-2
-1
0
1
2
3
4
5
Elips ile doğrunun kesişme noktaları denklem sisteminin çözümleridir. Grafik, başlangıç
değer seçiminde faydalı olabilir.
7
Denklem sistemi,
 x1  2 x2  3  0
 2
2
2 x1  x2  5  0
ve
,
 x1  2 x2  3 
f ( x)   2
 ,
2
2 x1  x2  5
J ( x) 
f ( x )
 1

x
 4 x1
0 
f ( x)   
0 
2 
2 x2 
2 
 1
J ( xk )   k
, k  0,1, 2,...
k
 4 x1 2 x2 
olmak üzere, Newton Yöntemindeki algoritma:
Başlangıç değer:
Ardışık yineleme:
Durdurma kuralı:
x0
 x1k   x1k 1   1
2 
 k    k 1    k 1
2 x2k 1 
 x1   x1   4 x1
k 1
xk  x

1
 x1k 1  2 x2k 1  3

 k 1 2
 , k  1, 2,...
k 1 2
 2( x1 )  ( x2 )  5
max
dır.
Algoritmanın Matlab’da işleyişi:
 1
x 0    seçilsin.
2 
>> x=[-1
2];
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
-0.83333
1.9167
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
-0.82143
1.9107
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
-0.82137
1.9107
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
-0.82137
1.9107
x=
-0.82137
1.9107
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
-0.82137
1.9107
8
1
x 0    seçilsin.
1
>> x=[1;1]
x=
1
1
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
1.6667
0.66667
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
1.5
0.75
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
1.4881
0.75595
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
1.488
0.75598
>> x=x-inv([1 2;4*x(1) 2*x(2)])*[x(1)+2*x(2)-3;2*x(1)^2+x(2)^2-5]
x=
1.488
0.75598
Başlangıç değere bağlı olarak algoritma farklı yerlere yakınsadı, farklı kökler verdi.
Newton Yöntemindeki algoritma başlangıç değer ve Jakobiyen matrisinin tersinin alınması
işleminde zayıf koşulluluk problemine karşı çok duyarlı olup çok sık yanlış çözümler
vermekte veya yakınsamamaktadır. Zayıf koşulluluğa karşı tedbir olarak, Jakobiyen matrisin
tersi alınmadan önce köşegen elemanlarına çok küçük sayılar eklenebilir.
x k  x k 1   J ( x k 1 )  0.0001I  f ( x k 1 ) , k  1, 2,3,...
1
9
Aşağıdaki Matlab programını gözden geçiriniz.
function varargout = solve(varargin)
%SOLVE Symbolic solution of algebraic equations.
%
SOLVE('eqn1','eqn2',...,'eqnN')
%
SOLVE('eqn1','eqn2',...,'eqnN','var1,var2,...,varN')
%
SOLVE('eqn1','eqn2',...,'eqnN','var1','var2',...'varN')
%
%
The eqns are symbolic expressions or strings specifying equations. The
%
vars are symbolic variables or strings specifying the unknown variables.
%
SOLVE seeks zeros of the expressions or solutions of the equations.
%
If not specified, the unknowns in the system are determined by FINDSYM.
%
If no analytical solution is found and the number of equations equals
%
the number of dependent variables, a numeric solution is attempted.
%
%
Three different types of output are possible. For one equation and one
%
output, the resulting solution is returned, with multiple solutions to
%
a nonlinear equation in a symbolic vector. For several equations and
%
an equal number of outputs, the results are sorted in lexicographic
%
order and assigned to the outputs. For several equations and a single
%
output, a structure containing the solutions is returned.
%
%
Examples:
%
%
solve('p*sin(x) = r') chooses 'x' as the unknown and returns
%
%
ans =
%
asin(r/p)
%
%
[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0') returns
%
%
x =
%
[ 1]
%
[ 3]
%
%
y =
%
[
1]
%
[ -3/2]
%
%
S = solve('x^2*y^2 - 2*x - 1 = 0','x^2 - y^2 - 1 = 0') returns
%
the solutions in a structure.
%
%
S =
%
x: [8x1 sym]
%
y: [8x1 sym]
%
%
[u,v] = solve('a*u^2 + v^2 = 0','u - v = 1') regards 'a' as a
%
parameter and solves the two equations for u and v.
%
%
S = solve('a*u^2 + v^2','u - v = 1','a,u') regards 'v' as a
%
parameter, solves the two equations, and returns S.a and S.u.
%
%
[a,u,v] = solve('a*u^2 + v^2','u - v = 1','a^2 - 5*a + 6') solves
%
the three equations for a, u and v.
%
%
See also DSOLVE.
%
%
Copyright 1993-2003 The MathWorks, Inc.
$Revision: 1.21.4.2 $ $Date: 2004/04/16 22:23:29 $
% Set the Explicit solution (for equations of order 4 or less)
% option on in the Maple Workspace.
maple('_EnvExplicit := true;');
10
% Collect input arguments together in either equation or variable lists.
eqns = [];
vars = [];
for k = 1:nargin
v = varargin{k};
if ~isempty(eqns) & all(isstrprop(v,'alphanum') ...
| v == '_' | v == ',' | v == ' ')
v(v == ' ') = [];
vars = [vars ',' v];
else
[t,stat] = maple(v);
if stat
error('symbolic:solve:errmsg1', ...
''' %s '' is not a valid expression or equation.',v)
end
if ~isempty(t)
eqns = [eqns ',' t];
end
end
end
if isempty(eqns)
warning('symbolic:solve:warnmsg1','List of equations is empty.')
varargout = cell(1,nargout);
varargout{1} = sym([]);
return
else
eqns(1) = '{'; eqns(end+1) = '}';
end
neqns = sum(commas(eqns)) + 1;
% Determine default variables and sort variable list.
if isempty(vars)
vars = ['[' findsym(sym(eqns),neqns) ']'];
else
vars(1) = '['; vars(end+1) = ']';
end
v = vars;
[vars,stat] = maple('sort',v);
if stat
error('symbolic:solve:errmsg2', ...
''' %s '' is not a valid variable list.',v)
end
vars(1) = '{'; vars(end) = '}';
nvars = sum(commas(vars)) + 1;
if neqns ~= nvars
warning('symbolic:solve:warnmsg2', ...
'%d equations in %d variables.',neqns,nvars)
end
11
% Seek analytic solution.
[R,stat] = maple('solve',eqns,vars);
% If no analytic solution, seek numerical solution.
% First determine the total number of variables in the equations.
seqns = eqns;
seqns(1) = '['; seqns(end) = ']'; seqns = sym(seqns);
total_vars = length(sym([ '[' findsym(seqns) ']' ]));
% Maple's FSOLVE can only be used if the total number of variables
% (total_vars) is equal to the number of variables being solved
% for (nvars).
if (isempty(R) & (nvars == neqns)) & (nvars == total_vars)
[R,stat] = maple('fsolve',eqns,vars);
end
if stat
error('symbolic:solve:errmsg3',R)
end
% If still no solution, give up.
if isempty(R) | findstr(R,'fsolve')
warning('symbolic:solve:warnmsg3','Explicit solution could not be
found.');
varargout = cell(1,nargout);
varargout{1} = sym([]);
return
end
% Expand any RootOf.
while
k =
p =
q =
s =
t =
e =
~isempty(findstr(R,'RootOf'))
min(findstr(R,'RootOf'));
findstr(R,'{'); p = max(p(p<k));
findstr(R,'}'); q = min(q(q>k));
R(p:q);
s(min(findstr(s,'RootOf'))+6:end);
min(find(cumsum((t=='(')-(t==')'))==0));
% RootOf with one argument, possibly an imbedded RootOf.
checks = s;
[s,stat] = maple('allvalues',s,'dependent');
if isequal(checks,s)
s = maple('evalf',s);
end
if isequal(checks,s)
error('symbolic:solve:errmsg4','Unable to find closed form
solution.')
end
R = [R(1:p-1) s R(q+1:end)];
end
% Parse the result.
12
if nvars == 1 & nargout <= 1
% One variable and at most one output.
% Return a single scalar or vector sym.
S = sym([]);
c = find(commas(R) | R == '}');
for p = find(R == '=')
q = min(c(c>p));
t = trim(R(p+1:q-1)); % The solution (xk)
S = [S; sym(t)];
end
varargout{1} = S;
else
% Several variables.
% Create a skeleton structure.
c = [1 find(commas(vars)) length(vars)];
S = [];
for j = 1:nvars
v = trim(vars(c(j)+1:c(j+1)-1));
S = setfield(S,v,[]);
end
% Complete the structure.
c = [1 find(commas(R) | R == '{' | R == '}') length(R)];
for p = find(R == '=')
q = max(c(c<p));
v = trim(R(q+1:p-1)); % The variable (x)
q = min(c(c>p));
t = trim(R(p+1:q-1)); % The solution (xk)
S = setfield(S,v,[getfield(S,v); sym(t)]);
end
if nargout <= 1
% At most one output, return the structure.
varargout{1} = S;
elseif nargout == nvars
% Same number of outputs as variables.
% Match results in lexicographic order to outputs.
v = fieldnames(S);
for j = 1:nvars
varargout{j} = getfield(S,v{j});
end
else
error('symbolic:dsolve:errmsg5', ...
'%d variables does not match %d outputs.',nvars,nargout)
end
end
%------------------------function s = trim(s);
%TRIM TRIM(s) deletes any leading or trailing blanks.
while s(1) == ' ', s(1) = []; end
while s(end) == ' ', s(end) = []; end
%------------------------function c = commas(s)
%COMMAS COMMAS(s) is true for commas not inside parentheses.
p = cumsum((s == '(') - (s == ')'));
c = (s == ',') & (p == 0);
13
14