Гузариш ба мундариҷа
Мавзӯи 3 аз 5

Ҳосилаҳо, ҳудудҳо ва қаторҳо

Ҳосилаҳо, ҳудудҳо ва қаторҳо барои чӣ лозиманд

Ҳосила суръати тағйирро тавсиф мекунад: ҳангоми тағйири аргумент мавқеъ, ҳарорат ё арзиш чӣ қадар зуд тағйир меёбад. Ҳудуд барои фаҳмидани рафтор дар наздикии нуқтае ёрӣ медиҳад, ки ҷойгузинии мустақим бефоида аст. Қатор функсияи мураккабро дар атрофи хурди нуқта бо бисёраъзогии содда иваз мекунад. Ин воситаҳо дар физика, беҳинасозӣ ва ҳисобҳои тақрибӣ истифода мешаванд.

SymPy табдилҳоро рамзӣ иҷро мекунад: аввал формуларо мегирад ва баъд имкон медиҳад, ки нуқтаро ҷойгузин кунем. Ин аз баҳодиҳӣ бо ченкуниҳои ҳамсоя фарқ мекунад ва касрҳои дақиқро то қадами охир нигоҳ медорад.

1. Ҳосила ҳамчун функсияи нав

Ҳосила тағйири функсияро ҳангоми тағйири хурди аргумент нишон медиҳад. diff(f, x) формулаи онро нисбат ба тағйирёбандаи x месозад. Барои ҳосилаи тартиби баландтар шумораи дифференсирониҳоро ҳамчун аргументи сеюм медиҳанд. Ҳосилаи хусусӣ танҳо як тағйирёбандаро тағйир дода, дигар тағйирёбандаҳои мустақилро доимӣ мешуморад.

from sympy import symbols, diff, sin, exp
x, y = symbols('x y')
print(diff(x**5 + 2*x, x))
print(diff(sin(x)*exp(x), x))
print(diff(x**5, x, 3))
print(diff(x**2*y**4, y))

Натиҷа:

5*x**4 + 2
exp(x)*sin(x) + exp(x)*cos(x)
60*x**2
4*x**2*y**3

Сатри дуюм бо қоидаи ҳосилаи ҳосили зарб гирифта шудааст: ҳосилаи зарбкунандаи аввал ба дуюм зарб мешавад, сипас зарбкунандаи аввал ба ҳосилаи дуюм илова мешавад. Дар сатри сеюм дифференсиронӣ се бор пайдарпай иҷро шудааст. Дар сатри охир x доимӣ ҳисоб мешавад, зеро тағйирёбандаи y нишон дода шудааст.

Функсияҳои sin, cos, exp, log, sqrt-ро аз SymPy гиред. Онҳо қисмҳои формулаи рамзиро месозанд. Агар дар ифодаи дорои чанд рамз тағйирёбандаро нанависед, интихоб номуайян мешавад, бинобар ин беҳтар аст онро ҳамеша ошкоро нишон диҳед.

2. Қимати ҳосила дар нуқта

Формулаи ҳосила ва қимати он дар нуқта натиҷаҳои гуногунанд. Аввал ҳосиларо ҳисоб мекунанд, баъд subs-ро даъват менамоянд. Нуқтаи ратсионалиро бо Rational диҳед, то дақиқӣ гум нашавад.

from sympy import symbols, diff, Rational
x = symbols('x')
f = x**4 + x
d = diff(f, x)
print(d)
print(d.subs(x, Rational(1, 2)))

Натиҷа:

4*x**3 + 1
3/2

Касри ҳосилшуда дақиқ аст. Агар ҷавоби даҳӣ лозим бошад, барои натиҷа .evalf()-ро даъват кардан ё онро ба float табдил додан мумкин аст. Гирдкуниро баъди ҳисоб иҷро кунед, на ҳангоми хондани нуқтаи ибтидоӣ.

3. Ҳудуд ба ҷойи ҷойгузинӣ

Ҳудуд тавсиф мекунад, ки ҳангоми ба нуқта наздик шудани аргумент қиматҳои функсия ба чӣ майл мекунанд. Функсия дар худи нуқта метавонад муайян набошад. limit(f, x, x0) рафторро дар наздикии x0 меомӯзад; oo беохириро ифода мекунад.

from sympy import symbols, sin, limit, oo
x = symbols('x')
print((sin(x)/x).subs(x, 0))
print(limit(sin(x)/x, x, 0))
print(limit((3*x + 1)/(2*x - 4), x, oo))

Натиҷа:

nan
1
3/2

Ҷойгузинии мустақим ба нисбати синус ва аргумент nan, яъне «адад нест», дод. Ҳудуд вуҷуд дорад ва ба як баробар аст. Сатри охир ҳудуди дақиқи функсияи ратсионалиро ҳангоми бе ҳад афзудани аргумент нишон медиҳад.

Ҳудуди яктарафа тарафи наздикшавиро муайян мекунад. Аргументи чорум "+" аз рост ва "-" аз чапро мефаҳмонад. Дар нуқтаи охирнок пешфарз тарафи рост истифода мешавад; вақте ҳар ду тараф муҳиманд, инро нонавишта нагузоред.

from sympy import symbols, limit
x = symbols('x')
print(limit(1/(x - 2), x, 2, '+'))
print(limit(1/(x - 2), x, 2, '-'))

Натиҷа:

oo
-oo

