Skaitliskās metodes

Skaitlikās metodēs

Ar divām metodēm aprēķināt un interpolēt:
1)
2)

Integrāļa aprēķināšana.

Ne vienmēr integrālim ir iespējams sameklēt primitīvo funkciju, vai arī tā ir ļoti sarežģīta.
Ja ir dots , tad izmanto dažādas integrāļu aprēķināšanas metodes, kuras visas pamatojas uz vienu ideju:
sadala intervālu (a;b) segmentos ar punktiem x1, x2 , … , xn-1 n daļās un tad integrālis būs visu šo segmentu laukumu summa.
Apzīmējumi:
Jāaprēķina: I = ;
Sadala intervālu [a,b] n vienādās daļās ar garumu ;
Tad katru dalījuma punktu var aprēķināt šādi:
xi = a+i h, kur i =0, 1, 2, .., n; yi = f(xi);

Kreisu taisnstūru metode.
Par kreiso taisnstūra formulu sauc sakarību:
(1)

Formulas ģeometriskā interpretācija:
Integrāļa vērtība ir aptuveni vienāda ar zīmējumā redzamo sarkano laukumu.
Formulas (1) precizitāte ir , kur .

Labo taisnstūru metode.
Par labo taisnstūra formulu sauc sakarību:
(2)

Formulas ģeometriskā interpretācija:

Integrāļa vērtība ir aptuveni vienāda ar zīmējumā redzamo zaļo laukumu.
Formulas (2) precizitāte ir , kur .

Vidējo taisnstūru metode.
Par vidējo taisnstūra formulu sauc sakarību:
, (3)
kur ;

Formulas ģeometriskā interpretācija:
Integrāļa vērtība ir aptuveni vienāda ar zīmējumā redzamo zilo laukumu.
Formulas (3) precizitāte ir , kur .

Trapeču metode.
Par trapeču formulu sauc sakarību:

(4)

Formulas ģeometriskā interpretācija:
Integrāļa vērtība ir aptuveni vienāda ar zīmējumā redzamo dzelteno laukumu.
Formulas (4) precizitāte ir , kur .

Interpolācija.

Pieņem, ka intervālā [x0, xn], interpolācijas punktos xi (i=0, 1, 2, …, n) ir zināma funkcijas y=f(x) vērtības f(xi). Funkcijas y=f(x) interpolējošo funkciju meklē polinomu p(x) veidā
, kur pj(x) ir n-tās pakāpes polinomi
ar šādām īpašībām ;
Tādā gadījumā tiek izpildīts interpolācijas nosacījums, ka polinomam f(x) mezglu punktos ir jāsakrīt vērtībām un , (i=0, 1, …, n).
Lai atrastu polinomu pj(x) analītisko veidu, ir nepieciešams meklēt tādus polinomus, kuri ir vienādi ar 0 mezglu punktos x0, x1, …,xj-1, xj+1,…, xn.
(tātad visos mezglu punktos izņemot xj, kurā pj(xj)=1).
Šādas īpašības piemīt polinomiem:
, kur
,

Apzīmē ar n+1 pakāpes polimomu, tad sākotnējo polinomu Ln(x) var pārrakstīt šādi:

Ln(x) ir Lagranža interpolācijas polinoms.
Kļūdas novērtējums:
, kur .

Integrēšana.
1. funkcija:
Izdarot aprēķinus izmantojot kreiso, labo, vidējo taisnstūru metodi un trapeces medodi ieguvu šādus rezultātus:

n kreiso taisnst. labo taisnst. vidējo taisnst. trapeču
10 0.42658320948 0.38102035794 0.40289897745 0.40380178371
50 0.40778011668 0.39866754637 0.40318766344 0.40322383153
100 0.40548389006 0.40092760491 0.40319670503 0.40320574749
1000 0.40342759371 0.40297196519 0.40319968902 0.40319977945
10000 0.40322250119 0.40317693834 0.40319971887 0.40319971977
32000 0.40320683841 0.40319260002 0.40319971912 0.40319971921

Aplūkojot tabulā esošos rezultātus ir redzams, ka pie n=10 (dalījumu punktu skaits) rezultāti rēķinot ar dažādām metodēm diezgan atšķiras, bet pie lielākām n vērtībām tie gandrīz sakrīt, kas arī bija sagaidāms.
Var ievērot, ka rezultāts ar kreiso taisnstūru metodi samazinās, bet ar labo taisnstūru metodi palielinās, ja palielina n. Tas izskaidrojams ar to ka funkcija apskatāmajā intervālā [/8 ; /4] strauji dilst.
Visātrāk (mazāku n) pie precīzā atrisinājuma noāk, ja risina ar vidējo taisnstūru metodi. To arī varēja gaidīt salīdzinot kļudas aprēķina formulas vidējo taisnstūru formulai un trapeču formulai .

