Јединица 5 / 11

Нумеричко израчунавање, Питхон и генерисање кода

Добици:

  • Способност да се направи разлика између симболичког и нумеричког рачуна и да се изабере прави алат (СимПи или НумПи/СциПи) за сваки проблем
  • Способност да прочитате и разумете нумерички код који производи вештачка интелигенција, да га сами покренете и проверите извођењем теста здравог разума са познатим уносом.
  • Схватите границе прецизности бројева са покретним зарезом, користите толеранцију уместо тачне једнакости и управљајте утицајем почетног нагађања на нумеричке методе.

Симболички рачун даје тачну формулу интеграла или једначине; Али већина практичних проблема у математици не може се решити затвореном формулом. Овде долази у обзир нумеричко израчунавање: добијање приближног нумеричког резултата са жељеном прецизношћу, а не тачне формуле. Проналажење вредности интеграла са прецизношћу од 0,001, израчунавање корена једначине у децималној апроксимацији, издвајање статистике из скупа података — све су то нумерички прорачуни. У Питхон-у, алати за ово су библиотеке НумПи (нумерички низови и математика) и СциПи (научно рачунарство). У овој јединици ћете научити да користите АИ као помоћника који генерише Питхон код за нумеричко израчунавање и проверите исправност кода.

Критичка дефиниција: број са покретним зарезом је формат у којем рачунар чува децималне бројеве са ограниченом прецизношћу. Зато у компјутерској аритметици 0,1 + 0,2 може бити 0,30000000000000004, а не баш 0,3. Ово није грешка, то је природа нумеричког израчунавања — али ће довести до нетачних резултата ако тога нисте свесни. У нумеричком прорачуну, ради се са „довољно близу“, а не са „тачном једнакошћу“.

Симболички или бројчани? Избор правог алата

Статус

симболички (СимПи)

Нумерички (НумПи/СциПи)

Постоји затворена формула

преферирано

није неопходно

Нема формуле/превише сложен

не могу решити

преферирано

Потребна је потпуна прецизност

Да

Прибл.

Велики подаци / вишеструка обрада

споро

веома брзо

Резултат са децималом је довољан

погодан

Добар практичар користи обоје: реши симболички ако је могуће, иди нумерички ако не, и унакрсно провери једно са другим кад год је то могуће.

Корак по корак: Безбедно нумеричко израчунавање помоћу вештачке интелигенције

1. Идентификујте проблем и осетљивост. „Колико децималних места?“ и "у ком опсегу?" Разјасните своја питања.

2. Напишите код на АИ, а не на излаз. Запамтите из јединице 4: Не правите да АИ предвиђа излаз кода. Покрени код.

3. Прочитајте и разумејте код. Разумети генерисани код ред по ред. Права библиотека, права функција, прави параметри? Немојте покретати код који не разумете.

4. Тест са познатом ситуацијом. Испробајте код са једноставним уносом за који већ знате одговор. На пример, син(0)=0, као вредност познатог интеграла. Ако га код даје исправно, више ћете му веровати.

5. Унакрсна провера симболично или ручно. Ако је могуће, потврдите исти резултат са СимПи или ручним приступом.

6. Чувајте се замки са плутајућим зарезом. Уместо строге једнакости са ==, користите толеранције као што су абс(а - б) < 1е-9.

Савет: Увек тестирајте нумерички код „са одговором који знате“. Ако сте написали проналазач корена, прво га примените на једначину са познатим кореном (к=±2), као што је к²−4=0. Ако код утврди да је ово тачно, већа је вероватноћа да ће бити поуздан у једначинама које не познајете. Ова „провера урачунљивости“ је најјефтинија провера.

Замка нумеричког рачуна: конвергенција и акумулација грешака.

Већина нумеричких метода функционише итеративно: почевши од почетног нагађања и постепено приближавајући се стварном одговору. Овај процес приближавања назива се конвергенција. Али не конвергира се увек сваки итеративни метод; неки се разилазе (удаљавају од резултата) или конвергирају на нетачну вредност. Ако код генерисан вештачком интелигенцијом не провери да ли се метода конвергира, може вам тихо дати погрешан број. Дакле, само зато што је нумерички резултат "произвео број" не чини га истинитим; Такође је потребно потврдити да се тај број заиста приближава траженом решењу.

Друга суптилност је акумулација грешака. У дугом ланцу прорачуна, мале грешке заокруживања са плутајућим зарезом у сваком кораку могу се акумулирати и постати веће; Нарочито када узмете разлику два веома блиска велика броја (ово се зове катастрофално поништавање), значајне цифре резултата се могу изгубити. Вештачка интелигенција не предвиђа увек такве проблеме нумеричке стабилности. У критичним прорачунима, поновно израчунавање и упоређивање резултата другом методом или са већом прецизношћу открива скривену акумулацију грешака.

Пажња: „Давање резултата“ и „конвергирање до тачног резултата“ нумеричке методе су две различите ствари. Уверите се да код укључује проверу конвергенције (нпр. да разлика између два узастопна корака постане довољно мала); Ако је не садржи, нека вештачка интелигенција дода ову контролу.

три мини кофера

Случај 1 — Нетачан избор функције. Студент је од АИ тражио код да пронађе корен функције. АИ је користио сципи.оптимизе.фсолве, али је изабрао лошу почетну претпоставку и конвергирао на погрешан корен. Ученик је прво испитао функцију цртајући је (погледајте јединицу за визуелизацију), дао исправну почетну претпоставку и пронашао прави корен. Поука: нумерички проналазачи корена су осетљиви на почетну тачку.

