Gryno formulė

Iš Wikibooks.
Peršokti į: navigacija, paiešką

Gryno formulė nustato ryšį tarp dvilypio integralo ir kreivinio integralo antrojo tipo.

Pavyzdžiai[keisti]

  • Su Gryno formule apskaičiuosime kreivinį integralą kur L - apskritimas
Funkcijos ir netrūkios uždarame rate Todėl pagal Gryno teoremą turime ( ):

Patikrinimas. Iš apskritimo lygties gauname:
Todėl
Pasinaudodami internetiniu integratoriumi, gauname, kad
Riba Beje,
Patikrinimo atsakymas gautas du kartus mažesnis, todėl kyla abejonių dėl Gryno formulės prasmės.
Kitoks patikrinimas. Iš apskritimo lygties gauname:
Todėl
Pasinaudodami internetiniu integratoriumi, gauname, kad


  • Taikydami Gryno formulę, apskaičiuokime kreivinį integralą

kai L - apskritimas (a>0), apeinamas teigiama kryptimi. Kadangi skritulyje funkcijos ir bei jų dalinės išvestinės ir yra tolydžios, tai duotajam kreiviniam integralui galima taikyti Gryno formulę. Turime: Dvilypį integralą pakeisime kartotiniu polinėje koordinačių sistemoje, turėdami galvoje, kad apskritimas apeinamas teigiama kryptimi (prieš laikrodžio rodykle). Tuomet kampas kinta nuo iki Vadinasi ( ), kur pasinaudojome dvigubu faktorialu.


  • Taikydami Gryno formulę, apskaičiuokime kreivinį integralą

kai L - apskritimas (a>0), apeinamas teigiama kryptimi (prieš laikrodžio rodyklę).

Kadangi skritulyje funkcijos ir bei jų dalinės išvestinės ir yra tolydžios, tai duotajam kreiviniam integralui galima taikyti Gryno formulę.
Turime:
Randame apskritimo y išraišką:
Randame y išvestinę, o paskui ir dy:
Apskritimo spindulys nes pavyzdžiui, kai tai Žinome, kad šis apskritimas liečiasi koordinačių pradžios taške O(0; 0) ir kad ašis Ox dalina apskritimą pusiau. Vadinasi, kai ir tai gauname teisingą lygybę Vadinasi taškas (0; 0) priklauso apskritimui Kitas apskritimo taškas yra (3; 0), kuris yra ant Ox ašies. Įstačius taško (3; 0) koordinates į apskritimo lygtį gauname Žinome, kad taškas (3; 0) yra toliausias taškas ant Ox ašies. Todėl apskritimo spindulys yra
Kadangi apskritimo spindulys yra ir Ox ašis dalina apskritimą per pusę, tai didžiausia y reikšmė gali būti Vadinasi integravimas vyksta pirmame ir ketvirtame ketvirčiuose. Bet, kadangi, skritulio plotas yra vienodas ketvirtame ketviryje kaip ir pirmame, tai užtenka apskaičiuoti skritulio plotą tik pirmame ketvirtyje, o paskui gautą plotą padauginti iš dviejų. Kad apskaičiuoti skritulio plotą pirmame ketvirtyje, turime žinoti integravimo ribas. Nustatome, kad x kinta nuo 0 iki a, o y kinta nuo 0 iki
Taikydami Gryno formulę, integruojame (pasinaudodami internetiniu integratoriumi):
Pasitikriname (įstatydami y ir dy ir pasinaudodami internetiniu integratoriumi):
Pastaba, kad taip gauname dalyba iš nulio ir neįmanoma vietomis išintegruoti įstatant a arba 0. Bet gauname kažką panašesnio į teisingą atsakymą:
Toliau pasinaudojame internetiniu polinomų dalikliu parinkę gauname Toliau integruojame:
Kadangi tai seniau gautas atsakymas įstačius atitinka ir iš to darome išvada, kad Gryno formulė veikia teisingai (išskyrus minusiuką).

