Vienība 5 / 11

Skaitliskais aprēķins, Python un kodu ģenerēšana

Ieguvumi:

  • Spēja atšķirt simbolisko un skaitlisko aprēķinu un katrai problēmai izvēlēties pareizo rīku (SymPy vai NumPy/SciPy)
  • Spēja lasīt un saprast mākslīgā intelekta radīto ciparu kodu, palaist to pats un pārbaudīt, veicot veselā saprāta pārbaudi ar zināmu ievadi.
  • Izprotiet peldošā komata skaitļu precizitātes robežas, izmantojiet pielaidi precīzas vienlīdzības vietā un pārvaldiet sākotnējās minēšanas ietekmi uz skaitliskām metodēm.

Simboliskais aprēķins sniedz precīzu integrāļa vai vienādojuma formulu; Bet lielāko daļu praktisko problēmu matemātikā nevar atrisināt ar slēgtu formulu. Šeit tiek izmantota skaitliskā aprēķins: aptuvena skaitliska rezultāta iegūšana ar vēlamo precizitāti, nevis precīzu formulu. Integrāļa vērtības atrašana ar precizitāti 0,001, vienādojuma saknes aprēķināšana līdz decimālajai tuvināšanai, statistikas iegūšana no datu kopas — tie visi ir skaitliski aprēķini. Python rīki tam ir NumPy (ciparu masīvi un matemātika) un SciPy (zinātniskā skaitļošana) bibliotēkas. Šajā nodaļā jūs iemācīsities izmantot AI kā palīgu, kas ģenerē Python kodu skaitliskam aprēķinam, un pārbaudīsiet koda pareizību.

Kritiska definīcija: peldošā komata skaitlis ir formāts, kurā dators ar ierobežotu precizitāti saglabā decimālskaitļus. Tāpēc datoraritmētikā 0,1 + 0,2 var izrādīties 0,30000000000000004, nevis gluži 0,3. Tā nav kļūda, tā ir skaitliskā aprēķina būtība, taču tā novedīs pie nepareiziem rezultātiem, ja jūs to neapzināsit. Skaitliskajā aprēķinā strādā ar "pietiekami tuvu", nevis "precīzu vienlīdzību".

Simboliski vai skaitliski? Pareiza instrumenta izvēle

Statuss

Simbolisks (SymPy)

Skaitlis (NumPy/SciPy)

Ir slēgta formula

vēlams

nav nepieciešams

Bez formulas/pārāk sarežģīta

nevar atrisināt

vēlams

Nepieciešama pilnīga precizitāte

Apm.

Lielie dati / daudzkārtēja apstrāde

lēns

ļoti ātri

Pietiek ar rezultātu ar decimāldaļu

piemērots

Labs praktizētājs izmanto abus: ja iespējams, risina simboliski, ja nē, un, ja iespējams, salīdzina vienu ar otru.

Soli pa solim: drošs skaitlisks aprēķins ar AI

1. Nosakiet problēmu un jutīgumu. "Cik ciparu aiz komata?" un "kādā diapazonā?" Precizējiet savus jautājumus.

2. Ierakstiet kodu AI, nevis izvadiet. Atcerieties no 4. vienības: neveiciet AI paredzētā koda izvadi. Jūs palaižat kodu.

3. Izlasiet un saprotiet kodu. Izprotiet ģenerēto kodu pēc rindiņas. Pareiza bibliotēka, pareizā funkcija, pareizi parametri? Nepalaidiet kodu, kuru nesaprotat.

4. Pārbaude ar zināmu situāciju. Izmēģiniet kodu ar vienkāršu ievadi, uz kuru jūs jau zināt atbildi. Piemēram, sin(0)=0, tāpat kā zināma integrāļa vērtība. Ja kods to norādīs pareizi, jūs tam uzticēsities vairāk.

5. Pārbaude simboliski vai manuāli. Ja iespējams, apstipriniet to pašu rezultātu ar SymPy vai manuālu pieeju.

6. Sargieties no peldošā komata lamatām. Stingras vienlīdzības ar == vietā izmantojiet pielaides, piemēram, abs(a - b) < 1e-9.

Padoms. Vienmēr pārbaudiet ciparu kodu "ar jums zināmu atbildi". Ja uzrakstījāt saknes meklētāju, vispirms piemērojiet to vienādojumam ar zināmu sakni (x=±2), piemēram, x²−4=0. Ja kods to uzskata par pareizu, tas, visticamāk, būs uzticams vienādojumos, kurus jūs nezināt. Šī "saprāta pārbaude" ir lētākā pārbaude.

Skaitliskā aprēķina slazds: konverģence un kļūdu uzkrāšanās.

