Njësia 5 / 11

Llogaritja numerike, Python dhe gjenerimi i kodeve

Fitimet:

  • Aftësia për të dalluar llogaritjen simbolike dhe numerike dhe për të zgjedhur mjetin e duhur (SymPy ose NumPy/SciPy) për çdo problem
  • Aftësia për të lexuar dhe kuptuar kodin numerik të prodhuar nga inteligjenca artificiale, për ta ekzekutuar vetë dhe për ta verifikuar duke kryer një test të sensit të përbashkët me një hyrje të njohur.
  • Kuptoni kufijtë e saktësisë së numrave me pikë lundruese, përdorni tolerancën në vend të barazisë së saktë dhe menaxhoni ndikimin e supozimeve fillestare në metodat numerike.

Llogaritja simbolike jep formulën e saktë të një integrali ose ekuacioni; Por shumica e problemeve praktike në matematikë nuk mund të zgjidhen me një formulë të mbyllur. Këtu hyn në lojë llogaritja numerike: prodhimi i një rezultati të përafërt numerik me saktësinë e dëshiruar, në vend të një formule të saktë. Gjetja e vlerës së një integrali me saktësi 0,001, llogaritja e rrënjës së një ekuacioni në përafrimin dhjetor, nxjerrja e statistikave nga një grup të dhënash - të gjitha këto janë llogaritje numerike. Në Python, mjetet për këtë janë bibliotekat NumPy (vargje numerike dhe matematikë) dhe SciPy (llogaritje shkencore). Në këtë njësi, do të mësoni të përdorni AI si një asistent që gjeneron kodin Python për llogaritjen numerike dhe kontrolloni korrektësinë e kodit.

Një përkufizim kritik: një numër me pikë lundruese është një format në të cilin një kompjuter ruan numra dhjetorë me saktësi të kufizuar. Kjo është arsyeja pse në aritmetikën kompjuterike, 0.1 + 0.2 mund të rezultojë të jetë 0.300000000000000004, jo saktësisht 0.3. Ky nuk është një gabim, është natyra e llogaritjes numerike - por do të çojë në rezultate të pasakta nëse nuk jeni në dijeni të tij. Në llogaritjen numerike, njeriu punon me "mjaft afër" dhe jo "barazi të saktë".

Simbolike apo numerike? Zgjedhja e mjetit të duhur

Statusi

simbolike (SymPy)

Numerike (NumPy/SciPy)

Ekziston një formulë e mbyllur

e preferuar

jo e nevojshme

Pa formulë/shumë komplekse

nuk mund të zgjidhet

e preferuar

Kërkohet saktësi e plotë

po

Përafërsisht.

Të dhëna të mëdha / multi-përpunim

i ngadalshëm

shumë shpejt

Rezultati me dhjetor është i mjaftueshëm

-

të përshtatshme

Një praktikues i mirë i përdor të dyja: zgjidh në mënyrë simbolike nëse është e mundur, shko numerik nëse jo dhe kontrollo njërën me tjetrën sa herë që është e mundur.

Hap pas hapi: Siguroni llogaritjen numerike me AI

1. Identifikoni problemin dhe ndjeshmërinë. "Sa vende dhjetore?" dhe "në çfarë kufiri?" Sqaroni pyetjet tuaja.

2. Shkruani kodin në AI, jo në dalje. Mbani mend nga njësia 4: Mos e bëni daljen e kodit të AI të parashikojë. Ju ekzekutoni kodin.

3. Lexoni dhe kuptoni kodin. Kuptoni kodin e gjeneruar rresht pas rreshti. Biblioteka e duhur, funksioni i duhur, parametrat e duhur? Mos ekzekutoni kodin që nuk e kuptoni.

4. Test me një situatë të njohur. Provoni kodin me një hyrje të thjeshtë për të cilën tashmë e dini përgjigjen. Për shembull, sin(0)=0, si vlera e një integrali të njohur. Nëse kodi e jep saktë, do t'i besoni më shumë.

5. Kontroll kryq simbolikisht ose manualisht. Nëse është e mundur, konfirmoni të njëjtin rezultat me SymPy ose një qasje manuale.

6. Kujdes nga kurthe me pikë lundruese. Në vend të barazisë strikte me ==, përdorni tolerancat si abs(a - b) < 1e-9.

Këshillë: Provoni gjithmonë një kod numerik "me një përgjigje që dini". Nëse keni shkruar një gjetës të rrënjës, së pari zbatojeni atë në një ekuacion me një rrënjë të njohur (x=±2), si p.sh. x²−4=0. Nëse kodi e gjen këtë të saktë, ka më shumë gjasa të jetë i besueshëm në ekuacionet që nuk i njihni. Ky "kontroll i shëndetit" është verifikimi më i lirë.

Gracka e llogaritjes numerike: konvergjenca dhe akumulimi i gabimeve.

