Бірлік 5 / 11

Сандық есептеу, Python және кодты генерациялау

Табыстар:

  • Символдық және сандық есептеулерді ажырата білу және әрбір есеп үшін дұрыс құралды (SymPy немесе NumPy/SciPy) таңдау мүмкіндігі
  • Жасанды интеллект арқылы жасалған сандық кодты оқу және түсіну, оны өзіңіз іске қосу және белгілі кіріспен жалпы мағынаны тексеру арқылы тексеру мүмкіндігі.
  • Жылжымалы нүктелік сандар дәлдігінің шектерін түсініңіз, дәл теңдіктің орнына төзімділікті пайдаланыңыз және бастапқы болжамның сандық әдістерге әсерін басқарыңыз.

Символдық есептеу интегралдың немесе теңдеудің нақты формуласын береді; Бірақ математикадағы практикалық есептердің көпшілігін жабық формуламен шешу мүмкін емес. Дәл осы жерде сандық есептеу ойнайды: нақты формула емес, қажетті дәлдікпен шамамен сандық нәтиже шығару. 0,001 дәлдікке дейінгі интегралдың мәнін табу, ондық жуықтау теңдеуінің түбірін есептеу, деректер жиынынан статистиканы шығару — мұның бәрі сандық есептеулер. Python-да бұл үшін құралдар NumPy (сандық массивтер және математика) және SciPy (ғылыми есептеулер) кітапханалары болып табылады. Бұл бөлімде сіз AI-ны сандық есептеу үшін Python кодын жасайтын көмекші ретінде пайдалануды және кодтың дұрыстығын тексеруді үйренесіз.

Сыни анықтама: өзгермелі нүктелі сан – компьютер ондық сандарды шектеулі дәлдікпен сақтайтын пішім. Сондықтан компьютерлік арифметикада 0,1 + 0,2 дәл 0,3 емес, 0,30000000000000004 болуы мүмкін. Бұл қате емес, бұл сандық есептеудің табиғаты — бірақ егер сіз оны білмесеңіз, бұл дұрыс емес нәтижелерге әкеледі. Сандық есептеуде «дәл теңдікпен» емес, «жеткілікті жақын» жұмыс істейді.

Символдық па, сандық па? Дұрыс құралды таңдау

Күй

Символдық (SymPy)

Сандық (NumPy/SciPy)

Жабық формуласы бар

артықшылықты

қажет емес

Формула жоқ/тым күрделі

шеше алмайды

артықшылықты

Толық дәлдік қажет

Иә

Шамамен

Үлкен деректер / көп өңдеу

баяу

өте жылдам

Ондықпен нәтиже жеткілікті

қолайлы

Жақсы тәжірибеші маман екеуін де пайдаланады: мүмкіндігінше символдық түрде шешіңіз, егер жоқ болса, санға өтіңіз және мүмкіндігінше біреуін екіншісімен салыстырыңыз.

Қадамдық: AI көмегімен сандық есептеуді қамтамасыз етіңіз

1. Мәселе мен сезімталдықты анықтаңыз. «Неше ондық бөлшек?» және «қандай диапазонда?» Сұрақтарыңызды нақтылаңыз.

2. Шығаруға емес, AI-ға код жазыңыз. 4-бөлімнен есте сақтаңыз: AI болжау кодын шығаруға болмайды. Сіз кодты іске қосасыз.

3. Кодты оқып, түсініңіз. Жасалған кодты жол бойынша түсініңіз. Дұрыс кітапхана, дұрыс функция, дұрыс параметрлер? Түсінбейтін кодты іске қоспаңыз.

4. Белгілі жағдаймен тест. Жауабын бұрыннан білетін қарапайым енгізу арқылы кодты қолданып көріңіз. Мысалы, sin(0)=0, белгілі интегралдың мәні сияқты. Егер код оны дұрыс берсе, сіз оған көбірек сенесіз.

5. Символдық немесе қолмен айқас тексеру. Мүмкін болса, бірдей нәтижені SymPy немесе қолмен тәсілмен растаңыз.

6. Қалқымалы нүкте тұзақтарынан сақ болыңыз. == бар қатаң теңдіктің орнына abs(a - b) < 1e-9 сияқты рұқсаттарды пайдаланыңыз.