Ploto apskaičiavimas[keisti]

Plotui apskaičiuoti ploksčios srities naudojamos tokios formulės: Jos išvedamos šitaip:

  • Pritaikysim Gryno formulę apskaičiavimui srities D (ploksčios figūros ploto). Jei Tada Pagal formulę turime:

Integralas lygus paaviršiui srities D , todėl,

  • Sakykime analoginiu budu randame, kad

  • Ir, pagaliau, paėmę funkcijas gauname formulę


Pavyzdžiai

  • Apskaičiuosime plotą apribotą elipse pagal formulę Panaudoję parametrinę lygtį elipsės: gauname:

Jėgos darbas[keisti]

Jėgos darbas padarytas judant kreive plokštumoje apskaičiuojamas pagal formulę Jėgos darbas padarytas judant erdvine kreive apskaičiuojamas taip:

  • Apskaičiuosime darbą jėgos persikeliant materialiam taškui elipse teigiama kryptimi, jeigu jėga kiekviename taške (x; y) elipsės nukreipta į elipsės centrą ir pagal dydį lygi atstumui nuo taško (x; y) iki elipsės centro.
Pagal sąlyga, Jėgos F(x, y) koordinatės tokios: [ženklas "" paaiškinamas tuo, kad jėga nukreipta į tašką (0; 0)]. Pagal formulę turime kur L - elipsė Todėl

Jei t keistusi nuo 0 iki integralas butu lygus
Tarkime, jei tai padarytas darbas pirmame ketvirtyje yra
Kad patikrinti ar apskaičiuota teisingai reikia sudėti visas x reikšmes ant elipsės linijos pirmame ketvirtyje. Taip pat reikia sudėti visas y reikšmes ant elipsės linijos pirmame ketvirtyje. Galiausiai reikia sudėti sumas x ir y reikšmių, kad gauti darbą A pirmame ketvirtyje.
Arba tiesiog darbas yra lygus čia yra visos x reikšmės ant elipsės linijos pirmame ketvirtyje nuo 0 iki a; analogiškai yra visos y reikšmės ant elipsės linijos pirmame ketvirtyje nuo 0 iki b.
Kuris iš šių variantų yra darbas A, paaiškės pasumavus ir paskaičiavus. Sutapimas ar ne, bet pagal pirmą variantą. Na, o pagal antrą variantą turime:
Iš tikro, ko gero, mes apskaičiuojame tokiu budu ne darbą atlikta apeinant elipsės liniją pirmame ketvirtyje, o darbą atlikta apeinant tiesę pirmame ketvirtyje. Štai kodas programos "Free Pascal" (FreePascal IDE for Win32 for i386; Target CPU: i386; Version 1.0.12 2011/04/23; <Compiler Version 2.4.4>; <Debugger GDB 7.2>; Copyright <C> 1998-2009):
    var
    a:longint;
    c:real;
    begin
      for a:=1 to 10
      do
      c:=c+0.5*sqrt(sqr(a*0.3)+sqr((11-a)*0.5));
      writeln(c);
    readln;
    end.
gauname
Panaudojus šį kodą:
   var
   a:longint;
   c:real;
   begin
   for a:=1 to 1000000000  do
   c:=c+0.000000005*sqrt(sqr(a*0.000000003)+sqr((1000000001-a)*0.000000005));
   writeln(c);
   readln;
   end.
gauname atsakymą po 22 sekundžių ant 2.6 GHz procesoriaus.
Panaudojus šį (teisingesnį) kodą:
   var
   a:longint;
   c:real;
   begin
   for a:=0 to 1000000000  do
   c:=c+sqrt(sqr(a*0.000000003)+sqr((1000000000-a)*0.000000005))/1000000001;
   writeln(5*c);
   readln;
   end.