Lielākā daļa skaitlisko metožu darbojas iteratīvi: sākot no sākotnējā minējuma un pakāpeniski tuvojoties faktiskajai atbildei. Šo tuvināšanas procesu sauc par konverģenci. Bet ne katra iteratīvā metode vienmēr saplūst; daži novirzās (attālinās no rezultāta) vai tuvojas nepareizai vērtībai. Ja mākslīgā intelekta ģenerēts kods nepārbauda, ​​vai metode saplūst, tas var klusībā norādīt nepareizu skaitli. Tātad tikai tāpēc, ka skaitlisks rezultāts "radīja skaitli", tas nepadara to patiesu; Ir arī jāapstiprina, ka šis skaitlis faktiski sakrīt ar meklēto risinājumu.

Otrs smalkums ir kļūdu uzkrāšanās. Garā aprēķinu ķēdē nelielas peldošā komata noapaļošanas kļūdas katrā solī var uzkrāties un kļūt lielākas; It īpaši, ja ņemat starpību starp diviem ļoti tuvu lieliem skaitļiem (to sauc par katastrofālu atcelšanu), var tikt zaudēti nozīmīgi rezultāta cipari. Mākslīgais intelekts ne vienmēr paredz šādas skaitliskās stabilitātes problēmas. Kritiskos aprēķinos, pārrēķinot un salīdzinot rezultātu ar citu metodi vai ar lielāku precizitāti, tiek atklāta slēpta kļūdu uzkrāšanās.

Uzmanību: skaitliskās metodes “rezultāta došana” un “tuvināšanās pareizajam rezultātam” ir divas dažādas lietas. Pārliecinieties, vai kodā ir iekļauta konverģences pārbaude (piemēram, vai starpība starp divām secīgām darbībām kļūst pietiekami maza); Ja tas nesatur, lieciet mākslīgajam intelektam pievienot šo vadīklu.

trīs mini futrāļi

1. gadījums — nepareiza funkcijas izvēle. Students lūdza AI kodu, lai atrastu funkcijas sakni. AI izmantoja scipy.optimize.fsolve, taču izvēlējās sliktu sākotnējo minējumu un konverģēja uz nepareizo sakni. Students vispirms pārbaudīja funkciju, izveidojot to grafiski (sk. vizualizācijas vienību), sniedza pareizo sākotnējo minējumu un atrada īsto sakni. Nodarbība: skaitliskās saknes meklētāji ir jutīgi pret sākuma punktu.

2. gadījums — peldošā komata slazds. Inženieris veica AI kodu, kas ierakstīja, ja 0,1 + 0,2 == 0,3: un saprata, ka nosacījums nekad nav bijis patiess. AI bija ignorējis peldošā komata precizitāti. Kods tika labots ar abs((0.1+0.2) - 0.3) < 1e-9. 1e-9 nozīmē "desmit līdz mīnus deviņi", ļoti maza pielaide.

3. gadījums — veselā saprāta pārbaude atklāja kļūdu. Skolotājs saņēma kodu no scipy.integrate.quad, kas skaitliski aprēķina noteiktu integrāli. Vispirms viņš to pārbaudīja ar zināmu integrāli, piemēram, ∫₀¹ x dx = 0,5; kods deva 0,5. Pēc tam viņš aprēķināja faktisko integrāli un apstiprināja rezultātu ar SymPy. Viņš uzticējās, kad divas neatkarīgas metodes deva tādu pašu rezultātu. Kopējais laiks: 6 minūtes.

Četras kopējamas veidnes

1) Ciparu konta koda pieprasīšana:

Uzrakstiet Python kodu, kas SKAITĻI atrisina šādu problēmu: [problēma]. Izmantojiet NumPy/SciPy. Jutība: [piem. 6 decimālzīmes]. Es izpildīšu kodu; prognozēt izlaidi. Komentāra rindiņā īsi paskaidrojiet, kuru funkciju izvēlējāties un kāpēc.

2) Veselā saprāta pārbaudes pievienošana:

Pievienojiet šim kodam veselā saprāta pārbaudi, lai pārbaudītu tā PAREIZĪBU pirms tā palaišanas: izmēģiniet to ar vienkāršu ievadi, kur atbilde jau ir zināma (piemēram, sakne ±2 x²-4=0), un pārbaudiet, vai tas dod gaidīto rezultātu.Kods: [šeit]

3) Simboliskā un ciparu salīdzinošā pārbaude:

Uzrakstiet kodu, kas atrisina šādu integrāli/vienādojumu gan ar SymPy (simbolisku), gan SciPy (skaitlisku): [problēma]. Izdrukājiet abus rezultātus, lai varētu tos salīdzināt. Pievienojiet rindu, kas pārbauda atšķirības ar abs().

