22.5 Integralinis skaičiavimas
Diferencijavimas sudaro tik pusę tradicinio matematinės analizės kurso turinio. Kita atrama – integravimas – iš pradžių atrodo gana nesusijęs klausimas: „Koks plotas po šia kreive?“ Nors atrodo nesusiję, integravimas glaudžiai susijęs su diferencijavimu per tai, kas vadinama pagrindine matematinės analizės teorema.
Mašininio mokymo lygmeniu, apie kurį kalbame šioje knygoje, mums nereikės gilaus integravimo supratimo. Tačiau pateiksime trumpą įvadą, kad paruoštume pagrindą tolesniems taikymams, su kuriais susidursime vėliau.
22.5.1 Geometrinė interpretacija
Tarkime, turime funkciją . Paprastumo dėlei darykime prielaidą, kad yra neneigiama (niekada neįgyja reikšmės, mažesnės už nulį). Norime pabandyti suprasti: koks plotas yra tarp ir ašies?
%matplotlib inline
from d2l import mxnet as d2l
from IPython import display
from mpl_toolkits import mplot3d
from mxnet import np, npx
npx.set_np()
x = np.arange(-2, 2, 0.01)
f = np.exp(-x**2)
d2l.set_figsize()
d2l.plt.plot(x, f, color='black')
d2l.plt.fill_between(x.tolist(), f.tolist())
d2l.plt.show()
%matplotlib inline
from d2l import torch as d2l
from IPython import display
from mpl_toolkits import mplot3d
import torch
x = torch.arange(-2, 2, 0.01)
f = torch.exp(-x**2)
d2l.set_figsize()
d2l.plt.plot(x, f, color='black')
d2l.plt.fill_between(x.tolist(), f.tolist())
d2l.plt.show()
%matplotlib inline
from d2l import tensorflow as d2l
from IPython import display
from mpl_toolkits import mplot3d
import tensorflow as tf
x = tf.range(-2, 2, 0.01)
f = tf.exp(-x**2)
d2l.set_figsize()
d2l.plt.plot(x, f, color='black')
d2l.plt.fill_between(x.numpy(), f.numpy())
d2l.plt.show()
Dažniausiai šis plotas bus begalinis arba neapibrėžtas (panagrinėkite plotą po ), todėl žmonės dažnai kalba apie plotą tarp dviejų ribų, tarkime, ir .
x = np.arange(-2, 2, 0.01)
f = np.exp(-x**2)
d2l.set_figsize()
d2l.plt.plot(x, f, color='black')
d2l.plt.fill_between(x.tolist()[50:250], f.tolist()[50:250])
d2l.plt.show()
x = torch.arange(-2, 2, 0.01)
f = torch.exp(-x**2)
d2l.set_figsize()
d2l.plt.plot(x, f, color='black')
d2l.plt.fill_between(x.tolist()[50:250], f.tolist()[50:250])
d2l.plt.show()
x = tf.range(-2, 2, 0.01)
f = tf.exp(-x**2)
d2l.set_figsize()
d2l.plt.plot(x, f, color='black')
d2l.plt.fill_between(x.numpy()[50:250], f.numpy()[50:250])
d2l.plt.show()
Šį plotą žymėsime toliau pateiktu integralo simboliu:
Vidinis kintamasis yra fiktyvusis kintamasis, labai panašus į sumos indeksą , todėl tai galima ekvivalenčiai užrašyti su bet kokiu mums patinkančiu vidiniu žymeniu:
Yra tradicinis būdas suprasti, kaip galėtume bandyti aproksimuoti tokius integralus: galime įsivaizduoti, kad sritį tarp ir supjaustome į vertikalių juostelių. Jei didelis, kiekvienos juostelės plotą galime aproksimuoti stačiakampiu, o tada sudėti plotus ir gauti visą plotą po kreive. Pažiūrėkime pavyzdį, kaip tai daroma kode. Kaip gauti tikrąją reikšmę, pamatysime vėlesniame skyriuje.
epsilon = 0.05
a = 0
b = 2
x = np.arange(a, b, epsilon)
f = x / (1 + x**2)
approx = np.sum(epsilon*f)
true = np.log(2) / 2
d2l.set_figsize()
d2l.plt.bar(x.asnumpy(), f.asnumpy(), width=epsilon, align='edge')
d2l.plt.plot(x, f, color='black')
d2l.plt.ylim([0, 1])
d2l.plt.show()
f'approximation: {approx}, truth: {true}'
epsilon = 0.05
a = 0
b = 2
x = torch.arange(a, b, epsilon)
f = x / (1 + x**2)
approx = torch.sum(epsilon*f)
true = torch.log(torch.tensor([5.])) / 2
d2l.set_figsize()
d2l.plt.bar(x, f, width=epsilon, align='edge')
d2l.plt.plot(x, f, color='black')
d2l.plt.ylim([0, 1])
d2l.plt.show()
f'approximation: {approx}, truth: {true}'
epsilon = 0.05
a = 0
b = 2
x = tf.range(a, b, epsilon)
f = x / (1 + x**2)
approx = tf.reduce_sum(epsilon*f)
true = tf.math.log(tf.constant([5.])) / 2
d2l.set_figsize()
d2l.plt.bar(x, f, width=epsilon, align='edge')
d2l.plt.plot(x, f, color='black')
d2l.plt.ylim([0, 1])
d2l.plt.show()
f'approximation: {approx}, truth: {true}'
Problema ta, kad nors tai galima padaryti skaitiškai, analitiškai šį metodą galime taikyti tik paprasčiausioms funkcijoms, tokioms kaip
Bet kas šiek tiek sudėtingesnio, kaip mūsų pavyzdys iš aukščiau pateikto kodo
yra už to, ką galime išspręsti tokiu tiesioginiu metodu.
Vietoj to pasirinksime kitą požiūrį. Dirbsime intuityviai su ploto sąvoka ir išmoksime pagrindinę skaičiavimo priemonę, naudojamą integralams rasti: pagrindinę matematinės analizės teoremą. Tai bus mūsų integravimo studijų pagrindas.
22.5.2 Pagrindinė matematinės analizės teorema
Kad giliau įsigilintume į integravimo teoriją, įveskime funkciją
Ši funkcija matuoja plotą tarp ir , priklausomai nuo to, kaip keičiame . Atkreipkite dėmesį, kad tai yra viskas, ko mums reikia, nes
Tai yra matematinis užkodavimas fakto, kad galime išmatuoti plotą iki tolimesnio galo, o tada atimti plotą iki artimesnio galo, kaip parodyta 22.5.1 pav..
22.5.1 pav. Vizualizacija, kodėl ploto po kreive tarp dviejų taškų skaičiavimo uždavinį galime suvesti į ploto į kairę nuo taško skaičiavimą.
Taigi bet kurio intervalo integralą galime rasti išsiaiškinę, kas yra .
Tam apsvarstykime eksperimentą. Kaip dažnai darome matematinėje analizėje, įsivaizduokime, kas nutinka, kai reikšmę šiek tiek pastumiame. Iš aukščiau pateiktos pastabos žinome, kad
Tai mums sako, kad funkcija pasikeičia dydžiu, lygiu plotui po mažyte funkcijos juostele.
Čia daroma aproksimacija. Jei žiūrime į tokią mažytę ploto juostelę, atrodo, kad šis plotas yra artimas stačiakampio plotui, kurio aukštis lygus reikšmei, o pagrindo plotis yra . Iš tiesų galima parodyti, kad kai , ši aproksimacija tampa vis geresnė. Taigi galime daryti išvadą:
Tačiau dabar galime pastebėti: tai yra būtent tas dėsningumas, kurio tikėtumėmės skaičiuodami išvestinę! Taigi matome tokį gana stulbinantį faktą:
Tai yra pagrindinė matematinės analizės teorema. Ją galime užrašyti išplėsta forma
Ji ploto radimo sąvoką (a priori gana sunkią) suveda į teiginį apie išvestines (kažką daug geriau suprantama). Paskutinė pastaba, kurią turime padaryti: tai mums nepasako, kokia tiksliai yra . Iš tiesų su bet kuria turi tą pačią išvestinę. Tai integravimo teorijos gyvenimiška tiesa. Laimei, atkreipkite dėmesį, kad dirbant su apibrėžtiniais integralais konstantos išnyksta, todėl rezultatui nėra svarbios.
Tai gali atrodyti kaip abstraktus niekas, bet akimirkai įvertinkime, kad tai mums suteikė visiškai naują požiūrį į integralų skaičiavimą. Mūsų tikslas nebėra atlikti kažkokį pjaustymo ir sumavimo procesą ploto atkūrimui, o tereikia rasti funkciją, kurios išvestinė yra turima funkcija! Tai neįtikėtina, nes dabar galime išvardyti daugybę gana sunkių integralų tiesiog apverčiant lentelę iš 22.3.2 skyrelis. Pavyzdžiui, žinome, kad išvestinė yra . Taigi pagal pagrindinę teoremą (22.5.1) galime sakyti, kad
Panašiai žinome, kad išvestinė yra ji pati, taigi tai reiškia
Šitaip galime plėtoti visą integravimo teoriją laisvai pasitelkdami diferencialinio skaičiavimo idėjas. Kiekviena integravimo taisyklė išplaukia iš šio vieno fakto.
22.5.3 Kintamųjų keitimas
Kaip ir su diferencijavimu, yra keletas taisyklių, kurios padaro integralų skaičiavimą lengvesnį. Iš tiesų kiekviena diferencialinio skaičiavimo taisyklė (kaip sandaugos, sumos ir grandinės taisyklės) turi atitinkamą integralinio skaičiavimo taisyklę (integravimas dalimis, integravimo tiesiškumas ir kintamųjų keitimo formulė atitinkamai). Šiame skyrelyje pasinersime į, galima sakyti, svarbiausią iš sąrašo: kintamųjų keitimo formulę.
Pirmiausia tarkime, turime funkciją, kuri pati yra integralas:
Tarkime, norime sužinoti, kaip ši funkcija atrodo, kai ją sukomponuojame su kita ir gauname . Pagal grandinės taisyklę žinome
Tai galime paversti teiginiu apie integravimą naudodami pagrindinę teoremą (22.5.1), kaip aukščiau. Gauname
Prisiminę, kad pati yra integralas, gauname, kad kairiąją pusę galima perrašyti kaip
Panašiai, prisiminę, kad yra integralas, galime atpažinti, kad pagal pagrindinę teoremą (22.5.1), todėl galime daryti išvadą
Tai yra kintamųjų keitimo formulė.
Intuityvesniam išvedimui panagrinėkime, kas nutinka imant integralą tarp ir . Mažam šis integralas yra apytiksliai – atitinkamo stačiakampio plotas. Dabar palyginkime tai su integralu nuo iki . Žinome, kad , todėl šio stačiakampio plotas yra apytiksliai . Taigi, kad šių dviejų stačiakampių plotai sutaptų, pirmąjį turime padauginti iš , kaip pavaizduota 22.5.2 pav..
22.5.2 pav. Vieno plono stačiakampio transformacijos keičiant kintamuosius vizualizacija.
Tai mums sako, kad
Tai yra kintamųjų keitimo formulė, išreikšta vienam mažam stačiakampiui.
Jei ir tinkamai pasirinktos, tai gali leisti apskaičiuoti neįtikėtinai sudėtingus integralus. Pavyzdžiui, jei pasirinktume ir (tai reiškia ), galime parodyti, kad
taigi pertvarkę gauname, kad
22.5.4 Pastaba dėl ženklų susitarimų
Budrūs skaitytojai pastebės kai ką keisto aukščiau pateiktuose skaičiavimuose. Būtent tokie skaičiavimai kaip
gali duoti neigiamus skaičius. Galvojant apie plotus, gali atrodyti keista matyti neigiamą reikšmę, todėl verta išsiaiškinti, koks yra susitarimas.
Matematikai naudoja ženklinio ploto sąvoką. Ji pasireiškia dviem būdais. Pirma, jei nagrinėjame funkciją , kuri kartais yra mažesnė už nulį, tai plotas taip pat bus neigiamas. Pavyzdžiui
Panašiai integralai, einantys iš dešinės į kairę, o ne iš kairės į dešinę, taip pat laikomi neigiamais plotais
Standartinis plotas (iš kairės į dešinę teigiamos funkcijos) visada teigiamas. Viskas, kas gaunama jį apvertus (tarkime, apvertus per ašį ir gavus neigiamo skaičiaus integralą arba apvertus per ašį ir gavus integralą neteisinga tvarka), duos neigiamą plotą. Ir iš tiesų, apvertus du kartus, gauname dvi neigiamas ženklų poras, kurios viena kitą panaikina, ir plotas teigiamas
Jei ši diskusija skamba pažįstamai – taip ir yra! 22.1 skyrelis aptarėme, kaip determinantas panašiai atspindi ženklinį plotą.
22.5.5 Daugialypiai integralai
Kai kuriais atvejais mums reikės dirbti aukštesnėse dimensijose. Pavyzdžiui, tarkime, turime dviejų kintamųjų funkciją, pvz., , ir norime sužinoti tūrį po , kai kinta intervale , o – intervale .
# Construct grid and compute function
x, y = np.meshgrid(np.linspace(-2, 2, 101), np.linspace(-2, 2, 101),
indexing='ij')
z = np.exp(- x**2 - y**2)
# Plot function
ax = d2l.plt.figure().add_subplot(111, projection='3d')
ax.plot_wireframe(x.asnumpy(), y.asnumpy(), z.asnumpy())
d2l.plt.xlabel('x')
d2l.plt.ylabel('y')
d2l.plt.xticks([-2, -1, 0, 1, 2])
d2l.plt.yticks([-2, -1, 0, 1, 2])
d2l.set_figsize()
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(0, 1)
ax.dist = 12
# Construct grid and compute function
x, y = torch.meshgrid(torch.linspace(-2, 2, 101), torch.linspace(-2, 2, 101))
z = torch.exp(- x**2 - y**2)
# Plot function
ax = d2l.plt.figure().add_subplot(111, projection='3d')
ax.plot_wireframe(x, y, z)
d2l.plt.xlabel('x')
d2l.plt.ylabel('y')
d2l.plt.xticks([-2, -1, 0, 1, 2])
d2l.plt.yticks([-2, -1, 0, 1, 2])
d2l.set_figsize()
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(0, 1)
ax.dist = 12
# Construct grid and compute function
x, y = tf.meshgrid(tf.linspace(-2., 2., 101), tf.linspace(-2., 2., 101))
z = tf.exp(- x**2 - y**2)
# Plot function
ax = d2l.plt.figure().add_subplot(111, projection='3d')
ax.plot_wireframe(x, y, z)
d2l.plt.xlabel('x')
d2l.plt.ylabel('y')
d2l.plt.xticks([-2, -1, 0, 1, 2])
d2l.plt.yticks([-2, -1, 0, 1, 2])
d2l.set_figsize()
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(0, 1)
ax.dist = 12
Tai užrašome kaip
Tarkime, norime apskaičiuoti šį integralą. Teigiu, kad tai galime padaryti iteratyviai apskaičiuodami pirmiausia integralą pagal , o tada pereidami prie integralo pagal , t. y.
Pažiūrėkime, kodėl taip yra.
Panagrinėkime aukščiau pateiktą paveikslą, kuriame funkciją padalijome į kvadratus, kuriuos indeksuosime sveikaisiais koordinatėmis . Šiuo atveju mūsų integralas yra apytiksliai
Kai uždavinį diskretizuojame, galime sudėti reikšmes šiuose kvadratuose bet kokia tvarka ir nesijaudinti, kad reikšmės pasikeis. Tai iliustruota 22.5.3 pav.. Visų pirma galime sakyti, kad
22.5.3 pav. Iliustracija, kaip sumą per daugelį kvadratų išskaidyti į sumą pirmiausia per stulpelius (1), o tada sudėti stulpelių sumas (2).
Vidinė suma yra būtent integralo diskretizacija
Galiausiai atkreipkite dėmesį, kad jei sujungsime šias dvi išraiškas, gausime
Taigi viską sudėję gauname, kad
Atkreipkite dėmesį, kad po diskretizavimo viskas, ką padarėme, buvo tiesiog pakeista skaičių sąrašo sudėjimo tvarka. Dėl to gali atrodyti, kad tai niekis, tačiau šis rezultatas (vadinamas Fubini teorema) ne visada teisingas! Mašininiame mokyme sutinkamai matematikai (tolydžioms funkcijoms) nėra ko nerimauti, tačiau galima sukurti pavyzdžių, kur jis neteisingas (pavyzdžiui, funkcija stačiakampyje ).
Atkreipkite dėmesį, kad pasirinkimas pirmiausia integruoti pagal , o tada pagal buvo savavališkas. Lygiai taip pat galėjome pasirinkti pirmiausia , o tada ir pamatyti, kad
Dažnai suglaudinsime į vektorinį žymėjimą ir sakysime, kad atveju tai yra
22.5.6 Kintamųjų keitimas daugialypiuose integraluose
Kaip su vienu kintamuoju (22.5.2), galimybė keisti kintamuosius aukštesnės dimensijos integrale yra svarbi priemonė. Apibendrinkime rezultatą be išvedimo.
Mums reikia funkcijos, kuri pakeičia mūsų integravimo srities parametrizavimą. Galime paimti , t. y. bet kurią funkciją, priimančią realiųjų kintamųjų ir grąžinančią kitus . Kad išraiškos būtų tvarkingos, darysime prielaidą, kad yra injekcinė, t. y. niekada nesusilanksto pati su savimi ().
Šiuo atveju galime sakyti, kad
kur yra Jakobio matrica, t. y. dalinių išvestinių matrica funkcijos ,
Atidžiai pažiūrėję matome, kad tai panašu į vieno kintamojo grandinės taisyklę (22.5.2), tik narį pakeitėme nariu . Pažiūrėkime, kaip galime interpretuoti šį narį. Prisiminkite, kad narys buvo skirtas pasakyti, kiek pritaikę ištempėme savo ašį. Tas pats procesas aukštesnėse dimensijose yra nustatyti, kiek pritaikę ištempiame mažo kvadrato (arba mažo hiperkubo) plotą (arba tūrį, arba hipertūrį). Jei būtų daugyba iš matricos, jau žinome, kad atsakymą duoda determinantas.
Šiek tiek padirbėjus galima parodyti, kad Jakobio matrica suteikia geriausią daugelio kintamųjų funkcijos aproksimaciją taške matrica, panašiai kaip galėjome aproksimuoti tiesėmis ar plokštumomis naudodami išvestines ir gradientus. Taigi Jakobio matricos determinantas tiksliai atspindi mastelio koeficientą, kurį nustatėme vienoje dimensijoje.
Reikia šiek tiek darbo, kad šias detales užpildytume, todėl nesijaudinkite, jei dabar jos neaiškios. Pažiūrėkime bent vieną pavyzdį, kurį panaudosime vėliau. Panagrinėkime integralą
Žaidžiant su šiuo integralu tiesiogiai niekur nenueisime, tačiau pakeitę kintamuosius galime gerokai pasistūmėti. Jei imsime (t. y. , ), tada galime pritaikyti kintamųjų keitimo formulę ir pamatyti, kad tai yra tas pats, kas
kur
Taigi integralas yra
kur paskutinė lygybė išplaukia iš to paties skaičiavimo, kurį naudojome 22.5.3 skyrelis skyrelyje.
Šį integralą sutiksime vėl, kai 22.6 skyrelis nagrinėsime tolydžiuosius atsitiktinius dydžius.
22.5.7 Santrauka
- Integravimo teorija leidžia atsakyti į klausimus apie plotus ar tūrius.
- Pagrindinė matematinės analizės teorema leidžia pasinaudoti žiniomis apie išvestines plotams skaičiuoti, remiantis pastebėjimu, kad ploto iki tam tikro taško išvestinę duoda integruojamos funkcijos reikšmė.
- Aukštesnių dimensijų integralus galima apskaičiuoti iteruojant vieno kintamojo integralus.
22.5.8 Pratimai
- Kam lygus ?
- Naudodami kintamųjų keitimo formulę, suintegruokite .
- Kam lygus ?
- Naudodami kintamųjų keitimo formulę, apskaičiuokite ir ir pamatykite, kad jie skiriasi.