Случај 2 — Замка са плутајућим зарезом. Инжењер је покренуо АИ код који је написао ако је 0,1 + 0,2 == 0,3: и схватио да услов никада није био истинит. АИ је игнорисао прецизност са покретним зарезом. Код је исправљен са абс((0.1+0.2) - 0.3) < 1е-9. 1е-9 значи "десет на минус девет", врло мала толеранција.

Случај 3 — Тестирање здравог разума је открило грешку. Наставник је добио код од сципи.интеграте.куад који нумерички израчунава одређени интеграл. Прво га је тестирао са познатим интегралом као што је ∫₀¹ к дк = 0,5; код је дао 0,5. Затим је израчунао стварни интеграл и потврдио резултат са СимПи. Веровао је када су две независне методе дале исти резултат. Укупно време: 6 минута.

Четири шаблона за копирање

1) Захтевање бројчаног кода рачуна:

Напишите Питхон код који НУМЕРИЧКИ решава следећи проблем: [проблем]. Користите НумПи/СциПи. Осетљивост: [нпр. 6 децимала]. Ја ћу покренути код; предвиђање излаза. Укратко објасните у реду за коментаре коју сте функцију изабрали и зашто.

2) Додавање теста здравог разума:

Додајте проверу здравог разума овом коду да бисте тестирали његову ИСПРАВНОСТ пре него што га покренете: покушајте са једноставним уносом где је одговор већ познат (нпр. роот ±2 за к²-4=0) и проверите да ли даје очекивани резултат. Код: [овде]

3) Симболичко-нумеричка унакрсна провера:

Напишите код који решава следећи интеграл/једначину са ОБА СимПи (симболички) И СциПи (нумерички): [проблем]. Одштампајте два резултата да бих могао да их упоредим. Додајте линију која проверава разлике са абс().

4) Сигурност са плутајућим зарезом:

Прегледајте поређења бројева у покретном зарезу у овом коду. Ако постоје строге једнакости '==', замените их одговарајућом толеранцијом (абс(а-б) < 1е-9) и објасните зашто. Шифра: [овде]

Слаби промпт / Јаки промпт

Слабо: „Пронађи корен ове једначине: к³ − 2к − 5 = 0. Напиши одговор.“
Резултат: АИ одговара децималном броју (нпр. "2,0946..."). Може, али и не мора бити истина; Није верификован јер није покренут.
Моћно: "Напишите код који проналази прави корен једначине к³ − 2к − 5 = 0 са СциПи. За почетно нагађање, прво наведите интервал у коме функција мења предзнак. Додајте линију која замењује корен и проверава да ли је резултат ~0. Видећу излаз."
Резултат: Извршни код, тачно почетно нагађање, уграђени хешови. Ваљаност корена је доказана.

Уобичајене грешке

  • Верујте резултату без покретања кода. Нумерички излаз који АИ „предвиђа“ није валидација.
  • Тестирање једнакости са помичним зарезом са `==`. Скоро увек је погрешно; Користите толеранцију.
  • Лоша почетна прогноза. Нумеричке методе корена/оптимизације су осетљиве на почетну тачку; Може доћи до погрешног корена.
  • Не изражава осетљивост. "Колико корака?" Ако се не пита, резултат можда неће одговарати потреби.
  • Не полагати тест здравог разума. Примена кода на прави проблем без тестирања са познатим уносом је ризична.
  • Покретање кода без разумевања. Код који не разумете можда користи погрешну функцију; разуме сваки ред.
Опрез: Нумерички резултати су увек приближни. Уместо да кажете „резултат је управо ово“, реците „ово је управо то“. У инжењерском или научном извештају, навођење коришћеног метода и прецизности део је тачности. Погрешно је представљати приближан резултат као дефинитиван.

Укратко

Нумерички рачун даје приближне, али практичне резултате за проблеме који се не могу решити затвореном формулом; У Питхон-у, његови алати су НумПи и СциПи. АИ брзо генерише код за ове библиотеке, али морате покренути код, прочитати га и разумети га и тестирати са познатим уносом. Будите пажљиви са прецизношћу са помичним зарезом: користите толеранцију уместо тачне једнакости. Унакрсно проверите симболичке и нумеричке методе ако је могуће. Тестирање здравог разума и замена су најјефтиније и најефикасније провере.

Задатак апликације

Изаберите проблем који је тешко решити затвореном формулом (нпр. корен к³ − 2к − 5 = 0, или дефинитивна вредност неелементарног интеграла). Нека АИ одштампа и нумерички код и, ако је могуће, симболички-нумерички код за унакрсну проверу са шаблонима 1 и 3. Покрените код у правом Питхон окружењу. Прво урадите тест здравог разума са познатим уносом, а затим решите стварни проблем. Обавезно користите толеранције ако постоји поређење у покретном зарезу. Обратите пажњу на резултат заједно са његовом осетљивошћу.

контролна листа

  • [ ] Идентификовао сам проблем и потребну осетљивост.
  • [ ] Прочитао сам и разумео код који је произвела АИ ред по ред.
  • [ ] Покренуо сам код у правом Питхон окружењу.
  • [ ] Урадио сам тест здравог разума са познатим уносом.
  • [ ] Додао сам симболичку/ручну унакрсну проверу ако је могуће.
  • [ ] Користио сам толеранцију у поређењима са покретним зарезом.