Shumica e metodave numerike funksionojnë në mënyrë të përsëritur: duke filluar nga një supozim fillestar dhe duke iu afruar gradualisht përgjigjes aktuale. Ky proces i afrimit quhet konvergjencë. Por jo çdo metodë përsëritëse konvergjon gjithmonë; disa ndryshojnë (largohen nga rezultati) ose konvergojnë në një vlerë të pasaktë. Nëse një kod i krijuar nga AI nuk kontrollon nëse metoda konvergjon, ai mund t'ju japë në heshtje një numër të gabuar. Pra, vetëm për shkak se një rezultat numerik "prodhoi një numër" nuk e bën atë të vërtetë; Është gjithashtu e nevojshme të konfirmohet se ai numër në të vërtetë konvergon me zgjidhjen e kërkuar.

Një hollësi e dytë është akumulimi i gabimeve. Në një zinxhir të gjatë llogaritjesh, gabime të vogla rrumbullakimi me pikë lundruese në çdo hap mund të grumbullohen dhe të bëhen më të mëdha; Sidomos kur merrni diferencën e dy numrave të mëdhenj shumë afër (kjo quhet anulim katastrofik), shifra të rëndësishme të rezultatit mund të humbasin. Inteligjenca artificiale nuk parashikon gjithmonë probleme të tilla të stabilitetit numerik. Në llogaritjet kritike, rillogaritja dhe krahasimi i rezultatit me një metodë të ndryshme ose me saktësi më të lartë zbulon akumulimin e gabimit të fshehur.

Kujdes: "Dhënia e një rezultati" dhe "konvergimi në rezultatin e saktë" të një metode numerike janë dy gjëra të ndryshme. Sigurohuni që kodi të përfshijë një kontroll konvergjence (p.sh., që ndryshimi midis dy hapave të njëpasnjëshëm të bëhet mjaft i vogël); Nëse nuk e përmban, lërini inteligjencën artificiale të shtojë këtë kontroll.

tre mini kuti

Rasti 1 — Zgjedhja e gabuar e funksionit. Një student i kërkoi AI kodin për të gjetur rrënjën e një funksioni. Inteligjenca artificiale përdori scipy.optimize.fsolve, por zgjodhi një supozim fillestar të keq dhe konvergjoi në rrënjën e gabuar. Nxënësi fillimisht ekzaminoi funksionin duke e paraqitur atë në grafik (shih njësinë e vizualizimit), dha supozimin e saktë fillestar dhe gjeti rrënjën e vërtetë. Mësimi: Gjetësit numerikë të rrënjëve janë të ndjeshëm ndaj pikës fillestare.

Rasti 2 — Kurthi me pikë lundruese. Një inxhinier ekzekutoi një kod të AI që shkruante nëse 0.1 + 0.2 == 0.3: dhe kuptoi se kushti nuk ishte kurrë i vërtetë. AI kishte injoruar saktësinë e pikës lundruese. Kodi u korrigjua me abs((0.1+0.2) - 0.3) < 1e-9. 1e-9 do të thotë "dhjetë në minus nëntë", një tolerancë shumë e vogël.

Rasti 3 - Testimi i arsyes së shëndoshë e kapi gabimin. Një mësues mori kodin nga scipy.integrate.quad që llogarit numerikisht një integral të caktuar. Ai së pari e testoi atë me një integral të njohur si ∫₀¹ x dx = 0.5; kodi jepte 0.5. Pastaj ai llogariti integralin aktual dhe konfirmoi rezultatin me SymPy. Ai besonte kur dy metoda të pavarura jepnin të njëjtin rezultat. Koha totale: 6 minuta.

Katër shabllone të kopjueshëm

1) Kërkimi i një kodi numerik të llogarisë:

Shkruani kodin Python që zgjidh problemin e mëposhtëm NË NUMERIK: [problem]. Përdorni NumPy/SciPy. Ndjeshmëria: [p.sh. 6 dhjetore]. Unë do të ekzekutoj kodin; parashikimi i prodhimit. Shpjegoni shkurtimisht në një rresht komenti se cilin funksion keni zgjedhur dhe pse.

2) Shtimi i një testi të sensit të përbashkët:

Shtoni një kontroll me sens të përbashkët në këtë kod për të testuar SAKTËSINË e tij përpara se ta ekzekutoni: provojeni me një hyrje të thjeshtë ku përgjigja dihet tashmë (p.sh. rrënjë ±2 për x²-4=0) dhe kontrolloni që ai të japë rezultatin e pritur. Kodi: [këtu]

3) Kontrolli i kryqëzuar simbolik-numerik:

Shkruani kodin që zgjidh integralin/ekuacionin e mëposhtëm me SymPy (simbolik) DHE SciPy (numerik): [problem]. Shtypni dy rezultatet në mënyrë që t'i krahasoj ato. Shtoni një linjë që kontrollon ndryshimet me abs().

