Підсумовування, рівняння й аналіз
Ця сторінка описує суми й добутки послідовностей, розв’язування рівнянь, похідні у вигляді формули або значення в точці та визначені інтеграли. Вона стане в пригоді для записів із Σ чи Π, рівнянь, які складно перетворити вручну, або перевірки похідної чи площі під кривою в навчальних завданнях.
Усі ці функції приймають ім’я змінної як аргумент, наприклад k у sum(k^2, k, 1, 10). Це ім’я існує лише всередині виклику й не змінює однойменного значення в інших частинах нотатки.
Скінченні суми й добутки
sum(k, k, 1, 100) дорівнює 5,050sum(k^2, k, 1, 10) дорівнює 385summation(2*k - 1, k, 1, 10) дорівнює 100product(k, k, 1, 5) дорівнює 120Аргументи: вираз, змінна, початкове й кінцеве значення. Обидві межі включено, тому sum(k, k, 1, 100) додає 1 + 2 + … + 100. summation — інша назва sum. Третій рядок показує, що сума перших десяти непарних чисел дорівнює 10², а останній обчислює факторіал 5.
Суми працюють із грошима й одиницями, що зручно для регулярних заощаджень:
# £1,200 paid in at the start of each year for 5 years, at 5%sum(£1200 * 1.05^k, k, 1, 5) дорівнює £6,962.30Добуток корисний для послідовностей імовірностей. Імовірність того, що принаймні двоє з 23 людей мають день народження одного дня, дорівнює одиниці мінус імовірність того, що всі 23 дні народження різні:
p = 1 - product((365 - k)/365, k, 0, 22)(p as %) to 1 dp дорівнює 50.7%Кілька подробиць:
- Початкове й кінцеве значення мають бути цілими числами.
- Якщо кінцеве значення менше за початкове, членів немає: сума дорівнює 0, а добуток — 1.
- Одна сума або добуток може містити щонайбільше 10 000 членів.
- Суми можна вкладати:
sum(sum(j, j, 1, n), n, 1, 4)дає20. Вкладені виклики мають спільне обмеження обсягу обчислень. - Для додавання вже відомих значень використовуйте список:
sum([4, 8, 15]). Див. Списки й статистика.
Точне розв'язання рівняння
Якщо передати лише рівняння, solve визначає коефіцієнти й розв’язує його так, як ви робили б на папері:
solve(2x + 6 = 10) дорівнює 2solve(x/3 + 1 = 4) дорівнює 9solve(5x + 3 = 2x - 9) дорівнює -4# Candles sell for 12, cost 4 each to make, on 2,000 of fixed costssolve(12n = 2000 + 4n) дорівнює 250Невідома — це єдине ім’я в рівнянні без власного значення; вже визначені імена підставляються як числа. Якщо праву частину не вказано, вираз прирівнюється до нуля.
Лінійне рівняння повертає число. Квадратне — список різних дійсних коренів за зростанням, тому кратний корінь подається списком з одного елемента:
solve(x^2 - 5x + 6 = 0) дорівнює [2, 3]solve(x^2 = 9) дорівнює [-3, 3]solve(x^2 - 6x + 9 = 0) дорівнює [3]solve(x^2 - 2 = 0) дорівнює [-1.4142135624, 1.4142135624]Форма відповіді визначається записаним рівнянням, а не знайденими коренями: квадратне рівняння завжди повертає список.
Лінійні рівняння та квадратні рівняння з дискримінантом, що є повним квадратом, обчислюються як точні дроби: solve(x^2 - 5x + 6 = 0) справді дає 2 і 3. Інакше корені обчислюються через десяткове наближення квадратного кореня. Два наближення можуть виглядати однаково, але не бути рівними: solve(x^2 - 2 = 0) і sqrt(2) показують 1.4142135624, проте порівняння вважає їх різними.
Рівняння розв’язуються для чисел без одиниць. Одиниці й гроші не приймаються, адже перетворення могло б не зберегти їхній зміст. Повні правила наведено в розділі Гарантії обчислювального рушія.
Коли обчислення неможливе
Функція не вгадує. Якщо дійсного кореня немає, вона повідомляє про це, а не переходить до комплексного. Для рівнянь вищого степеня за квадратний пропонується чисельна форма:
solve(x^2 + 1 = 0) дорівнює Error: no real solutionsolve(x^3 - 1 = 0) дорівнює Unsupported: solve reads equations of degree 1 and 2; this one has degree 3: write solve(expression,x,lower,upper) to search for one root numericallysolve(sin(x) = 0) дорівнює Unsupported: solve reads a polynomial in x of degree 1 or 2; write solve(expression,x,lower,upper) to search for one root numericallyНевідома також не може бути в знаменнику чи показнику степеня. Якщо невизначених імен два, повідомлення називає те, яке не вдалося прочитати:
solve(1/x = 2) дорівнює Unsupported: The unknown cannot be a divisor; write solve(expression,x,lower,upper) to search for one root numericallysolve(2^x = 8) дорівнює Unsupported: The unknown cannot be an exponent; write solve(expression,x,lower,upper) to search for one root numericallysolve(x + y = 10) дорівнює Unsupported: solve reads one unknown, and y holds no value either; give y a value, or write solve(expression,x,lower,upper) to search for one root numericallyЯкщо рівняння виконується за будь-якого значення, функція повідомляє про це замість довільного вибору:
solve(x - x = 0) дорівнює Unsupported: every value of x solves this equation, so it has no single answerУсі такі повідомлення вказують на описану нижче solve із чотирма аргументами: вона чисельно шукає один корінь незалежно від форми виразу. Для систем лінійних рівнянь із кількома невідомими використовуйте solve_system із розділу Вектори й матриці.
Пошук одного числового кореня
З чотирма аргументами solve працює інакше: шукає значення змінної, що задовольняє рівняння, між заданими межами. Використовуйте цю форму, якщо точний розв’язувач вище відхиляє рівняння.
solve(x^2 = 2, x, 0, 2) дорівнює 1.4142135624solve(x^2 - 4, x, -3, 0) дорівнює -2solve(cos(x) = x, x, 0, 1) дорівнює 0.7390851332# How long does a stone take to fall 44.1 m?solve(4.9*t^2 = 44.1, t, 0, 10) дорівнює 3# Candles sell for £12, cost £4 each to make, plus £2,000 of fixed costssolve(12*n = 2000 + 4*n, n, 0, 1000) дорівнює 250Аргументи: рівняння, змінна, нижня й верхня межі. Можна записати рівняння з = або лише вираз, який solve трактує як expression = 0.
Вибір меж
Для solve співвідношення між лівою й правою частинами має змінитися між межами. Інакше кажучи, left - right має бути додатним на одній межі й від’ємним на іншій або дорівнювати нулю на самій межі. Функція звужує проміжок до точки перетину.
З цього випливає кілька обмежень:
- Якщо між межами два корені, загальна зміна знака може бути відсутня.
solve(x^2 - 4, x, -3, 3)завершується помилкою, боx^2 - 4додатний на обох кінцях. Задайте межі навколо одного кореня, наприклад0і3. - Корінь, у якому крива лише торкається нуля, як у
x^2 = 0, цим способом не знаходиться, оскільки знак не змінюється. - Вираз має бути визначений на всьому проміжку.
solve(sqrt(x) = 2, x, -1, 10)дає помилку, боsqrtвід’ємного числа недопустимий. Почніть проміжок із0. - Стрибок через нуль, як у
1/xпоблизу0, не є коренем, томуsolveповертає помилку. - Нижня межа має бути меншою за верхню; обидві мають бути числами без одиниць.
solve повертає один корінь, а не список усіх коренів. Функція працює лише з числами без одиниць, тому не додавайте одиниці до рівняння.
Округлення й повторне використання
Відповідь є близьким чисельним наближенням; остання показана цифра може бути неточною. Додайте в тому самому рядку to 4 dp або іншу кількість знаків для зручного округлення чи спочатку надайте результату ім’я для повторного використання:
solve(sqrt(x) = 2, x, 0, 10) дорівнює 4.0000000001solve(sqrt(x) = 2, x, 0, 10) to 4 dp дорівнює 4side = solve(sqrt(x) = 2, x, 0, 10) дорівнює 4.0000000001side * 3 to 2 dp дорівнює 12Можна включити solve до власної функції, щоб використовувати її з різними значеннями:
root(y) = solve(x^2 = y, x, 0, 10)root(9) дорівнює 3Для систем лінійних рівнянь із кількома невідомими використовуйте solve_system із розділу Вектори й матриці.
Символьне диференціювання
З двома аргументами differentiate (або derivative) повертає похідну як формулу:
differentiate(sin(x), x) дорівнює cos(x)derivative(x^3, x) дорівнює (3*(x^(3-1)))derivative(x * sin(x), x) дорівнює (sin(x)+(x*cos(x)))derivative(exp(2*x), x) дорівнює (exp((2*x))*2)Результат не спрощується, а кожен крок береться в дужки: (3*(x^(3-1))) означає 3x². Десяткові числа повертаються як дроби: 19.6 стає (98/5).
Результат — це текст, з яким Varlig безпосередньо не обчислює. Щоб використати його, запишіть формулу у власній функції:
slope(x) = 3*x^2slope(2) дорівнює 12Символьне диференціювання підтримує:
+,-,*,/і степені за правилами суми, добутку, частки, степеня та складеної функції- функції
sin,cos,tan,sinh,cosh,exp,lnіsqrt - інші імена, які вважаються сталими та зберігаються в результаті як імена
Ім’я не мусить мати значення в нотатці, тому можна диференціювати формулу із символами:
derivative(a*x^2, x) дорівнює (a*(2*(x^(2-1))))Інші функції, зокрема abs, log або власні функції, дають помилку. Для них використовуйте чисельну форму нижче. Формула також не переносить обмеження вихідного виразу: похідна sqrt(x) діє лише в допустимій області sqrt(x), хоча (1/(2*sqrt(x))) виглядає як окрема формула.
Числове диференціювання
З третім аргументом derivative повертає числове значення похідної в заданій точці:
derivative(x^3, x, 2) дорівнює 12differentiate(sin(x), x, 0) дорівнює 1derivative(sqrt(x), x, 4) дорівнює 0.25height(t) = 20*t - 4.9*t^2derivative(height(t), t, 1) дорівнює 10.2Ця форма працює з функціями, визначеними в нотатці, як-от height вище, на відміну від символьної. Оскільки обчислюється число, всі інші імена у виразі мають бути визначені. Це також стосується sum, product, solve та integrate:
derivative(a*x^2, x, 2) дорівнює Unsupported: Unknown name: aa = 3derivative(a*x^2, x, 2) дорівнює 12Відповідь оцінюється за близькими значеннями з обох боків точки. Якщо точне значення є числом зі зручним точним записом, Varlig зберігає його, тож точне порівняння працює. Ірраціональні значення, як похідна exp(x), зберігають усі цифри; порівнюйте їх із допустимою похибкою:
derivative(x^3, x, 2) == 12 дорівнює trueabs(derivative(exp(x), x, 1) - e) < 1e-6 дорівнює trueПоблизу точки вираз має бути гладким, без кутів чи розривів. derivative(abs(x), x, 0) дає помилку через кут функції abs у нулі, а derivative(sqrt(x), x, 0) — тому що sqrt не визначена ліворуч від нуля.
Визначене інтегрування
integrate(x^2, x, 0, 3) дорівнює 9integrate(sin(x), x, 0, pi) дорівнює 2integrate(x^2, x, 3, 0) дорівнює -9integrate(4/(1 + x^2), x, 0, 1) дорівнює 3.1415926536# Distance fallen in 3 s: integrate the speed, 9.8t m/sintegrate(9.8*t, t, 0, 3) дорівнює 44.1Аргументи: вираз, змінна, нижня й верхня межі, у тому самому порядку, що й у sum. Відповідь — площа під кривою між межами з урахуванням знака. Перестановка меж змінює знак, а однакові межі дають нуль. Можна інтегрувати функції з нотатки, наприклад integrate(power(t), t, 0, 4).
integrate використовує чисельний метод, тому має обмеження:
- Невизначене інтегрування не підтримується: результат завжди число, а не формула.
- Обидві межі мають бути скінченними числами; інтегрування до нескінченності неможливе.
- Вираз має бути визначений на всьому проміжку.
integrate(1/sqrt(x), x, 0, 1)дає помилку, оскільки1/sqrt(0)означає ділення на нуль, хоча сама площа скінченна. - Стрибки, вузькі піки або дуже швидкі коливання можуть спричинити неточну відповідь чи помилку.
- Одиниці не підтримуються; залишайте їх у коментарі, як в останньому прикладі.
Алгоритми й збіжність
Ці подробиці не потрібні щодня, але допомагають розібратися з підозрілим результатом або помилкою.
solve використовує метод бісекції: повторно ділить проміжок навпіл, залишаючи половину зі зміною знака. Зупиняється, коли left - right відрізняється від нуля не більш ніж на 10⁻¹⁰ і проміжок достатньо вузький. Після 128 поділів без результату повертає помилку.
Символьна derivative послідовно застосовує стандартні правила без спрощення. Результат може містити до 8192 символів. Це не повноцінна система комп’ютерної алгебри.
Чисельна derivative порівнює центральні різниці зі зменшуваним кроком і окремо перевіряє похідну з кожного боку. Якщо оцінки не узгоджуються або сусіднє значення не визначене, повертається помилка замість здогаду.
integrate використовує адаптивні 7- і 15-точкові формули Гаусса — Кронрода. Для кожної частини проміжку порівнюються дві оцінки; частина з найбільшою оціненою похибкою ділиться, доки сумарна оцінка похибки не стане меншою за 10⁻⁹ × max(1, |відповідь|). Дозволено до 2048 поділів, 20 рівнів вкладеності та спільний ліміт 100 000 кроків. Точки нерівномірні, тому швидкі коливання на кшталт cos(128*pi*x) від 0 до 1 правильно дають приблизно нуль, а не сприймаються як стала. Оцінка похибки залишається евристичною: обережно трактуйте результати для виразів з особливостями чи розривами.
Повні правила наведено в довіднику з вищої математики.
Поєднання можливостей
Перевіримо задачу з фізики: м’яч кинуто вертикально вгору зі швидкістю 19,6 м/с, прискорення вільного падіння — 9,8 м/с²:
# Height in metres after t secondsheight(t) = 19.6*t - 4.9*t^2velocity(t) = 19.6 - 9.8*t# Lands when the height is back to zero (skip t = 0)landing = solve(height(t) = 0, t, 1, 10) дорівнює 4# Speed after 1 second, from the slope of the heightderivative(height(t), t, 1) дорівнює 9.8# Highest point, where the velocity is zeropeak = solve(velocity(t) = 0, t, 0, landing) дорівнює 2height(peak) дорівнює 19.6# Check: integrating the velocity up to the peak gives the same heightintegrate(velocity(t), t, 0, peak) дорівнює 19.6М’яч приземляється через 4 секунди й досягає 19,6 м на другій секунді. Нижня межа 1 у рядку landing віддаляє solve від іншого кореня, t = 0. Останній рядок підтверджує висоту іншим способом — інтегруванням швидкості.