gauname atsakymą po 25 sekundžių ant 2.6 GHz procesoriaus.
Integruojant gauname:
Apskaičiuojame viską nepriekaištingai tiksliai su kompiuterio kalkuliatoriumi:
Toliau bandome rasti atlikta darbą apeita tiese integruojant Randame Turime, kad x integravimo ribos yra 0 iki 5, o y integravimo ribos yra nuo 0 iki 3. Gauname:
Pastebime, kad jeigu elipsė būtų apskritimas tai pirmame ketvirtyje atliktas darbas A=0. Taip yra todėl, kad kai x didėja, tada y reikšmės mažėja. Todėl skaičiuoti darbą, ko gero, galėtų būti teisingiau arba Tuomet akivaizdu, kad
Tą patį darba gauname ir apeinant tiese:
Lygiai tą patį darbą gausime ir integruojant taip:
Tą patį gausime ir taip integruojant nuo 0 iki 5:


  • Nustatyti tiesės masę tik pirmame ketvirtyje. Tiesės tankis tolstant tiesės taškams nuo centro (koordinačių pradžios taško O) didėja proporcingai, t. y.
Sprendimas. Pasinaudosime masės skaičiavimo formule
Kad tą patį apskaičiuoti su programa "Free Pascal" reikia surasti tiesės ilgį, kai x kinta nuo 0 iki 5 (tai yra tiesės ilgis tik pirmame ketviryje):
Todėl "Free Pascal" kodas yra toks:
  var
  a:longint;
  c:real;
  begin
  for a:=1 to 1000000000  do
  c:=c+sqrt(sqr(a*0.000000003)+sqr((1000000001-a)*0.000000005));
  writeln(sqrt(sqr(3)+sqr(5))*c/1000000000);
  readln;
  end.
duodantis rezultatą 19,163886990613093 po 18 sekundžių su 2,6 GHz procesoriumi.


  • Nustatyti parabolės masę pirmame ketvirtyje, kai x kinta nuo 0 iki 10. Tiesės tankis tolstant tiesės taškams nuo centro (koordinačių pradžios taško O) didėja proporcingai, t. y.
Sprendimas.
Integruojame (pasinaudodami integralų lentelės (31) formule):
=338,01247924440330576404858539624.
Toliau, kad surasti kreivės masę (kai kiekviename kreivės taške tankis priklauso nuo tam tikros funkcijos), skaičiuojame:
Toliau integruodami taip arba taip ir įstačius x=1 gauname 1,0565457675431157081260089778614 ir 0,95907194527687339898921071078133 atitinkamai. Kita vertus, integruojant taip ir taip gauname tą patį rezultatą Todėl šį rezultatą ir panaudojame toliau integruodami:
Nepriekaištingai tikslus atsakymas yra:
679216,66666666666666666666666667.
Todėl belieka patikrinti ar Wolframo internetinio integratoriaus atsakymas teisingas paėmus išvėstinę ir paskui įstačius x=1 bei palyginti su neišintegruotu reiškiniu:
Pasirodo, kad nepridėta šaknis įvedimo formoje į integratorių, bet integruojant taip ir taip gauname tokį patį rezultatą, kuris yra labai sudetingas ir ilgas. Net didžiausioje integralų lentelėje nėra kaip išintegruoti Yra tik bet ir tai integravimas gaunasi su dar dviais pažiūrėjimais į integralų lentelę. Todėl pasinaudojame Free Pascal kodu:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+(sqrt(sqr(a*0.00000001)+sqr(sqr(a*0.00000001)))-sqrt(sqr((a-1.0)*0.00000001)+sqr(sqr((a-1.0)*0.00000001))))*sqrt(sqr(a*0.00000001)+sqr(sqr(a*0.00000001)));
writeln(c);
readln;
end.
kuris duoda atsakymą m=5050,00000667382 po 53 sekundžių su 2,6 GHz procesoriumi.
Kai x kinta 0 iki 5, tai integruojant gauname
=43,858169117804135193577942278197.
Tą patį atsakymą (43,8581691815329) gauname ir pasinaudodami Free Pascal kodu:
 var
 a:longint;
 c:real;
 begin
 for a:=1 to 1000000000  do
 c:=c+sqrt(sqr(5.0*a/1000000000)+sqr(sqr(5.0*a/1000000000)))/1000000000;
 writeln(c*5);
 readln;
 end.