Дар наздикии нуқтаи 2 махраҷ аз ду тараф аломатҳои гуногун дорад, бинобар ин ҷавобҳо фарқ мекунанд. Навишти "+-" ҳудуди дутарафаро талаб мекунад; агар ҳудудҳои яктарафа мувофиқ набошанд, SymPy 1.12 метавонад хато диҳад. Барои фаҳмондани рафтор аввал ҳар ду тарафро алоҳида муқоиса кардан фоиданок аст. Ба oo аз тарафи охирнок наздик мешаванд, яъне бо самти "-"; ба -oo бо "+".

4. Қатори Тейлор

Қатори Тейлор функсияро дар наздикии нуқтаи интихобшуда ҳамчун суммаи дараҷаҳои дурӣ аз он нуқта тавсиф мекунад. Дар сифр инҳо дараҷаҳои x мебошанд. Коэффитсиенти назди x**k ба қимати ҳосилаи тартиби k дар сифр, тақсим бар k!, баробар аст. Аз ин рӯ худи ҳосилаҳо ва коэффитсиентҳо одатан фарқ мекунанд.

series(f, x, 0, n) дараҷаҳои аз n хурдро нигоҳ медорад. Навишти O(x**n) тартиби боқимондаро дар наздикии сифр тавсиф мекунад; он коэффитсиенти ададии дигар нест.

from sympy import symbols, series, exp
x = symbols('x')
s = series(exp(2*x), x, 0, 4)
print(s)
p = s.removeO()
print(p)
print(p.coeff(x, 0), p.coeff(x, 2), p.coeff(x, 4))

Натиҷа:

1 + 2*x + 2*x**2 + 4*x**3/3 + O(x**4)
4*x**3/3 + 2*x**2 + 2*x + 1
1 2 0

Методи removeO() навишти боқимондаро гирифта, бисёраъзогиро мемонад. Методи coeff(x, k) коэффитсиенти дараҷаи k-ро мегирад; барои дараҷаи мавҷуднабуда сифр ҳосил мешавад. Дар мисол коэффитсиенти назди x**4 дар бисёраъзогии буридашуда сифр аст, аммо ин маънои онро надорад, ки коэффитсиенти мувофиқи функсияи аслӣ сифр аст: он аъзо бо ин тартиби кушоиш ҳисоб нашудааст.

Ин дар дохил чӣ гуна кор мекунад

Дифференсиронӣ дарахти ифодаро мегардад ва қоидаҳои сумма, ҳосили зарб ва функсияи мураккабро татбиқ мекунад. Дигар рамзҳои мустақил ҳамчун доимиҳо мемонанд. Ҳудуд танҳо ададро ҷойгузин намекунад: алгоритм рафтори ифодаро дар наздикии нуқта таҳлил карда, қисмҳои асосиро муқоиса мекунад.

Қатор на танҳо бисёраъзогии навишташуда, балки маълумот дар бораи тартиби боқимондаро низ нигоҳ медорад. Баъди removeO() ин маълумот гум мешавад: натиҷа аллакай ифодаи одӣ аст. Наздик ба нуқта қимати тақрибӣ метавонад хуб бошад, аммо дур аз он бисёраъзогии дараҷаи паст дақиқиро кафолат намедиҳад.

Хатоҳои маъмул ва ислоҳи онҳо

1. Пеш аз дифференсиронӣ ҷойгузин кардани нуқта. Доимӣ ҳосил мешавад, ки ҳосилааш сифр аст. Аввал формулаи ҳосиларо созед.

from sympy import symbols, diff
x = symbols('x')
f = x**4 + x
print(diff(f.subs(x, 2), x))
print(diff(f, x).subs(x, 2))

Натиҷа:

0
33

2. Гирифтани функсия аз math. Он ададро интизор аст ва мекӯшад рамзро ба адад табдил диҳад, ки TypeError меорад. Функсияи рамзиро аз SymPy ворид кунед.

import math
from sympy import symbols, sin
x = symbols('x')
try:
    print(math.sin(x))
except TypeError as err:
    print(type(err).__name__)
print(sin(x))

Натиҷа:

TypeError
sin(x)

3. Ҳисоб кардани аргументи охирини series ҳамчун дараҷаи дохилшуда. Дар тартиби 4 аъзои дараҷаи чорум ҳанӯз ба натиҷа дохил намешавад. Барои гирифтани он тартиби ақаллан 5 лозим аст.

from sympy import symbols, series, cos
x = symbols('x')
print(series(cos(x), x, 0, 4))
print(series(cos(x), x, 0, 5))

Натиҷа:

1 - x**2/2 + O(x**4)
1 - x**2/2 + x**4/24 + O(x**5)

4. Иваз кардани ҳудуд бо ҷойгузинӣ ё ҳамеша аз рост ҳисоб кардан. Дар мисолҳои боло subs қимати nan дод ва ду самт беохириҳои муқобил доданд. Ислоҳ ин аст, ки limit-ро истифода бурда, тарафи дар шарт додашударо гузаронед. Адади «ба қадри кофӣ наздик» низ ҷойи ҳудуди дақиқро намегирад.

Ёдномаи кӯтоҳ

Амал Навишт
Ҳосилаи якум diff(f, x)
Ҳосилаи тартиби k diff(f, x, k)
Қимати ҳосила diff(f, x, k).subs(x, point)
Ҳудуд аз рост / чап limit(f, x, point, "+") / limit(f, x, point, "-")
Беохирӣ oo, -oo
Кушоиш дар сифр series(f, x, 0, n)
Бисёраъзогӣ бе боқимонда s.removeO()
Коэффитсиенти бисёраъзогӣ p.coeff(x, k)

Тартиби ҳосила, нуқта, самти ҳудуд ва шумораи дараҷаҳои заруриро санҷед. Ин параметрҳо саволи математикиро муайян мекунанд, на танҳо формати бароришро.