Кеңес: Әрқашан сандық кодты «сіз білетін жауабыңызбен» тексеріңіз. Түбір табу құралын жазсаңыз, алдымен оны x²−4=0 сияқты белгілі түбірі бар (x=±2) теңдеуге қолданыңыз. Егер код мұны дұрыс деп тапса, ол сіз білмейтін теңдеулерде сенімдірек болады. Бұл «есі дұрыстығын тексеру» ең арзан тексеру болып табылады.

Сандық есептеудің қателігі: конвергенция және қателердің жинақталуы.

Көптеген сандық әдістер итеративті түрде жұмыс істейді: бастапқы болжамнан бастап, бірте-бірте нақты жауапқа жақындайды. Бұл жақындау процесі конвергенция деп аталады. Бірақ әрбір итерациялық әдіс әрқашан жақындай бермейді; кейбіреулері алшақтайды (нәтижеден алыстайды) немесе дұрыс емес мәнге жақындайды. Егер AI жасаған код әдістің біріктірілгенін тексермесе, ол сізге үнсіз қате нөмір беруі мүмкін. Сондықтан сандық нәтиже «санды шығарды» болғандықтан, оны шындыққа айналдырмайды; Сондай-ақ бұл санның ізделген шешімге жақындайтынын растау қажет.

Екінші нәзіктік - қателердің жинақталуы. Ұзын есептеулер тізбегінде әр қадамдағы шағын өзгермелі нүктелі дөңгелектеу қателері жиналып, үлкенірек болуы мүмкін; Әсіресе екі өте жақын үлкен санның айырмашылығын қабылдағанда (бұл апатты жою деп аталады), нәтиженің маңызды сандары жоғалуы мүмкін. Жасанды интеллект мұндай сандық тұрақтылық мәселелерін әрқашан болжамайды. Критикалық есептеулерде нәтижені басқа әдіспен немесе жоғары дәлдікпен қайта есептеу және салыстыру жасырын қате жинақтауын көрсетеді.

Назар аударыңыз: «Нәтиже беру» және «дұрыс нәтижеге жинақтау» сандық әдіс екі түрлі нәрсе. Кодтың конвергенция тексеруін қамтитынына көз жеткізіңіз (мысалы, екі дәйекті қадам арасындағы айырмашылық жеткілікті түрде аз болады); Егер оның құрамында болмаса, жасанды интеллектке осы басқаруды қосыңыз.

үш шағын іс

1-жағдай — Функцияны дұрыс таңдамау. Студент AI-дан функцияның түбірін табу үшін код сұрады. AI scipy.optimize.fsolve пайдаланды, бірақ дұрыс емес бастапқы болжамды таңдап, қате түбірге жақындады. Студент алдымен функцияны графигін салу арқылы тексерді (көрнекілік бөлімін қараңыз), дұрыс бастапқы болжамды берді және нақты түбірін тапты. Сабақ: сандық түбір тапқыштар бастапқы нүктеге сезімтал.

2-жағдай — Қалқымалы нүкте тұзағы. Инженер 0,1 + 0,2 == 0,3: деп жазатын AI кодын іске қосты және шарт ешқашан дұрыс емес екенін түсінді. 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) Жалпы сезім сынағы қосу:

Бұл кодты іске қоспас бұрын оның ДҰРЫСТЫҒЫН сынау үшін оған жалпы мағынаны тексеруді қосыңыз: жауабы бұрыннан белгілі болған қарапайым енгізу арқылы оны қолданып көріңіз (мысалы, x²-4=0 үшін түбір ±2) және оның күтілетін нәтиже беретінін тексеріңіз. Код: [мұнда]

3) Символдық-сандық тексеру:

Келесі интегралды/теңдеуді SymPy (символдық) ЖӘНЕ SciPy (сандық) көмегімен шешетін кодты жазыңыз: [проблема]. Мен оларды салыстыру үшін екі нәтижені басып шығарыңыз. abs() арқылы айырмашылықтарды тексеретін жолды қосыңыз.

4) Жылжымалы нүкте қауіпсіздігі:

Осы кодтағы өзгермелі нүкте сандарының салыстыруларын қарап шығыңыз. Егер қатаң '==' теңдіктері болса, оларды сәйкес төзімділікпен ауыстырыңыз (abs(a-b) < 1e-9) және себебін түсіндіріңіз. Код: [мұнда]

