Единица 5 / 11

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

Добивки:

  • Способност да се направи разлика помеѓу симболичко и нумеричко пресметување и да се избере вистинската алатка (SymPy или NumPy/SciPy) за секој проблем
  • Способност да го читате и разберете нумеричкиот код произведен од вештачката интелигенција, да го извршите сами и да го потврдите со извршување на тест за здрав разум со познат влез.
  • Разберете ги границите на прецизноста на броевите со подвижна запирка, користете толеранција наместо точна еднаквост и управувајте со влијанието на првичното погодување врз нумеричките методи.

Симболичкото сметање ја дава точната формула на интеграл или равенка; Но, повеќето практични проблеми во математиката не можат да се решат со затворена формула. Тука влегува во игра нумеричкото пресметување: производство на приближен нумерички резултат со саканата прецизност, наместо точна формула. Наоѓање на вредноста на интеграл со прецизност од 0,001, пресметување на коренот на равенката до децимална апроксимација, извлекување статистика од множество податоци - сето тоа се нумерички пресметки. Во Python, алатките за ова се библиотеките NumPy (нумерички низи и математика) и SciPy (научно пресметување). Во оваа единица, ќе научите да користите вештачка интелигенција како асистент кој генерира Python код за нумеричка пресметка и да ја проверите исправноста на кодот.

Критична дефиниција: број со подвижна запирка е формат во кој компјутерот складира децимални броеви со ограничена прецизност. Затоа во компјутерската аритметика 0,1 + 0,2 може да испадне 0,300000000000000004, а не точно 0,3. Ова не е грешка, тоа е природата на нумеричката пресметка - но ќе доведе до неточни резултати ако не сте свесни за тоа. Во нумеричката пресметка, се работи со „доволно блиску“ наместо „точна еднаквост“.

Симболички или нумерички? Избор на вистинската алатка

Статус

Симболичен (SymPy)

Нумерички (NumPy/SciPy)

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

претпочитан

не е потребно

Нема формула/премногу сложена

не може да се реши

претпочитан

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

Да

Прибл.

Големи податоци / мулти-обработка

бавно

многу брзо

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

-

погоден

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

Чекор по чекор: Обезбедете нумеричка пресметка со вештачка интелигенција

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

2. Напишете код на вештачката интелигенција, а не на излез. Запомнете од единицата 4: Немојте да правите ВИ да предвидува излез на код. Ја извршуваш шифрата.

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

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

5. Вкрстена проверка симболично или рачно. Ако е можно, потврдете го истиот резултат со SymPy или рачен пристап.

6. Пазете се од стапици со подвижна запирка. Наместо строга еднаквост со ==, користете толеранции како што се abs(a - b) < 1e-9.

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

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

Повеќето нумерички методи работат повторливо: почнувајќи од почетната претпоставка и постепено пристапувајќи кон вистинскиот одговор. Овој процес на приближување се нарекува конвергенција. Но, не секој итеративен метод секогаш се конвергира; некои се разминуваат (се оддалечуваат од резултатот) или се спојуваат до неточна вредност. Ако кодот генериран со вештачка интелигенција не проверува дали методот конвергира, може тивко да ви даде погрешен број. Значи, само затоа што нумеричкиот резултат „произвел број“ не го прави точно; Исто така, потребно е да се потврди дека тој број всушност конвергира до бараното решение.

Втората суптилност е акумулацијата на грешки. Во долгиот синџир на пресметки, малите грешки за заокружување со подвижна запирка на секој чекор може да се акумулираат и да станат поголеми; Особено кога ќе ја земете разликата од два многу блиски големи бројки (ова се нарекува катастрофално откажување), може да се изгубат значителни цифри од резултатот. Вештачката интелигенција не секогаш предвидува вакви проблеми со нумеричката стабилност. Во критичните пресметки, повторното пресметување и споредување на резултатот со различен метод или со поголема прецизност открива скриена акумулација на грешка.

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

три мини футроли

Случај 1 - Неправилен избор на функција. Студент побара од AI код за да го најде коренот на функцијата. Вештачката интелигенција користеше scipy.optimize.fsolve, но избра лоша почетна претпоставка и се приближи до погрешен корен. Ученикот најпрво ја испитуваше функцијата правејќи ја графикони (види единица за визуелизација), ја даде точната почетна претпоставка и го најде вистинскиот корен. Лекција: пронаоѓачите на нумерички корени се чувствителни на почетната точка.