4) peldošā komata drošība:

Pārskatiet peldošā komata skaitļu salīdzinājumus šajā kodā. Ja ir stingras "==" vienādības, aizstājiet tās ar atbilstošu pielaidi (abs(a-b) < 1e-9) un paskaidrojiet, kāpēc. Kods: [šeit]

Vāja uzvedne / spēcīga uzvedne

Vājš: "Atrodiet šī vienādojuma sakni: x³ − 2x − 5 = 0. Uzrakstiet atbildi."
Rezultāts: AI atbilst decimālskaitļam (piemēram, "2,0946..."). Tā var būt vai nebūt patiesība; Tas nav pārbaudīts, jo tas nav palaists.
Jaudīgi: "Uzrakstiet kodu, kas ar SciPy atrod vienādojuma x³ − 2x − 5 = 0 reālo sakni. Sākotnējam minējumam vispirms norādiet intervālu, kurā funkcija maina zīmi. Pievienojiet rindiņu, kas aizstāj sakni un pārbauda, ​​vai rezultāts ir ~0. Es redzēšu izvadi."
Rezultāts: izpildāms kods, precīzs sākotnējais minējums, iebūvētas jaucējzīmes. Saknes derīgums ir pierādīts.

Biežas kļūdas

  • Uzticēšanās rezultātam, nepalaižot kodu. Skaitliskā izvade, ko AI “paredz”, nav validācija.
  • Pārbauda peldošā komata vienādību ar `==`. Tas gandrīz vienmēr ir nepareizi; Izmantojiet toleranci.
  • Slikta sākotnējā prognoze. Skaitliskās saknes/optimizācijas metodes ir jutīgas pret sākuma punktu; Tas var saplūst ar nepareizo sakni.
  • Neizpauž jūtīgumu. "Cik soļu?" Ja netiek prasīts, rezultāts var neatbilst vajadzībai.
  • Neveicot veselā saprāta pārbaudi. Koda lietošana reālai problēmai, nepārbaudot to ar zināmu ievadi, ir riskanti.
  • Palaižot kodu, to nesaprotot. Kods, kuru nesaprotat, iespējams, izmanto nepareizu funkciju; saprast katru rindu.
Uzmanību: Skaitliskie rezultāti vienmēr ir aptuveni. Tā vietā, lai teiktu "rezultāts ir tieši tāds", sakiet "tas ir tieši tāds". Inženierzinātnē vai zinātniskajā ziņojumā izmantotās metodes un precizitātes norādīšana ir daļa no precizitātes. Ir maldinoši uzrādīt aptuvenu rezultātu kā galīgu.

Rezumējot

Skaitliskais aprēķins dod aptuvenus, bet praktiskus rezultātus problēmām, kuras nevar atrisināt ar slēgto formulu; Programmā Python tā rīki ir NumPy un SciPy. AI ātri ģenerē kodu šīm bibliotēkām, taču jums ir jāpalaiž kods, tas jāizlasa un jāizprot un jāpārbauda ar zināmu ievadi. Esiet piesardzīgs ar peldošā komata precizitāti: izmantojiet pielaidi, nevis precīzu vienlīdzību. Ja iespējams, pārbaudiet simboliskās un skaitliskās metodes. Veselā saprāta pārbaude un aizstāšana ir lētākās un efektīvākās pārbaudes.

Lietojumprogrammas uzdevums

Izvēlieties uzdevumu, kuru ir grūti atrisināt ar slēgtu formulu (piemēram, sakne x³ − 2x − 5 = 0 vai neelementāra integrāļa noteikta vērtība). Lieciet AI izdrukāt gan ciparu kodu, gan, ja iespējams, simbolisku un ciparu kontrolpārbaudes kodu ar 1. un 3. veidni. Palaidiet kodu reālā Python vidē. Vispirms veiciet veselā saprāta pārbaudi ar zināmu ievadi, pēc tam atrisiniet faktisko problēmu. Ja ir peldošā komata salīdzinājums, noteikti izmantojiet pielaides. Ņemiet vērā rezultātu un tā jutīgumu.

kontrolsaraksts

  • [ ] Es identificēju problēmu un nepieciešamo jutīgumu.
  • [ ] Es izlasīju un sapratu AI radīto kodu rindu pa rindiņai.
  • [ ] Es palaižu kodu reālā Python vidē.
  • [ ] Es veicu veselā saprāta pārbaudi ar zināmu ievadi.
  • [ ] Ja iespējams, esmu pievienojis simbolisku/manuālu kontrolpārbaudi.
  • [ ] Peldošā komata salīdzinājumos izmantoju toleranci.