2. funkcija:
Izdarot aprēķinus izmantojot kreiso, labo, vidējo taisnstūru metodi un trapeces medodi ieguvu šādus rezultātus:
n *kreiso taisnst. Labo taisnst. vidējo taisnst. *trapeču
10 -2.43816051020 -0.59609243579 -0.76782880837 -1.51712647300
50 -1.11363542700 -0.74522181212 -0.79576766326 -0.92942861956
100 -0.95470154513 -0.77049473769 -0.79923891555 -0.86259814141
1000 -0.81675432132 -0.79833364058 -0.80235981719 -0.80754398095
10000 -0.80399605658 -0.80215398851 -0.80267172764 -0.80307502254
30000 -0.80311796359 -0.80250394090 -0.80269482172 -0.80281095224

*( Reāli šo funkciju nav iespējams atrisināt ar kreiso taisnstūru un trapeču formulu, jo ln(0) nav definēta, tāpēc rezultāti kreisajo taisnstūru un trapeču formulai tika aprēķināti, ja a= x0 = 0.00000001  0.)

Aplūkojot tabulā esošos rezultātus ir redzams, ka pie n=10 (dalījumu punktu skaits) rezultāti rēķinot ar dažādām metodēm ļoti atšķiras, tie vel ļoti atšķiras ja n=50 un n=100, bet tomēr pie krietni lielākām n vērtībām tie gandrīz sakrīt. Lielo atšķirību var izskaidrot ar funkcijas ļoti straujo augšanu un tam ka funkcija asimptotiski tiecas uz 0.
Var ievērot, ka rezultāts ar kreiso taisnstūru metodi pieaug, bet ar labo taisnstūru metodi samazinās, ja palielina n. Tas izskaidrojams ar to ka funkcija apskatāmajā intervālā [0 ; 1] strauji aug.
Tāpat kā iepriekšējai funkcijai visstraujāk līdz precīzākam atrisinājumam nonāk, ja izmanto vidējo taisnstūru formulu, (pamatojumu skat. pie iepr. formulas).

Interpolācija.
Lagranža interpolācijas polinoms
/8 /6 /4
x 0.3927 0.5236 0.7854
f(x) 1.7460 1.1547 0.5857

1) Integrālim
f(x)=
Ņemu 3 punktus (skat. tabulu) un aprēķina Ln(x).
= 6.0017×2 – 10.0256x + 4.7572
Zīmējumā interpolējošā funkcija ir redzama ar zilo krāsu. Var secināt, ka meklējamā intervālā interpolējošā funkcija diezgan sakrīt ar doto.
X 0.1 0.5 1
f(x) -2.257 -0.375 0

2) Integrālim
f(x)=
Ņemu 3 punktus (skat. tabulu) un aprēķina Ln(x).
= -4.394×2 + 7.3405x – 2.947
Zīmējumā interpolējošā funkcija ir attēlota ar brūnu krāsu. Neskatoties uz to, ka polinoms tika veidots reāli izmantojot tikai 2 punktus, jo f(1)=0, tik un tā interpolējošās funkcijas grafiks apskatāmajā intervālā diezgan sakrīt ar doto funkciju.

Ņūtona interpolācijas polinoms.
Izmantojot galīgās diferences, jo mezglu punkti ir sakārtoti vienmērīgi.

x y y 2y
/8  0.3927 1.746 -0.7839 0.4763
0.5890 0.9621 -0.3763 –
/4  0.7854 0.5858 – –
1)
h = x1 – x0 =
= x2 – x1 = 0.19635,
n=3

=5.2866×2 – 9.1827x + 4.5368

x y y 2y
0 (0.0001) -9,210 8,836 -8,462
0.5 -0,374 0,374 –
1 0 – –
2)
h = x1 – x0 = x2 – x1 = 0.5,
n=3

=-16.924×2 + 26.134x – 9.210

Salīdzinot abu interpolāciju grafikus pirmajai funkcijai apskatāmajā intervēlā var teikt, ka abi interpolācijas polinomi ļoti tuvi apraksta doto funkciju. Toties otrajai funkcijai ar Ņūtona metodi ir jau diezgan liela atšķirība pie tā paša mezglu punktu skaita. Tas ir izskaidrojams ar to, ka funkcijai kreisā robeža nevar tika ņemta nevis 0, bet gan 0.0001 un ar to ka tika izmantoti tikai 3 mezglu punkti. Jāatzīmē, ka Ņūtona polinomam ir vieglāk palielināt mezglu punktu skaitu nekā Lagranza polinomam, jo to izdarot nevajag pārrēķināt visu izteiksmi.

Darbā izmantoto programmu teksti, kas sarakstīti PASCALā.
Šīs programmas izmēģināšanai var ielasīt no manas Interneta lapaspusītes: http://www.cs.fmf.lu.lv/~sd50014/study.html.

Funkcijas integrāļu aprēķināšanai.

{Kaspars Cikmacs 2Dzd1 sd50014}
{otrais praktiskais darbs}
{ 1) y=cos(x)/(sin(x)*(1+sin(x)))
2) y=cos(2*x)*ln(x)}
program integerali;
uses crt;
const {a=pi/8; b=pi/4; }a=0; b=1;
var n:integer;
beigt:char;f:text;

