единица 5 / 11

Числени изчисления, Python и генериране на код

Печалби:

  • Възможност за разграничаване между символно и числено смятане и избор на правилния инструмент (SymPy или NumPy/SciPy) за всеки проблем
  • Способност да четете и разбирате цифровия код, създаден от изкуствения интелект, да го изпълнявате сами и да го проверявате чрез извършване на тест за здрав разум с известен вход.
  • Разберете границите на прецизността на числата с плаваща запетая, използвайте толерантност вместо точно равенство и управлявайте въздействието на първоначалното предположение върху числените методи.

Символното смятане дава точната формула на интеграл или уравнение; Но повечето практически задачи в математиката не могат да бъдат решени чрез затворена формула. Това е мястото, където цифровите изчисления влизат в действие: получаване на приблизителен цифров резултат с желаната прецизност, а не точна формула. Намиране на стойността на интеграл с точност 0,001, изчисляване на корена на уравнение до десетично приближение, извличане на статистика от набор от данни — това са всички числени изчисления. В Python инструментите за това са библиотеките NumPy (числови масиви и математика) и SciPy (научни изчисления). В този модул ще се научите да използвате AI като помощник, който генерира код на Python за числени изчисления и ще проверите правилността на кода.

Критично определение: числото с плаваща запетая е формат, в който компютърът съхранява десетични числа с ограничена точност. Ето защо в компютърната аритметика 0,1 + 0,2 може да се окаже 0,30000000000000004, а не точно 0,3. Това не е грешка, това е естеството на численото изчисление — но ще доведе до неправилни резултати, ако не сте наясно с това. При численото изчисление се работи с „достатъчно близко“, а не с „точно равенство“.

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

Статус

Символно (SymPy)

Числен (NumPy/SciPy)

Има затворена формула

предпочитан

не е необходимо

Няма формула/твърде сложно

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

предпочитан

Изисква се пълна прецизност

да

Прибл.

Големи данни / многопроцесорна обработка

бавен

много бързо

Резултатът с десетична запетая е достатъчен

подходящ

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

Стъпка по стъпка: Сигурно числено изчисление с AI

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

2. Напишете код в AI, а не изход. Запомнете от раздел 4: Не правете изходен код за прогнозиране на AI. Стартирате кода.

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

4. Тест с позната ситуация. Опитайте кода с просто въвеждане, за което вече знаете отговора. Например sin(0)=0, като стойността на известен интеграл. Ако кодът го дава правилно, ще му се доверите повече.

5. Кръстосана проверка символично или ръчно. Ако е възможно, потвърдете същия резултат със SymPy или ръчен подход.

6. Пазете се от капани с плаваща запетая. Вместо строго равенство с ==, използвайте допустими отклонения като abs(a - b) < 1e-9.

Съвет: Винаги тествайте цифров код „с отговор, който знаете“. Ако сте написали търсач на корен, първо го приложете към уравнение с известен корен (x=±2), като например x²−4=0. Ако кодът намери това за правилно, става по-вероятно да бъде надежден за уравнения, които не знаете. Тази „здрава проверка“ е най-евтината проверка.

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

Повечето числени методи работят итеративно: започвайки от първоначално предположение и постепенно приближавайки се до действителния отговор. Този процес на сближаване се нарича конвергенция. Но не всеки итеративен метод винаги се събира; някои се разминават (отдалечават се от резултата) или се сближават до неправилна стойност. Ако код, генериран от AI, не проверява дали методът се сближава, той може тихо да ви даде грешен номер. Така че само защото числовият резултат "произведе число" не го прави верен; Необходимо е също така да се потвърди, че това число действително се сближава с търсеното решение.

Втора тънкост е натрупването на грешки. В дълга верига от изчисления, малки грешки при закръгляване на плаваща запетая на всяка стъпка могат да се натрупат и да станат по-големи; Особено когато вземете разликата на две много близки големи числа (това се нарича катастрофално анулиране), значителни цифри от резултата могат да бъдат загубени. Изкуственият интелект не винаги предвижда такива проблеми с числената стабилност. При критични изчисления преизчисляването и сравняването на резултата с различен метод или с по-висока точност разкрива натрупване на скрита грешка.

Внимание: „Даването на резултат“ и „сближаването до правилния резултат“ на числен метод са две различни неща. Уверете се, че кодът включва проверка за конвергенция (напр. че разликата между две последователни стъпки става достатъчно малка); Ако не го съдържа, накарайте изкуствения интелект да добави този контрол.

три мини калъфа

Случай 1 — Неправилен избор на функция. Студент поиска от AI ​​код, за да намери корена на функция. AI използва scipy.optimize.fsolve, но избра лошо първоначално предположение и стигна до грешния корен. Ученикът първо изследва функцията, като я начерта на графика (виж модула за визуализация), даде правилното първоначално предположение и намери истинския корен. Урок: търсачите на числени корени са чувствителни към началната точка.

Случай 2 — Прихващане с плаваща запетая. Инженер пусна AI код, който пише if 0.1 + 0.2 == 0.3: и осъзна, че условието никога не е било вярно. AI беше пренебрегнал прецизността с плаваща запетая. Кодът беше коригиран с 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. Ще видя резултата."
Резултат: Изпълним код, точно първоначално предположение, вградени хешове. Валидността на корена е доказана.

Често срещани грешки

  • Доверяване на резултата без изпълнение на кода. Численият резултат, който AI "предсказва", не е валидиране.
  • Тестване на равенството с плаваща запетая с `==`. Почти винаги е погрешно; Използвайте толерантност.
  • Лоша първоначална прогноза. Числените методи за корен/оптимизация са чувствителни към началната точка; Може да се сближи с грешен корен.
  • Не изразява чувствителност. — Колко стъпки? Ако не бъде поискан, резултатът може да не отговаря на нуждите.
  • Не вземане на тест за здрав разум. Прилагането на код към реален проблем, без да се тества с известен вход, е рисковано.
  • Изпълнение на кода, без да го разбирате. Кодът, който не разбирате, може да използва грешна функция; разберете всеки ред.
Внимание: Числените резултати винаги са приблизителни. Вместо да казвате "резултатът е точно този", кажете "това е точно това". В инженерен или научен доклад посочването на използвания метод и прецизност е част от точността. Подвеждащо е да се представя приблизителен резултат като окончателен.

В обобщение

Численото смятане дава приблизителни, но практически резултати за проблеми, които не могат да бъдат решени чрез затворена формула; В Python неговите инструменти са NumPy и SciPy. AI бързо генерира код за тези библиотеки, но вие трябва да стартирате кода, да го прочетете и разберете и да го тествате с познат вход. Бъдете внимателни с точността на плаваща запетая: използвайте толеранс, а не точно равенство. Ако е възможно, проверете символични и числови методи. Тестването на здравия разум и замяната са най-евтините и най-ефективни проверки.

Задача за приложение

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

контролен списък

  • [ ] Идентифицирах проблема и необходимата чувствителност.
  • [ ] Прочетох и разбрах кода, създаден от AI ​​ред по ред.
  • [ ] Изпълних кода в реална среда на Python.
  • [ ] Направих тест за здрав разум с известен вход.
  • [ ] Добавих символична/ръчна кръстосана проверка, ако е възможно.
  • [ ] Използвах толеранс при сравнения с плаваща запетая.