Әлсіз шақыру / Күшті шақыру

Әлсіз: "Осы теңдеудің түбірін табыңыз: x³ − 2x − 5 = 0. Жауабын жазыңыз."
Нәтиже: AI ондық санға сәйкес келеді (мысалы, «2,0946...»). Бұл шындық болуы мүмкін немесе болмауы мүмкін; Ол тексерілмеген, себебі ол іске қосылмаған.
Күшті: "SciPy көмегімен x³ − 2x − 5 = 0 теңдеуінің нақты түбірін табатын кодты жазыңыз. Бастапқы болжам үшін алдымен функция таңбасын өзгертетін аралықты көрсетіңіз. Түбірді ауыстыратын жолды қосыңыз және нәтиженің ~0 екенін тексеріңіз. Мен шығысты көремін."
Нәтиже: орындалатын код, дәл бастапқы болжам, кірістірілген хэштер. Түбірдің дұрыстығы дәлелденді.

Жалпы қателер

  • Кодты іске қоспай-ақ нәтижеге сену. AI «болжайтын» сандық нәтиже валидация болып табылмайды.
  • `==` көмегімен өзгермелі нүкте теңдігін тексеру. Бұл әрдайым дерлік қате; Төзімділікті қолданыңыз.
  • Нашар бастапқы болжам. Сандық түбір/оңтайландыру әдістері бастапқы нүктеге сезімтал; Ол қате түбірге жақындауы мүмкін.
  • Сезімталдықты білдірмеу. «Қанша қадам?» Сұралмаса, нәтиже қажеттілікке сәйкес келмеуі мүмкін.
  • Ақыл-парасат сынағынан өтпеу. Нақты мәселеге кодты белгілі кіріспен сынамай қолдану қауіпті.
  • Кодты түсінбестен іске қосу. Сіз түсінбейтін код қате функцияны пайдалануы мүмкін; әр жолды түсіну.
Абайлаңыз: сандық нәтижелер әрқашан шамамен. «Нәтиже дәл осылай» деудің орнына «дәл солай» деңіз. Инженерлік немесе ғылыми есепте қолданылатын әдіс пен дәлдікті көрсету дәлдіктің бір бөлігі болып табылады. Болжалды нәтижені түпкілікті деп көрсету жаңылыс.

Қысқаша айтқанда

Сандық есептеулер тұйық формуламен шешілмейтін есептер үшін шамамен, бірақ практикалық нәтижелер береді; Python-да оның құралдары - NumPy және SciPy. AI бұл кітапханалар үшін кодты жылдам жасайды, бірақ сіз кодты іске қосып, оны оқып, түсінуіңіз керек және оны белгілі кіріспен тексеруіңіз керек. Жылжымалы нүкте дәлдігіне абай болыңыз: дәл теңдіктің орнына төзімділікті пайдаланыңыз. Мүмкіндігінше символдық және сандық әдістерді өзара тексеріңіз. Жалпы мағынада тестілеу және ауыстыру - ең арзан және тиімді тексеру.

Қолданбалы тапсырма

Жабық формуламен шешу қиын есепті таңдаңыз (мысалы, x³ − 2x − 5 = 0 түбірі немесе элементар емес интегралдың анықталған мәні). AI сандық кодты да, мүмкін болса, 1 және 3 үлгілері бар символдық-сандық салыстыру кодын басып шығарыңыз. Кодты нақты Python ортасында іске қосыңыз. Алдымен белгілі кіріспен ақылға қонымды тест жасаңыз, содан кейін нақты мәселені шешіңіз. Егер өзгермелі нүктені салыстыру болса, рұқсатты пайдалануды ұмытпаңыз. Нәтижені оның сезімталдығымен бірге ескеріңіз.

бақылау парағы

  • [ ] Мен мәселені және қажетті сезімталдықты анықтадым.
  • [ ] Мен AI шығарған кодты жол бойынша оқып, түсіндім.
  • [ ] Мен кодты нақты Python ортасында іске қостым.
  • [ ] Мен белгілі кіріспен жалпы мағынаны сынадым.
  • [ ] Мүмкін болса, символдық/қолмен қарсы тексеруді қостым.
  • [ ] Мен өзгермелі нүктелерді салыстыру кезінде төзімділікті қолдандым.