Üksus 5 / 11

Numbriline arvutamine, Python ja koodi genereerimine

Kasu:

  • Võimalus eristada sümboolset ja numbrilist arvutust ning valida iga probleemi jaoks õige tööriist (SymPy või NumPy/SciPy)
  • Võimalus lugeda ja mõista tehisintellekti toodetud numbrikoodi, seda ise käivitada ja kontrollida, tehes teadaoleva sisendiga terve mõistuse testi.
  • Mõistke ujukomaarvu täpsuse piire, kasutage täpse võrdsuse asemel tolerantsi ja hallake esialgse arvamise mõju numbrilistele meetoditele.

Sümboolne arvutus annab integraali või võrrandi täpse valemi; Kuid enamikku matemaatika praktilisi ülesandeid ei saa lahendada suletud valemiga. Siin tulebki mängu numbriline arvutamine: täpse valemi asemel soovitud täpsusega ligikaudse arvulise tulemuse loomine. Integraali väärtuse leidmine 0,001 täpsusega, võrrandi juure arvutamine kümnendlähenduse täpsusega, andmekogumist statistika eraldamine – need kõik on arvulised arvutused. Pythonis on selleks tööriistadeks NumPy (arvumassiivid ja matemaatika) ja SciPy (teaduslik andmetöötlus) teegid. Selles üksuses õpite kasutama AI-d assistendina, mis genereerib Pythoni koodi numbriliseks arvutamiseks ja kontrollib koodi õigsust.

Kriitiline määratlus: ujukomaarv on formaat, milles arvuti salvestab kümnendarvud piiratud täpsusega. Sellepärast võib arvutiaritmeetikas 0,1 + 0,2 saada 0,30000000000000004, mitte täpselt 0,3. See ei ole viga, see on arvulise arvutuse olemus – kuid see toob kaasa valede tulemuste, kui te sellest teadlik ei ole. Numbriarvutuses töötatakse pigem "piisavalt lähedase" kui "täpse võrdsusega".

Sümboolne või numbriline? Õige tööriista valimine

Olek

Sümboolne (SymPy)

Numbriline (NumPy/SciPy)

Seal on suletud valem

eelistatud

pole vajalik

Valem puudub/liiga keeruline

ei oska lahendada

eelistatud

Nõutav täielik täpsus

Jah

u.

Suurandmed / multitöötlus

aeglane

väga kiire

Piisab kümnendkoha tulemusest

sobiv

Hea praktik kasutab mõlemat: võimalusel lahendage sümboolselt, kui mitte, kasutage numbrit ja kontrollige võimaluse korral üht teisega.

Samm-sammult: turvaline arvuline arvutus tehisintellektiga

1. Tuvastage probleem ja tundlikkus. "Mitu komakohta?" ja "millises vahemikus?" Täpsustage oma küsimusi.

2. Kirjutage kood tehisintellektile, mitte väljastama. Pidage meeles üksusest 4: ärge laske tehisintellektil koodi väljundit ennustada. Käitate koodi.

3. Lugege koodi läbi ja mõistke seda. Mõistke loodud koodi rida rea ​​haaval. Õige raamatukogu, õige funktsioon, õiged parameetrid? Ärge käivitage koodi, millest te aru ei saa.

4. Testige teadaoleva olukorraga. Proovige koodi lihtsa sisendiga, millele te juba teate vastust. Näiteks sin(0)=0, nagu teadaoleva integraali väärtus. Kui kood annab selle õigesti, usaldate seda rohkem.

5. Ristkontroll sümboolselt või käsitsi. Võimalusel kinnitage sama tulemus SymPy abil või käsitsi.

6. Hoiduge ujukomalõksudest. Range võrdsuse asemel == kasutage tolerantse nagu abs(a - b) < 1e-9.

Näpunäide: testige alati numbrilist koodi "teadtava vastusega". Kui kirjutasite juureotsija, rakendage see esmalt teadaoleva juurega võrrandile (x=±2), näiteks x²−4=0. Kui kood leiab, et see on õige, on see tõenäolisem võrrandite puhul, mida te ei tea. See "terve mõistuse kontroll" on odavaim kontroll.

Arvarvutuse lõks: lähenemine ja vigade kogunemine.

