Pereiti prie turinio

Aptarimas:Racionaliųjų funkcijų integravimas (pilniau)

Page contents not supported in other languages.
Pridėti temą
Iš Wikibooks.

Ostrogradskio metodo pavyzdžio patikrinimas

[keisti]
Ostrogradskio metodo pavyzdyje gavome, kad
Apskaičiuosime kam lygus šitas apibrėžtinis integralas, kai x kinta nuo 0 iki 0.5. Taigi,
= 5.33333333333333 - 3 - 1.15470053837925*arctg(-0.577350269) =
= 2.33333333333333 - 1.15470053837925*(-0.523598775598) =
= 2.(3) + 0.60459978807807261686469275254739 =
= 2.9379331214114059501980260858807.
Toks Free Pascal kodas:
  var a:longint; b,c:real;
  begin
  for a:=1 to 1000 do
  c:=c+0.0005*(6-7*a*0.0005-sqr(a*0.0005))/( sqr(sqr(a*0.0005))-2*a*0.0005*sqr(a*0.0005)+3*sqr(a*0.0005)-2*a*0.0005+1 );
  writeln(c);
  readln;
  end.
duoda atsakymą "2.9374327209484177E+000" (tai reiškia 2.9374327209484177) iš karto momentaliai su 4.16 GHz dažniu veikiančiu procesorium.
Kodas plotą po funkcija padalina į 1000 siaurų stačiakampių (kai x yra nuo 0 iki 0.5) ir tų stačiakampių plotus sudeda. Padalinus į daugiau dalių, gautume atsakymą panašesnį į integravimo budu gautą atsakymą. Bet ir taip gavome pirmus 4 teisingus skaitmenis, skaičiuojant su Free Pascal programa.
Toks Free Pascal kodas:
  var a:longint; b,c:real;
  begin
  for a:=1 to 100000000 do
  c:=c+0.000000005*(6-7*a*0.000000005-sqr(a*0.000000005))/
  ( sqr(sqr(a*0.000000005))-2*a*0.000000005*sqr(a*0.000000005)+3*sqr(a*0.000000005)-2*a*0.000000005+1 );
  writeln(c);
  readln;
  end.
duoda atsakymą "2.9379331164122386E+000". Pirmą kartą paleidus, duoda atsakymą po 9 sekundžių, o paskesnius kartus paleidus duoda atsakymą po 3 sekundžių su 4.16 GHz procesorium. Kodas plotą po integruojama funkcija su x reikšmėm nuo 0 iki 0.5 padalina į 100 milijonų siaurų stačiakampių ir jų plotus sudeda. Gavome pirmus 8 teisingus skaitmenis.

Ostrogradskio metodo pavyzdžio patikrinimas (2)

[keisti]
Ostrogradskio metodo pavyzdyje gavome, kad
Apskaičiuosime kam lygus šitas apibrėžtinis integralas, kai x kinta nuo 0 iki 5. Taigi,
= 13/21 + 1.15470053837925*1.38067072344842986149 - 3 - 1.15470053837925*(-0.523598775598) =
= 13/21 + 1.59426122769037 - 3 + 0.604599788078 =
= 0.619047619047619 + 1.59426122769037 - 3 + 0.604599788078 =
= -0.182091365184.
Toks Free Pascal kodas:
  var a:longint; b,c:real;
  begin
  for a:=1 to 10000 do
  c:=c+0.0005*(6-7*a*0.0005-sqr(a*0.0005))/( sqr(sqr(a*0.0005))-2*a*0.0005*sqr(a*0.0005)+3*sqr(a*0.0005)-2*a*0.0005+1 );
  writeln(c);
  readln;
  end.
duoda atsakymą "-1.8362208021202053E-001", kuris reiškia "-0.18362208021202053". Atsakymas gaunamas momentaliai. Nors šitame kode padalinome plotą po funkcija į 10000 dalių, bet atsakymas gavosi mažiau tikslus nei praeitame skaičiavime. Dabar gavome tik 2 pirmus teisingus skaitmenis. Reikia pastebėti, kad funkcija keičia ženklą vienoje ar keliose vietose pereidama per tam tikras argumento x reikšmes iš intervalo [0; 5]. Gal dėl to gavosi atsakymas mažiau tikslus skaičiuojant su Free Pascal programa. Arba tiesiog funkcija intervale [0; 5] kinta labiau drastiškai, nei intervale [0; 0.5].
Toks Free Pascal kodas:
  var a:longint; b,c:real;
  begin
  for a:=1 to 1000000 do
  c:=c+0.000005*(6-7*a*0.000005-sqr(a*0.000005))/
  ( sqr(sqr(a*0.000005))-2*a*0.000005*sqr(a*0.000005)+3*sqr(a*0.000005)-2*a*0.000005+1 );
  writeln(c);
  readln;
  end.
duoda atsakymą "-1.8210667131654901E-001" (tai reiškia "-0.18210667131654901"). Atsakymas gaunamas momentaliai, tik pirmą kartą paleidus atsakymas gaunamas po 6 sekundžių su 4.16 GHz dažniu veikiančiu procesorium. Free Pascal kodas plotą po integruojama funkcija padalina į milijoną stačiakampių. Gavome tik 3 pirmus teisingus skaitmenis.
Toks Free Pascal kodas:
  var a:longint; b,c:real;
  begin
  for a:=1 to 100000000 do
  c:=c+0.00000005*(6-7*a*0.00000005-sqr(a*0.00000005))/
  ( sqr(sqr(a*0.00000005))-2*a*0.00000005*sqr(a*0.00000005)+3*sqr(a*0.00000005)-2*a*0.00000005+1 );
  writeln(c);
  readln;
  end.
duoda aysakymą "-1.8209151824459774E-001" (tai reiškia "-0.18209151824459774"). Pirmą kartą paleidus, atsakymas gaunamas po 9 sekundžių, o vėlesnius kitus kartus - po 3 sekundžių su 4.16 GHz procesorium. Šitas Free Pascal kodas padalina plotą po funkcija į 100 milijonų labai siaurų stačiakampių. Šįkart gavome 6 pirmus teisingus skaitmenis (t. y. -0.182091........).
Jeigu padalinti plotą (kai x kinta nuo 0 iki 5) po integruojama funkcija su Free Pascal programa į milijardą stačiakampių, tai gaunama klaida ir negaunamas joks atsakymas (turbūt dėl to, kad per ilgas ir per sudėtingas kodas).