Случај 2 - Замка со подвижна точка. Еден инженер истрчал код за вештачка интелигенција кој пишувал ако 0,1 + 0,2 == 0,3: и сфатил дека условот никогаш не бил вистинит. ВИ ја игнорираше прецизноста на подвижна запирка. Кодот беше коригиран со abs((0.1+0.2) - 0.3) < 1e-9. 1e-9 значи „десет до минус девет“, многу мала толеранција.

Случај 3 - Тестирањето на здравиот разум ја откри грешката. Наставникот добил код од scipy.integrate.quad кој нумерички пресметува дефинитивен интеграл. Тој прво го тестираше со познат интеграл како што е ∫₀¹ x dx = 0,5; шифрата даде 0,5. Потоа го пресметал вистинскиот интеграл и го потврдил резултатот со SymPy. Тој веруваше кога два независни методи го дадоа истиот резултат. Вкупно време: 6 минути.

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

1) Барање нумерички код на сметката:

Напишете го кодот на Python кој го решава следниот проблем БРОЈЧЕНО: [проблем]. Користете NumPy/SciPy. Чувствителност: [на пр. 6 децимални]. ќе го извршам кодот; предвидување на излезот. Накратко објаснете во линија за коментар која функција ја избравте и зошто.

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

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

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

Напишете го кодот што го решава следниот интеграл/равенка И со SymPy (симболички) И со SciPy (нумерички): [проблем]. Испечати ги двата резултати за да можам да ги споредам. Додадете линија која проверува дали има разлики со abs().

4) Безбедност со подвижна запирка:

Прегледајте ги споредбите на броеви со подвижна запирка во оваа шифра. Ако има строги '==' еднаквости, заменете ги со соодветна толеранција (abs(a-b) < 1e-9) и објаснете зошто. Код: [тука]

Слаб промпт / Силен промпт

Слаб: „Најди го коренот на оваа равенка: x³ − 2x − 5 = 0. Напиши го одговорот.
Резултат: AI одговара на децимален број (на пр. „2.0946...“). Тоа може или не може да биде вистина; Не е потврдено бидејќи не е извршено.
Моќно: "Напишете код кој го наоѓа вистинскиот корен на равенката x³ − 2x − 5 = 0 со SciPy. За првичната претпоставка, прво наведете го интервалот каде функцијата го менува знакот. Додадете линија што го заменува коренот и проверете дали резултатот е ~0. Ќе го видам излезот."
Резултат: Извршен код, точна почетна претпоставка, вградени хашови. Валидноста на коренот е докажана.

Вообичаени грешки

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

Сумирано

Нумеричкото сметање дава приближни, но практични резултати за проблеми кои не можат да се решат со затворена формула; Во Python, неговите алатки се NumPy и SciPy. AI брзо генерира код за овие библиотеки, но мора да го извршите кодот, да го прочитате и разберете и да го тестирате со познат влез. Бидете внимателни со прецизноста на подвижна запирка: користете толеранција наместо точна еднаквост. Ако е можно, проверете ги симболичните и нумеричките методи. Тестирањето и замената на здравиот разум се најевтините и најефикасните проверки.

Задача за апликација

Изберете проблем што е тешко да се реши со затворена формула (на пример, коренот x³ − 2x − 5 = 0, или дефинитивната вредност на неелементарен интеграл). Нека вештачката интелигенција ги отпечати и нумеричкиот код и, ако е можно, симболично-нумеричкиот код за вкрстена проверка со шаблоните 1 и 3. Стартувај го кодот во вистинска Python околина. Прво направете тест за здрав разум со познат влез, а потоа решете го вистинскиот проблем. Бидете сигурни да користите толеранции ако има споредба со подвижна запирка. Забележете го резултатот заедно со неговата чувствителност.

листа за проверка

  • [ ] Го идентификував проблемот и потребната чувствителност.
  • [ ] Го прочитав и разбрав кодот произведен од AI линија по ред.
  • [ ] Го извршив кодот во вистинска Python околина.
  • [ ] Направив тест за здрав разум со познат влез.
  • [ ] Додадов симболична/рачна вкрстена проверка ако е можно.
  • [ ] Користев толеранција во споредбите со подвижна запирка.