Kad rasti masę, kai x kinta 0 iki 5, pasinaudojame Free Pascal kodu:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+(sqrt(sqr(5.0*a/1000000000)+sqr(sqr(5.0*a/1000000000)))-sqrt(sqr(5.0*(a-1.0)*0.000000001)+sqr(sqr(5.0*(a-1.0)*0.000000001))))*sqrt(sqr(5.0*a/1000000000)+sqr(sqr(5.0*a/1000000000)));
writeln(c);
readln;
end.
kuris duoda atsakymą po 73 sekundžių su 2,6 GHz procesoriumi.
Alternatyvus Free Pascal kodas, kuris skaičiuoja pagal formulę yra toks:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(1+sqr(2*5.0*a/1000000000))*sqrt(sqr(5.0*a/1000000000)+sqr(sqr(5.0*a/1000000000)));
writeln(5*c/1000000000);
readln;
end
ir duoda atsakymą po 48 sekundžių su 2,6 GHz procesoriumi. Optimizuotas šito kodo variantas:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(1+sqr(0.00000001*a))*sqrt(sqr(0.000000005*a)+sqr(sqr(0.000000005*a)));
writeln(0.000000005*c);
readln;
end.
duoda atsakymą po 33 sekundžių su 2,6 GHz procesoriumi.
Kitoks kreivės masės apskaičiavimo Free Pascal kodas yra:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(sqr(0.000000005*a-0.000000005*(a-1))+sqr(sqr(0.000000005*a)-sqr(0.000000005*(a-1))))*sqrt(sqr(0.000000005*a)+sqr(sqr(0.000000005*a)));
writeln(c);
readln;
end.
kuris duoda atsakymą po 41 sekundės su 2,6 GHz procesoriumi. Optimizuotas šito kodo variantas yra kodas:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(sqr(0.000000005)+sqr(sqr(0.000000005*a)-sqr(0.000000005*(a-1))))*sqrt(sqr(0.000000005*a)+sqr(sqr(0.000000005*a)));
writeln(c);
readln;
end
kuris duoda atsakymą po 38 sekundžių su 2,6 GHz procesoriumi. Dar labiau optimizuotas šito kodo variantas yra:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(0.000000000000000025+sqr(sqr(0.000000005*a)-sqr(0.000000005*(a-1))))*sqrt(sqr(0.000000005*a)+sqr(sqr(0.000000005*a)));
writeln(c);
readln;
end.
kuris duoda atsakymą po 38 sekundžių su 2,6 GHz procesoriumi (vadinasi, Free Pascal automatiškai optimizuoja kodą pakeldamas konstantą 0,000000005 kvadratu ir visoms iteracijoms naudodamas gautą 0,000000000000000025 reikšmę).


  • Nustatyti parabolės masę pirmame ketvirtyje, kai x kinta nuo 0 iki 10. Tiesės tankis tolstant tiesės taškams nuo centro (koordinačių pradžios taško O) didėja proporcingai tik Ox kryptimi, t. y.
