Transendent tenglamalarni taqribiy yechish usullari.
Chekli [a,b] oraliqda aniqlangan va uzluksiz f(x) funkiya berilgan bo’lib, uning birinchi va ikkinchi tartibli hosilalari shu oraliqda mavjud bo’lsin. Shu bilan birga [a,b] da f’(x) funksiya o’z ishorasini saqlasin.
f(x)=0 (1)
tenglama [a,b] oraliqda yagona yechimga ega bo’lsin va bu yechimni berilgan >0 aniqlikda topish talab qilingan bo’lsin. Quyida bu yechimni aniqlash uchun bir necha sonli usullar, ularning Paskal algoritmik tilida tuzilgan programmalarni keltiramiz.
Oraliqni teng ikkiga bo’lish usuli. [a,b] oraliqni x0=(a+b)/2 nuqta orqali ikkita teng [a,x0] va [x0,b] oraliqlarga ajratamiz. Agar a-x0 bo’lsa, x=x0 (1) tenglamaning aniqlikdagi taqribiy yechimi bo’ladi. Bu shart bajarilmasa, [a,x0] va [x0,b] oraliqlardan (1) tenglama ildizi joylashganini tanlab olamiz va uni [a1,b1] deb belgilaymiz. x1=(a1+b1)/2 nuqta yordamida [a1,b1] oraliqni ikkita teng [a1,x1] va [x1,b1] oraliqlarga ajratamiz. a1-x1 bo’lsa, x=x1 (1) tenglamaning aniqlikdagi taqribiy yechimi bo’ladi, aks holda [a1,x1] va [x1,b1] oraliqlardan (1) tenglama ildizi joylashganini tanlab olamiz va uni [a2,b2] deb belgilaymiz. Bu oraliq uchun yuqoridagi hisoblashlar ketma-ketligini ai-xi (i=2,3,4,…) shart bajarilguncha davom ettiramiz. Natijada (1) tenglamaning x=xi taqribiy yechimini hosil qilamiz.
Misol. f(x)=x4-x3-2x2+3x-3 tenglamaning [-2;1] oraliqdagi ildizini =0,01 aniqlikda hisoblang.
Yechish. 7- qadamda a7=-1,7305 va b7=-1,7363 bo’lib, a7-b7=0,01 shart bajariladi.
(javob: =-1,73(0,01)).
Oraliqni teng ikkiga bo’lish usuliga Paskal tilida tuzilgan dastur matni:
program oraliq2; uses crt; {Oraliqni teng ikkiga bo’lish usuli}
var a,b,eps,x,fa,fc,c:real;
function f(x:real):real;
begin
f:= { f(x) funksiyasining ko’rinishi }
end;
begin clrscr;
write('a='); read(a);
write('b='); read(b);
write('eps='); read(eps);
fa:=f(a);
while abs(b-a)>eps do
begin
c:=(a+b)/2;
fc:=f(c);
if fa*fc<=0 then b:=c else begin a:=c; fa:=fc end;
end;
writeln('x=',c:10:4);
end.
Vatarlar usuli. Aniqlik uchun f(a)>0 ( f(a)<0 ) bo’lsin. A=A(a;f(a)), B=B(b;f(b)) nuqtalardan to’g’ri chiziq o’tkazamiz va bu to’g’ri chiziqni Ox o’qi bilan kesishish nuqtasini deb belgilaymiz. Agar |a-x1| bo’lsa, x=x1 (1) tenglamaning aniqlikdagi taqribiy yechimi bo’ladi. Bu shart bajarilmasa, b=x1 (a=x1) deb olamiz. A, B nuqtalardan to’g’ri chiziq o’tkazamiz va uning Ox o’qi bilan kesishish nuqtasini deb olamiz. Agar |x2-x1| shart bajarilsa, x=x2 (1) tenglamaning aniqlikdagi taqribiy yechimi bo’ladi, aks holda b=x2 (a=x2) deb olib, yuqoridagi amallar ketma-ketligini |xi-xi-1| (i=3,4,…) shart bajarilguncha davom ettiramiz. Natijada (1) tenglamaning x=xi taqribiy yechimini hosil qilamiz.
xn larning ketma-ket hisoblash formulasi quyidagi ko’rinishga ega bo’ladi:
Misol. tg(0,55x+0,1)-x2=0 tenglamaning [0,6;0,8] oraliqdagi ildizini =0,005 aniqlikda hisoblang.
Echish. x2-x1=0,002< bajariladi. x2=0,7517; x1=0,7417 bundan x=0,7517.
Vatarlar usuliga Paskal tilida tuzilgan dasturning ko’rinishi:
program vatar; uses crt; {Vatarlar usuli}
label 1,2;
var a,b,eps,x:real;
function f(x:real):real;
begin
f:= { f(x) funksiyasining ko’rinishi }
end;
begin clrscr;
write('a='); read(a);
write('b='); read(b);
write('eps='); read(eps);
2: x:=b;
x:=b-f(b)*(b-a)/(f(b)-f(a));
if abs(x-b)1 else begin b:=x; goto 2 end;
1: writeln('x=',x:8:4);
end.
Urinmalar usuli. [a,b] oraliqda f/(x) va f//(x) ning ishoralari o’zgarmasdan qolsin. f(x) funksiya grafigining V=V(b,f(b)) nuqtasidan urinma o’tkazamiz. Bu urinmaning Ox o’qi bilan kesishgan nuqtasini b1 deb belgilaymiz. f(x) funksiya grafigining V1=V1(b1,f(b1)) nuqtasidan yana urinma o’tkazamiz va bu urinmaning Ox o’qi bilan kesishgan nuqtasini b2 deb belgilaymiz. Bu jarayonni bir necha marta takrorlab, b1,b2,...,bn larni hosil qilamiz. shart bajarilganda hisoblash to’xtatiladi.
Misol. tg(0,55x+0,1)-x2=0 tenglamaning [0,6;0,8] oraliqdagi ildizini =0,005 aniqlikda hisoblang.
Echish. b2-b1=0,002; x=b2 =0,7503.
Urinmalar usuliga Paskal tilida tuzilgan dasturning ko’rinishi:
program urinma; uses crt; {Urinmalar usuli}
var x0,eps,x1,a:real;
function f(x:real):real;
begin
f:= { f(x) funksiyasining ko’rinishi }
end;
function fx(x:real):real;
begin
fx:= { f’(x) funksiyasining ko’rinishi}
end;
begin clrscr;
write('x0='); read(x0);
write('eps='); read(eps);
x1:=x0;
repeat
a:=f(x1)/fx(x1);
x1:=x1-a;
until abs(a)<
eps;
writeln('x=',x1:10:4);
end.
|