Enamik arvulisi meetodeid töötab iteratiivselt: alustades esialgsest oletusest ja lähenedes järk-järgult tegelikule vastusele. Seda lähenemise protsessi nimetatakse lähenemiseks. Kuid mitte iga iteratiivne meetod ei ühti alati; mõned lahknevad (niidub tulemusest eemale) või lähenevad valele väärtusele. Kui AI-ga loodud kood ei kontrolli, kas meetod läheneb, võib see vaikselt anda teile vale numbri. Nii et see, et numbriline tulemus "tootis arvu", ei muuda seda tõeks; Samuti on vaja kinnitada, et see arv läheneb tegelikult otsitud lahendusele.

Teine peensus on vigade kogunemine. Pikas arvutusahelas võivad väikesed ujukoma ümardamisvead igal etapil koguneda ja suureneda; Eriti kui võtta kahe väga lähedase suure arvu vahe (seda nimetatakse katastroofiliseks tühistamiseks), võivad tulemuse olulised numbrid kaduma minna. Tehisintellekt ei ennusta alati selliseid arvulise stabiilsuse probleeme. Kriitiliste arvutuste puhul ilmneb tulemuse ümberarvutamisel ja võrdlemisel mõne muu meetodiga või suurema täpsusega varjatud vigade kuhjumine.

Tähelepanu: numbrilise meetodi "tulemuse andmine" ja "õige tulemuseni lähenemine" on kaks erinevat asja. Veenduge, et kood sisaldaks konvergentsi kontrolli (nt kas kahe järjestikuse etapi erinevus muutub piisavalt väikeseks); Kui see seda ei sisalda, laske tehisintellektil see juhtelement lisada.

kolm minikarpi

Juhtum 1 – funktsiooni vale valik. Õpilane küsis AI-lt koodi, et leida funktsiooni juur. AI kasutas faili scipy.optimize.fsolve, kuid valis esialgse oletuse halvasti ja lähenes valele juurele. Õpilane uuris esmalt funktsiooni graafiku abil (vt visualiseerimisüksus), andis õige esialgse oletuse ja leidis tegeliku juure. Õppetund: numbrilise juure leidjad on alguspunkti suhtes tundlikud.

Juhtum 2 – ujukoma lõks. Insener käivitas AI-koodi, mis kirjutas, kui 0,1 + 0,2 == 0,3: ja mõistis, et tingimus ei vastanud kunagi tõele. AI oli ujukoma täpsust ignoreerinud. Koodi parandati abs((0,1+0,2) - 0,3) < 1e-9. 1e-9 tähendab "kümme miinus üheksani", väga väike tolerants.

Juhtum 3 – terve mõistuse testimine tabas vea. Õpetaja sai failist scipy.integrate.quad koodi, mis arvutab arvuliselt kindla integraali. Esmalt katsetas ta seda tuntud integraaliga, näiteks ∫₀¹ x dx = 0,5; kood andis 0,5. Seejärel arvutas ta välja tegeliku integraali ja kinnitas tulemuse SymPy abil. Ta usaldas, kui kaks sõltumatut meetodit andsid sama tulemuse. Koguaeg: 6 minutit.

Neli kopeeritavat malli

1) numbrilise kontokoodi taotlemine:

Kirjutage Pythoni kood, mis lahendab NUMBRILISELT järgmise probleemi: [probleem]. Kasutage NumPy/SciPy. Tundlikkus: [nt. 6 kohta pärast koma]. Käivitan koodi; väljundi ennustamine. Selgitage kommentaarireal lühidalt, millise funktsiooni valisite ja miks.

2) Terve mõistuse testi lisamine:

Lisage sellele koodile terve mõistuse kontroll, et testida selle ÕIGSUST enne selle käivitamist: proovige seda lihtsa sisendiga, kus vastus on juba teada (nt juur ±2 x²-4=0 korral) ja kontrolli, kas see annab oodatud tulemuse.Kood: [siin]

3) Sümboolne ja numbriline ristkontroll:

Kirjutage kood, mis lahendab järgmise integraali/võrrandi NII SymPy-ga (sümboliline) KUI ka SciPy-ga (numbriline): [probleem]. Printige need kaks tulemust välja, et saaksin neid võrrelda. Lisage rida, mis kontrollib erinevusi abs().