4) Siguria me pikë lundruese:

Rishikoni krahasimet e numrave me pikë lundruese në këtë kod. Nëse ka barazi strikte '==', zëvendësojini ato me një tolerancë të përshtatshme (abs(a-b) < 1e-9) dhe shpjegoni pse. Kodi: [këtu]

Prompt i dobët / Prompt i fortë

I dobët: "Gjeni rrënjën e këtij ekuacioni: x³ − 2x − 5 = 0. Shkruaj përgjigjen."
Rezultati: AI i përshtatet një numri dhjetor (p.sh. "2.0946..."). Mund të jetë ose jo e vërtetë; Nuk është verifikuar sepse nuk është drejtuar.
Fuqishëm: "Shkruani një kod që gjen rrënjën reale të ekuacionit x³ − 2x − 5 = 0 me SciPy. Për supozimin fillestar, fillimisht specifikoni intervalin ku funksioni ndryshon shenjën. Shto një rresht që zëvendëson rrënjën dhe kontrollon që rezultati të jetë ~0. Unë do të shoh daljen."
Rezultati: Kodi i ekzekutueshëm, supozimi fillestar i saktë, hash-et e integruara. Vlefshmëria e rrënjës është vërtetuar.

Gabimet e zakonshme

  • Besimi i rezultatit pa ekzekutuar kodin. Prodhimi numerik që AI "parashikon" nuk është vërtetim.
  • Testimi i barazisë me pikë lundruese me `==`. Është pothuajse gjithmonë e gabuar; Përdorni tolerancën.
  • Parashikimi fillestar i keq. Metodat numerike të rrënjës/optimizimit janë të ndjeshme ndaj pikës fillestare; Mund të konvergojë në rrënjën e gabuar.
  • Duke mos shprehur ndjeshmëri. "Sa hapa?" Nëse nuk kërkohet, rezultati mund të mos i përshtatet nevojës.
  • Duke mos marrë një test sensi të përbashkët. Aplikimi i kodit për një problem real pa e testuar atë me një hyrje të njohur është i rrezikshëm.
  • Ekzekutimi i kodit pa e kuptuar atë. Kodi që nuk e kuptoni mund të jetë duke përdorur funksionin e gabuar; kuptojnë çdo rresht.
Kujdes: Rezultatet numerike janë gjithmonë të përafërta. Në vend që të thoni "rezultati është pikërisht ky", thoni "ky është pikërisht ai". Në një raport inxhinierik ose shkencor, deklarimi i metodës dhe saktësisë së përdorur është pjesë e saktësisë. Është mashtruese të paraqitet një rezultat i përafërt si përfundimtar.

Në përmbledhje

Llogaritja numerike jep rezultate të përafërta por praktike për probleme që nuk mund të zgjidhen me formulë të mbyllur; Në Python, mjetet e tij janë NumPy dhe SciPy. AI gjeneron shpejt kodin për këto biblioteka, por ju duhet ta ekzekutoni kodin, ta lexoni dhe ta kuptoni atë dhe ta provoni me të dhëna të njohura. Kini kujdes me saktësinë e pikës lundruese: përdorni tolerancën sesa barazinë e saktë. Nëse është e mundur, kontrolloni metodat simbolike dhe numerike. Testimi dhe zëvendësimi i arsyes së shëndoshë janë verifikimet më të lira dhe më efektive.

Detyra e aplikimit

Zgjidhni një problem që është i vështirë për t'u zgjidhur me një formulë të mbyllur (p.sh., rrënja x³ − 2x − 5 = 0, ose vlera e caktuar e një integrali jo elementar). Bëni që AI të printojë kodin numerik dhe, nëse është e mundur, kodin simbolik-numerik të kontrollit të kryqëzuar me shabllonet 1 dhe 3. Ekzekutoni kodin në një mjedis të vërtetë Python. Së pari bëni një test të sensit të përbashkët me një hyrje të njohur, pastaj zgjidhni problemin aktual. Sigurohuni që të përdorni tolerancat nëse ka një krahasim me pikë lundruese. Vini re rezultatin së bashku me ndjeshmërinë e tij.

listë kontrolli

  • [ ] Identifikova problemin dhe ndjeshmërinë e kërkuar.
  • [ ] Kam lexuar dhe kuptuar kodin e prodhuar nga AI rresht pas rreshti.
  • [ ] Kam përdorur kodin në një mjedis të vërtetë Python.
  • [ ] Unë bëra një test të sensit të përbashkët me një hyrje të njohur.
  • [ ] Unë kam shtuar një kontroll të kryqëzuar simbolik/manual nëse është e mundur.
  • [ ] Kam përdorur tolerancë në krahasimet me pikë lundruese.