Sprendimas. Greičiausias būdas apskaičiuoti, tai ko reikalauja sąlyga (uždavinys) yra toks:
Kitas būdas yra toks:
=669,16822851623458973388183928978 - (2/3)*(1/8)=
=669,16822851623458973388183928978 - 1/12=
=669,08489518290125640054850595645;
čia pasinaudojome integralų lentele
Tuo atveju, jeigu x kinta nuo 0 iki 5 tada:
=84,586453144434159774345479682393-1/12=
=84,50311981110082644101214634906.
Free Pascal kodas duodą tokį patį rezultatą (kai x kinta nuo 0 iki 5):
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(sqr(0.000000005)+sqr(sqr(0.000000005*a)-sqr(0.000000005*(a-1))))*0.000000005*a;
writeln(c);
readln;
end.
m=84,5031198757743 po 25 sekundžių su 2,6 GHz procesoriumi.
Alternatyvus Free Pascal kodas, skaičiuojantis pagal formulę yra šitas:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(1+4*sqr(5.0*a/1000000000))*a*5/1000000000;
writeln(c*5/1000000000);
readln;
end.
duodantis atsakymą m=84,5031199367086 po 25 sekundžių su 2,6 GHz procesoriumi. Optimizuotas jo variantas:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(1+4*sqr(5.0*a/1000000000))*a;
writeln(c*sqr(5/1000000000));
readln;
end.
duoda atsakymą m=84,503119936731021 po 23 sekundžių su 2,6 GHz procesoriumi. Dar labiau optimizuotas jo variantas:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+sqrt(1+4*sqr(0.000000005*a))*a;
writeln(c*sqr(5/1000000000));
readln;
end.
duoda atsakymą m=84,503119936731021 po 17 sekundžių su 2,6 GHz procesoriumi (vadinasi, 1000000000 dalybos operacijų padaroma per 23-17=6 sekundes su 2,6 GHz procesoriumi; tačiau panaudojus šį kodą:
var
a:longint;
c:real;
begin
for a:=1 to 1000000000  do
c:=c+1/a;
writeln(c);
readln;
end.
gauname atsakymą 21,3004815025070 po 8 sekundžių su 2,6 GHz procesoriumi (beje, )).


  • Nustatyti parabolės masę pirmame ketvirtyje, kai x kinta nuo 0 iki 5. Tiesės tankis tolstant tiesės taškams nuo centro (koordinačių pradžios taško O) didėja proporcingai Ox kryptimi ir Oy kryptimi, t. y.
Sprendimas.
Toliau pasinaudodami Wolframo internetiniu integratoriumi gauname, kad:
=(400,21535937026211982341926834875-0,04684723359840577716947805527494)-(0,08333333333333333333333333333333-0)=
=400,16851213666371404624979029348-0,08333333333333333333333333333333=400,08517880333038071291645696014.
Free Pascal kodas:
 var
 a:longint;
 c:real;
 begin
 for a:=1 to 1000000000  do
 c:=c+sqrt(sqr(0.000000005)+sqr(sqr(0.000000005*a)-sqr(0.000000005*(a-1))))*(0.000000005*a+sqr(0.000000005*a));
 writeln(c);
 readln;
 end.
duoda atsakymą m=400,085179290551 po 27 sekundžių su 2,6 GHz procesoriumi.


  • Nustatyti parabolės masę pirmame ketvirtyje, kai x kinta nuo 0 iki 5. Tiesės tankis tolstant tiesės taškams nuo centro (koordinačių pradžios taško O) didėja pagal formulę
Sprendimas. Pasinaudodami internetiniu integratoriumi, gauname:

=(62081002,958203958838988831076887+128)/7680=8083,4805935161404738266707131363.
Panaudojus Free Pascal kodą:
 var
 a:longint;
 c:real;
 begin
 for a:=1 to 1000000000  do
 c:=c+sqrt(sqr(0.000000005*a-0.000000005*(a-1))+sqr(sqr(0.000000005*a)-sqr(0.000000005*(a-1))))*sqr(0.000000005*a+sqr(0.000000005*a));
 writeln(c);
 readln;
 end.
gauname atsakymą m=8083,48061127561 po 30 sekundžių su 2,6 GHz procesoriumi.
Alternatyvus Free Pascal kodas, skaičiuojantis pagal formulę yra toks:
 var
 a:longint;
 c:real;
 begin
 for a:=1 to 1000000000  do
 c:=c+sqrt(1+sqr(2*0.000000005*a))*sqr(0.000000005*a+sqr(0.000000005*a));
 writeln(c*0.000000005);
 readln;
 end.
ir duoda atsakymą m=8083,4806161241980 po 22 sekundžių su 2,6 GHz procesoriumi.

Taip pat skaitykite[keisti]