{Pirmaa funkcija}
{function fun(x:real):real;
begin
fun:=cos(x)/(sin(x)*(1+sin(x)));
end; }

{Otraa funkcija}
function fun(x:real):real;
begin
fun:=cos(2*x)*ln(x+0.00000001)
end;

function krtaisn(rn:integer;ra,rb:real):real;
var v, h:real;
i:integer;
begin
v:= 0; h:=(rb-ra)/rn;
for i:=0 to rn-1 do v:= v + fun(ra+i*h);
krtaisn:= h*v;
end;

function labtaisn(rn:integer;ra,rb:real):real;
var v, h:real;
i:integer;
begin
v:= 0; h:=(rb-ra)/rn;
for i:=1 to rn do v:= v + fun(ra+i*h);
labtaisn:= h*v;
end;

function vidtaisn(rn:integer;ra,rb:real):real;
var v, h:real;
i:integer;
begin
v:= 0; h:=(rb-ra)/rn;
for i:=0 to rn-1 do v:= v + fun(ra+i*h+h/2);
vidtaisn:= h*v;
end;

function trapece(rn:integer;ra,rb:real):real;
var v,h:real;
i:integer;
begin
v:=(fun(ra)+fun(rb))/2;
h:=(rb-ra)/rn;
for i:=1 to rn-1 do v:= v + fun(ra+i*h);
trapece:= h*v;
end;

begin
clrscr;
assign(f,’intatb.txt’);
rewrite(f);
repeat
write(‘Ievadiet n vertiibu pirmajai f-jai ):’);readln(n);
writeln(‘Atrisinaajumi ar 4 metodeem:’);
writeln(f,n,’,’,krtaisn(n,a,b),’,’,labtaisn(n,a,b),’,’,vidtaisn(n,a,b),’,’,trapece(n,a,b));
writeln(‘1. Ar kreiso taisnst.: ‘,krtaisn(n,a,b));
writeln(‘2. Ar labo taisnst. : ‘,labtaisn(n,a,b));
writeln(‘3. Ar videjo taisnst.: ‘,vidtaisn(n,a,b));
writeln(‘4. Ar trapecu : ‘,trapece(n,a,b));
write(‘Vai turpinaasi?(J/N)’);readln(beigt);
until beigt=’n’;
close(f);
end.

Funkcijas grafika zīmēšanai:
program zimfunkc;
{Programma vienadojuma sistemas grafiskai attelosanai}
uses graph,crt;
var x1,x2,y1,y2,color,i:integer;key:char; a:string;
sak,beig:real;x,solis,px,py:real;cx,cy,res:integer;
grDriver: Integer; grMode: Integer; ErrCode: Integer;
begin
grDriver := Detect; InitGraph(grDriver, grMode,”); ErrCode := GraphResult;
if ErrCode = grOk then
begin
sak:=0; beig:=1; solis:=0.0001;
res:=100; {resolution} cx:=250;cy:=20;{katras ass centrs}
{ssssssssssssssssssssssssssssssssssssss}
x:=sak;
for i:=1 to 7 do begin setcolor(3);
{yi}Line(0, cy-i*res, getmaxx, cy-i*res);{xi}line(cx+i*res, 0, cx+i*res,getmaxy);
{y-i}Line(0, cy+i*res, getmaxx, cy+i*res);{x-i}line(cx-i*res, 0, cx-i*res,getmaxy);
setcolor(10);
str(i,a);OutTextXY(cx+i*res+5,cy+5,a); OutTextXY(cx+5,cy-i*res+5,a);
str(i*-1,a);OutTextXY(cx-i*res+5,cy+5,a); OutTextXY(cx+5,cy+i*res+5,a); end;
{asis} setcolor(2); Line(0, cy, getmaxx, cy); line(cx, 0, cx,getmaxy);
setcolor(10); OutTextXY(cx+5,cy+5,’0′);
OutTextXY(cx-15,5,’Y’); OutTextXY(getmaxx-10,cy-15,’X’); setcolor(5);
{Line(cx+trunc((pi/8)*res), 0, cx+trunc((pi/8)*res),getmaxy);
Line(cx+trunc((pi/4)*res), 0, cx+trunc((pi/4)*res),getmaxy);}
repeat
x:=x+solis;
{PutPixel(trunc(x*res+cx), trunc(cy-(cos(2*x)*ln(x+0.0000001))*res), 4);}
PutPixel(trunc(x*res+cx), trunc(cy-(cos(x)/(sin(x)*(1+sin(x))))*res), 4);
{PutPixel(trunc(x*res+cx), trunc(cy-(-4.394*x*x+7.3405*x-2.947)*res), 6);}
PutPixel(trunc(x*res+cx), trunc(cy-(6.0017*x*x-10.0256*x+4.7572)*res), 5);
until x>=beig;
readln; CloseGraph; end
else
Writeln(‘Graphics error:’, GraphErrorMsg(ErrCode));
end.