4) Ujukoma turvalisus:

Vaadake üle selle koodi ujukomaarvude võrdlused. Kui on olemas ranged '==' võrdsused, asendage need sobiva tolerantsiga (abs(a-b) < 1e-9) ja selgitage, miks. Kood: [siin]

Nõrk viip / Tugev viip

Nõrk: "Leia selle võrrandi juur: x³ − 2x − 5 = 0. Kirjutage vastus."
Tulemus: tehisintellekt sobib kümnendarvuga (nt "2.0946..."). See võib olla tõsi, kuid ei pruugi olla tõsi; Seda ei ole kinnitatud, kuna seda ei ole käivitatud.
Võimas: "Kirjutage kood, mis leiab SciPy abil võrrandi x³ − 2x − 5 = 0 tegeliku juure. Esialgseks arvamiseks määra esmalt intervall, kus funktsioon märki muudab. Lisa rida, mis asendab juurt ja kontrollib, et tulemus oleks ~0. Näen väljundit."
Tulemus: käivitatav kood, täpne esialgne oletus, sisseehitatud räsid. Juure kehtivus on tõestatud.

Levinud vead

  • Tulemuse usaldamine ilma koodi käivitamata. Numbriline väljund, mida AI "ennustab", ei ole valideerimine.
  • Ujukoma võrdsuse testimine väärtusega `=='. See on peaaegu alati vale; Kasutage tolerantsi.
  • Halb esialgne prognoos. Arvjuure/optimeerimise meetodid on lähtepunkti suhtes tundlikud; See võib läheneda valele juurele.
  • Ei väljenda tundlikkust. "Mitu sammu?" Kui seda ei küsita, ei pruugi tulemus vajadusega vastata.
  • Ei tee terve mõistuse testi. Koodi rakendamine tõelisele probleemile ilma seda teadaoleva sisendiga testimata on riskantne.
  • Koodi käivitamine ilma sellest aru saamata. Kood, millest te aru ei saa, võib kasutada valet funktsiooni; mõista iga rida.
Ettevaatust! Numbrilised tulemused on alati ligikaudsed. Selle asemel, et öelda "tulemus on täpselt selline", öelge "see on täpselt selline". Tehnilises või teaduslikus aruandes on kasutatud meetodi ja täpsuse märkimine osa täpsusest. On eksitav esitada ligikaudne tulemus lõplikuna.

Kokkuvõttes

Arvarvutus annab ligikaudsed, kuid praktilised tulemused ülesannete jaoks, mida ei saa lahendada suletud valemiga; Pythonis on selle tööriistad NumPy ja SciPy. AI genereerib nende teekide jaoks kiiresti koodi, kuid peate koodi käivitama, lugema ja mõistma ning testima teadaoleva sisendiga. Olge ujukoma täpsusega ettevaatlik: kasutage pigem tolerantsi kui täpset võrdsust. Võimalusel kontrollige sümboolseid ja numbrilisi meetodeid. Terve mõistuse testimine ja asendamine on kõige odavamad ja tõhusamad kontrollid.

Rakenduse ülesanne

Valige ülesanne, mida on suletud valemiga raske lahendada (nt juur x³ − 2x − 5 = 0 või mitteelementaarintegraali kindel väärtus). Laske tehisintellektil printida nii numbriline kood kui ka võimalusel sümboolne-numbriline ristkontrolli kood mallidega 1 ja 3. Käivitage kood päris Pythoni keskkonnas. Esmalt tehke teadaoleva sisendiga terve mõistuse test ja seejärel lahendage tegelik probleem. Ujukoma võrdluse korral kasutage kindlasti tolerantse. Pange tähele tulemust koos selle tundlikkusega.

kontrollnimekiri

  • [ ] Tuvastasin probleemi ja vajaliku tundlikkuse.
  • [ ] Lugesin tehisintellekti loodud koodi rida-realt läbi ja sain sellest aru.
  • [ ] Käivitasin koodi päris Pythoni keskkonnas.
  • [ ] Tegin terve mõistuse testi teadaoleva sisendiga.
  • [ ] Lisasin võimalusel sümboolse/käsitsi ristkontrolli.
  • [ ] Kasutasin ujukomavõrdlustes tolerantsi.