Перейти до вмісту
Посібник Varlig
Головна сторінка Varlig

Вища математика: функції та обмеження

Ця сторінка узагальнює розширені математичні можливості Varlig Calc: списки, вектори й матриці, комплексні числа, суми й добутки, розв'язування рівнянь і математичний аналіз. Для кожної можливості наведено призначення функцій, допустимі аргументи, точність відповідей та обмеження. Звертайтеся сюди, якщо результат потребує пояснення.

Вступні пояснення з додатковими прикладами: Списки й статистика, Вектори й матриці, Комплексні числа та Підсумовування, рівняння й математичний аналіз.

Короткий огляд

Можливість Приклад Відповідь
Список [1, 2+3, 4*2] [1, 5, 8]
Елемент списку [10, 20, 30][1] 20
Елемент вкладеного списку [[1,2],[3,4]][1][0] 3
Сума величин sum([1 kg, 500 g]) 1.5 kg
Статистика average([1,2,3]), median([5,1,3]) 2, 3
Діапазон зі зворотним відліком range(5, 1, -2) [5, 3, 1]
Додавання списків [1,2] + [3,4] [4, 6]
Матричний добуток [[1,2],[3,4]] * [[1,0],[0,1]] [[1, 2], [3, 4]]
Обернена матриця inverse([[1,2],[3,4]]) [[-2, 1], [1.5, -0.5]]
Визначник det([[1,2],[3,4]]) -2
Транспонування transpose([[1,2],[3,4]]) [[1, 3], [2, 4]]
Лінійна система solve_system([[2,1],[1,2]], [34,29]) [13, 8]
Комплексна арифметика (2+3i) * (2-3i) 13
Комплексний квадратний корінь sqrt(complex(-4,0)) 2i
Найчастіше значення mode([1,2,2,3]) 2
Процентиль percentile([1,2,3,4],25) 1.75
Стандартне відхилення генеральної сукупності population_stddev([1,2,3,4]) 1.1180339887
Сума на діапазоні sum(k^2, k, 1, 10) 385
Добуток на діапазоні product(k, k, 1, 5) 120
Точне розв'язання рівняння solve(x^2 - 5x + 6 = 0) [2, 3]
Розв'язання рівняння в діапазоні solve(x^2 = 4, x, 0, 3) 2
Символьна похідна differentiate(sin(x), x) cos(x)
Похідна в точці derivative(x^3, x, 2) 12
Визначений інтеграл integrate(x^2, x, 0, 3) 9

Списки, матриці й комплексні числа — звичайні значення. Їм можна давати назви, передавати у власні функції; вони перераховуються після зміни попереднього рядка.

calc
squares(n) = sum(k^2, k, 1, n)
squares(3) дорівнює 14
first(items) = items[0]
first([10, 20]) дорівнює 10
root(y) = solve(x^2 = y, x, 0, 10)
root(9) дорівнює 3

Що гарантує обчислювальний рушій

Усе на цій сторінці спирається на одне правило: обчислення або має обґрунтований результат, або показує помилку з поясненням. Точне обчислення ніколи не замінюється просто правдоподібним числом.

Точність відповіді

Спосіб обчислення Що охоплює
Точні дроби Коефіцієнти рівняння й корінь лінійного рівняння; корені квадратного рівняння з дискримінантом — повним квадратом; матричні +, -, *, множення на число, transpose, det, inverse, rank і solve_system; median, mode, modes, percentile, quartile та всі три види дисперсії
Десятковий квадратний корінь stddev, sample_stddev, population_stddev і корені інших квадратних рівнянь
Двійкова арифметика з рухомою комою eigenvalues, qr, lu, svd, integrate і solve із чотирма аргументами

Точність означає відсутність округлення від зчитування рядка до показу відповіді: точний результат зберігається після присвоєння назви, збереження й повторного використання. Наближений результат — десяткове число з обмеженою точністю, як у sqrt. Його остання показана цифра не гарантує правильного округлення, тому порівняння двох наближених результатів через == ненадійне: solve(x^2 - 2 = 0) і sqrt(2) обидва показують 1.4142135624, але не рівні.

В одній відповіді точні й наближені результати не змішуються. Якщо дискримінант квадратного рівняння не є повним квадратом, обидва корені будуть наближеними.

Одиниці

Операція Правило
Матриці Лише числа без одиниць; одиниці, гроші й комплексні елементи не допускаються
Рівняння Лише числа без одиниць в обох частинах
median, mode, modes, percentile, quartile, stddev, population_stddev Одна спільна розмірність або числа без одиниць. Сумісні одиниці приводяться до одиниці першого значення, і відповідь її зберігає
variance, sample_variance, population_variance Лише числа без одиниць: дисперсія підносить спостереження до квадрата й не зберігає одиниць

Поєднання величин з одиницями та без них спричиняє помилку, а не мовчазне використання чисел без одиниць. Є один усталений виняток: окреме 0 набуває одиниці інших значень.

Що не допускається

Жодна з таких ситуацій не дає числа чи текстової відповіді. Кожна спричиняє помилку, яка називає непідтримувану дію та, якщо можливо, пропонує підтримуваний запис:

  • Поліноміальне рівняння вище другого степеня, неполіноміальне рівняння, невідома в дільнику або показнику степеня, дві назви без заданих значень, рівняння без невідомої або з одиницями чи грошима. У кожному випадку повідомлення вказує на числовий solve із чотирма аргументами.
  • Рівняння без дійсного кореня не повертає комплексний; рівняння, правильне для всіх значень, не вибирає одне з них.
  • Матрична операція з несумісними чи неквадратними розмірами, обернення виродженої матриці або елемент, що не є числом без одиниць.
  • mode, якщо жодне значення не повторюється або кілька значень мають однакову найбільшу частоту; процентиль поза межами 0–100; квартиль поза межами 0–4; будь-яка статистика порожнього списку, крім sum, product і count.

Навмисно не підтримуються: символьні перетворення, крім збирання коефіцієнтів полінома, системи нелінійних рівнянь, комплексні корені дійсного рівняння, матриці з одиницями або грошима, символьне інтегрування й побудова графіків.

Самі повідомлення наведено на сторінці Помилки, діагностика й обмеження.

Запис списків і математичних функцій

  • Коми розділяють елементи й аргументи. Кома з пробілом завжди є роздільником, а кома перед рівно трьома цифрами групує тисячі, тому [1,200, 1,800] має два елементи. Без пробілів кожна кома розділяє елементи, як у [12,-51,4]. Якщо запис можна прочитати двома способами, як [1,234], повідомлення про помилку показує обидва однозначні варіанти. Для дробової частини використовуйте десяткову крапку.
  • Матриці — це списки рядків, наприклад [[1,2],[3,4]]. Скорочений запис із крапкою з комою на зразок [1,2;3,4] не підтримується.
  • Індекси починаються з 0 і мають бути цілими невід'ємними числами. Індекс за межами списку спричиняє помилку: він не переходить циклічно на початок і не зменшується автоматично.
  • Кількість аргументів перевіряється. sqrt(4,9) спричиняє помилку, а не спробу вгадати намір.

Списки й статистика

Список приймають такі функції: length або count, sum, product, average або mean, median, min, max, mode і modes, percentile і quartile, а також функції розкиду variance, sample_variance, population_variance, stddev, sample_stddev і population_stddev.

  • mode повертає відповідь, лише коли одне значення трапляється строго найчастіше. Однакова найбільша частота чи відсутність повторів спричиняє помилку з посиланням на modes, median або average. modes повертає всі найчастіші значення.
  • percentile(list, rank) приймає ранг від 0 до 100 і лінійно інтерполює між двома найближчими рангами за визначенням із включеними краями: 50-й процентиль — медіана, а 0-й і 100-й — найменше й найбільше значення. quartile(list, k) приймає ціле k від 0 до 4 і дорівнює percentile(list, 25k).
  • variance і stddev — вибіркові форми: вони ділять на n - 1 і потребують двох значень. population_variance і population_stddev ділять на n і потребують одного. sample_variance і sample_stddev — повні назви коротких варіантів.
  • Для порожнього списку sum дорівнює 0, product — 1, а count — 0. Інші статистики порожнього списку спричиняють помилки.
  • Два списки однакової довжини додаються й віднімаються поелементно. Список можна множити або ділити на число, а два списки — порівнювати через ==.
  • range(start, end, step) включає обидві межі. Крок необов'язковий.
  • dot(a, b) обчислює скалярний добуток двох дійсних векторів.
calc
spend = [420, 385, 510, 460] дорівнює [420, 385, 510, 460]
sum(spend) дорівнює 1,775
average(spend) дорівнює 443.75
median(spend) дорівнює 440
spend[0] дорівнює 420
spend * 1.1 дорівнює [462, 423.5, 561, 506]
range(0, 1, 0.25) дорівнює [0, 0.25, 0.5, 0.75, 1]

Перетворення списків

Виклик Відповідь Призначення
sort([3,1,2]) [1, 2, 3] Сортує числа без одиниць за зростанням; рівні елементи зберігають порядок
reverse([1,2,3]) [3, 2, 1] Розвертає будь-який список
unique([3,1,3,2]) [3, 1, 2] Залишає перше входження кожного значення; елементи мають збігатися точно, включно з одиницями
slice([10,20,30,40], 1, 3) [20, 30] Бере елементи від початкового індексу включно до кінцевого невключно
map(x^2, x, [1,2,3]) [1, 4, 9] Обчислює вираз для кожного елемента
filter(x > 1, x, [1,2,3]) [2, 3] Залишає елементи, для яких умова істинна
variance([1,2,3]) 1 Точна вибіркова дисперсія з діленням на кількість значень мінус один
  • slice потребує цілих чисел, для яких 0 ≤ start ≤ end ≤ довжина списку. Інші межі спричиняють помилки.
  • variance потребує щонайменше двох чисел без одиниць.
  • map і filter приймають спочатку вираз, потім назву для кожного елемента й нарешті список. Назва діє лише всередині виклику, тому не змінює однойменне значення, визначене деінде. Вираз у filter має повертати true або false.

Вектори й матриці

Вектори — одновимірні списки, а матриці — списки рядків. Матриці мають бути прямокутними, містити дійсні числа без одиниць і мати від 1 до 32 рядків та стовпців.

Функція Призначення
A * B Матричний добуток; кількість стовпців A має дорівнювати кількості рядків B
transpose(A) Міняє рядки й стовпці місцями
shape(A) [rows, columns]
identity(n) Одинична матриця розміром n на n
trace(A) Сума діагональних елементів квадратної матриці
det(A) Визначник квадратної матриці
inverse(A) Обернена до квадратної матриці; вироджена матриця спричиняє помилку
rank(A) Ранг будь-якої прямокутної матриці методом точного виключення
dot(a, b) Скалярний добуток двох векторів однакової довжини
cross(a, b) Векторний добуток двох векторів із трьома елементами
solve_system(A, b) Розв'язує A*x = b для квадратної матриці A та одновимірного вектора b
eigenvalues(A) Власні значення дійсної квадратної матриці, включно з комплексними парами, без визначеного порядку
qr(A) [Q, R], де Q*R приблизно дорівнює A
lu(A) [P, L, U], де P*A приблизно дорівнює L*U; лише квадратні матриці
svd(A) [U, s, Vt], де s — одновимірний список сингулярних значень, а A приблизно дорівнює U*diag(s)*Vt

Точні результати. det, inverse, rank і solve_system використовують точні дроби. rank не застосовує допуску на округлення. solve_system повідомляє про помилку для виродженої системи й не обробляє нелінійні системи або системи з нескінченною кількістю розв'язків.

Наближені результати. eigenvalues, qr, lu і svd використовують числа з рухомою комою та перевіряють скінченність результату. qr і svd приймають прямокутні матриці й повертають компактні («тонкі») множники розкладу. Обчислення власних значень і SVD зупиняються після 10 000 ітерацій. У відображенні елемент, що є лише похибкою округлення відносно найбільшого елемента, показується як 0, але доступ за індексом повертає збережене значення. Погано обумовлені матриці можуть втрачати точність, тому не перевіряйте ці результати через ==.

calc
# Two adult tickets and one child ticket cost 34; one adult and two children cost 29
solve_system([[2,1],[1,2]], [34,29]) дорівнює [13, 8]
det([[2,1],[1,2]]) дорівнює 3
rank([[1,2],[2,4]]) дорівнює 1

Комплексні числа

i — уявна одиниця, якщо ви не визначили назву або власну одиницю i.

  • Функції: complex(real, imaginary), real, imag, conj, abs, arg (у радіанах) і sqrt (головний корінь) приймають комплексні числа.
  • Точність: частини числа, арифметика й цілочислові степені залишаються точними. Корені в загальному випадку й arg є наближеними.
  • Дійсні результати: якщо уявні частини взаємно знищуються, як у (2+3i) * (2-3i), відповідь стає звичайним дійсним числом. Значення, явно записане як комплексне, наприклад -4 + 0i або complex(-4,0), зберігає комплексний тип в арифметиці й іменованих значеннях, хоча відображається як -4.
  • Квадратні корені й логарифми від'ємних чисел: sqrt(-4), ln(-1) і log(-100) залишаються в області дійсних чисел і показують помилку про уявне число з підказкою комплексного запису, наприклад sqrt(-4 + 0i). Цей запис або sqrt(complex(-4,0)) дає 2i.
  • Відображення: частина, яка є лише похибкою округлення з рухомою комою, показується як 0, тому exp(i*pi) відображається як -1. Збережене значення лишається незмінним.
  • Порівняння: < і > працюють, лише коли обидві уявні частини дорівнюють нулю.
  • Інші функції: sin, cos, tan та обернені до них, гіперболічні й обернені гіперболічні функції, exp, ln, log або log10, log2, cbrt, а також дробові й комплексні степені приймають комплексні числа. Вони використовують арифметику з рухомою комою та головні гілки. Логарифм нуля й будь-який нескінченний або невизначений результат спричиняють помилку.
calc
(2+3i) * (2-3i) дорівнює 13
abs(3+4i) дорівнює 5
sqrt(-4 + 0i) дорівнює 2i
sqrt(complex(-4,0)) дорівнює 2i
sqrt(-4) дорівнює Error: imaginary number. For a complex answer, write sqrt(-4 + 0i)
exp(i*pi) дорівнює -1

Суми й добутки

sum(expression, name, from, to) додає значення виразу для кожного цілого числа від from до to включно. summation — інша назва цієї функції, а product натомість перемножує значення.

  • Назва локальна для виклику. Вона не змінює вже визначену однойменну назву й не створює залежності рядка від неї.
  • Одну суму або добуток можна вкладати в іншу.
  • Якщо to менше за from, діапазон порожній: сума дорівнює 0, а добуток — 1.
  • Один виклик може містити не більше ніж 10 000 членів.
calc
sum(k^2, k, 1, 10) дорівнює 385
product(k, k, 1, 5) дорівнює 120
k = 7 дорівнює 7
sum(k, k, 1, 3) дорівнює 6
k дорівнює 7

Розв'язування рівнянь

solve(equation) розпізнає поліноміальне рівняння першого або другого степеня з однією невідомою й обчислює його корені. Невідома — єдина назва в рівнянні без заданого значення; назва зі значенням підставляється як відповідна величина. Праву частину можна опустити — тоді вираз прирівнюється до нуля.

  • Лінійне рівняння повертає число. Квадратне — список різних дійсних коренів за зростанням, тож кратний корінь дає список з одним елементом. Форма відповіді залежить від записаного степеня, а не кількості знайдених коренів.
  • Коефіцієнти та їхні перетворення точні; корені також точні, якщо дискримінант є повним квадратом. Інше квадратне рівняння дає два корені в десятковому наближенні.
  • Обидві частини мають бути числами без одиниць. Одиниці, гроші й комплексні значення не допускаються.
  • Рівняння без дійсного кореня дає Error: no real solution, а не комплексний корінь. Якщо рівняння виконується для всіх значень, повідомлення прямо вказує на це, не вибираючи окреме значення.
  • Усе інше — степінь 3 і вище, неполіноміальне рівняння, невідома в дільнику чи показнику степеня, друга назва без значення — відхиляється з підказкою форми з чотирма аргументами, наведеної нижче.
calc
solve(2x + 6 = 10) дорівнює 2
solve(x^2 - 5x + 6 = 0) дорівнює [2, 3]
solve(x^2 - 2 = 0) дорівнює [-1.4142135624, 1.4142135624]
solve(x^2 + 1 = 0) дорівнює Error: no real solution

solve(expression, name, lower, upper) — інша функція: вона знаходить одне дійсне значення name між lower і upper, за якого вираз дорівнює нулю. solve(left = right, name, lower, upper) знаходить значення, за якого обидві частини рівні.

  • Межі мають бути скінченними числами, причому lower менше за upper.
  • Корінь точно на межі приймається. Інакше вираз має бути додатним на одній межі й від'ємним на іншій та неперервним між ними.
  • На кожному кроці пошук ділить інтервал навпіл. Він завершується успішно в межах 128 кроків, коли вираз відрізняється від нуля не більше ніж на 1e-10, а інтервал достатньо вузький. Якщо в перевіреній точці вираз не визначений або пошук не збігається, рядок показує помилку.
  • Функція знаходить один корінь, а не всі. Для систем лінійних рівнянь використовуйте solve_system.
calc
solve(1500 + 12*x = 20*x, x, 0, 1000) дорівнює 187.5
solve(x^2 = 2, x, 0, 2) дорівнює 1.4142135624

Математичний аналіз

Символьні похідні

differentiate(expression, name), також записувана як derivative(expression, name), повертає похідну текстом.

  • Вона застосовує правила суми, добутку, частки, степеня й складеної функції до арифметики дійсних чисел без одиниць, а також до sin, cos, tan, sinh, cosh, exp, ln і sqrt.
  • Інші назви у виразі вважаються сталими незалежно від того, чи мають вони значення в нотатці: differentiate(a*x^2, x) дає (a*(2*(x^(2-1)))).
  • Результат не спрощується й обмежений 8 192 символами.
  • Інші функції, наприклад abs, спричиняють помилку; для них використовуйте похідну в точці. Це не повноцінна система комп'ютерної алгебри.
  • Похідна має ті самі обмеження області визначення, що й початковий вираз.
calc
differentiate(sin(x), x) дорівнює cos(x)
differentiate(x^3, x) дорівнює (3*(x^(3-1)))

Похідні в точці

derivative(expression, name, point) або differentiate із трьома аргументами чисельно обчислює нахил в одній точці. Метод уточнює центральні різниці й перевіряє їх за односторонніми оцінками. Вираз може використовувати власні функції, але має бути гладким поблизу точки й містити дійсні числа без одиниць. Якщо оцінка не збігається або значення в одній із точок не визначене, рядок показує помилку.

Оскільки числові форми обчислюють число, усі назви, крім змінної, повинні мати значення. Це стосується похідних у точці, sum, product, solve та integrate; назва без значення дає Unsupported: Unknown name: із цією назвою.

calc
derivative(x^3, x, 2) дорівнює 12
f(x) = x^2
derivative(f(x), x, 3) дорівнює 6
differentiate(a*x^2, x) дорівнює (a*(2*(x^(2-1))))
derivative(a*x^2, x, 3) дорівнює Unsupported: Unknown name: a

Визначені інтеграли

integrate(expression, name, lower, upper) обчислює площу під графіком виразу між двома скінченними межами.

  • Перестановка меж змінює знак відповіді, а однакові межі дають нуль.
  • Використовуються адаптивні 7- і 15-точкові правила Гауса — Кронрода з нерівномірно розташованими точками. Це запобігає хибному результату для регулярних коливань на зразок cos(128*pi*x): integrate(cos(128*pi*x), x, 0, 1) дає приблизно -1.3e-15, тобто нуль у межах похибки округлення.
  • Цільова загальна оцінка похибки — не більше ніж 1e-9 від модуля відповіді (або 1e-9 для відповідей із модулем менше за 1). Метод порівнює щонайменше два рівні деталізації, враховує похибку округлення й спочатку уточнює ділянку з найбільшою оціненою похибкою.
  • Обчислення зупиняється після 2 048 уточнень, 20 рівнів поділу або 100 000 кроків, спільних з іншими розширеними обчисленнями в рядку. Досягнення межі або невизначене значення в точці спричиняє помилку.
  • Оцінка похибки — корисний орієнтир, але не гарантія. Використовуйте гладкі скінченні вирази. Для виразів із вузькими піками, стрибками або швидкими коливаннями результати можуть бути неточними.
  • Невизначені інтеграли й нескінченні межі не підтримуються.
calc
integrate(x^2, x, 0, 3) дорівнює 9
integrate(x^2, x, 3, 0) дорівнює -9

Аргументи й одиниці в математичних функціях

  • factorial — інша назва fact, а trunc — інша назва int.
  • sign повертає -1, 0 або 1. atan2(y, x) повертає кут у радіанах як число без одиниць.
  • Необов'язковий другий аргумент round, floor і ceil — крок, а не кількість знаків після коми: round(17, 5) округлює до найближчого кратного 5. Округлення до знаків після коми описано в розділі Округлення.
  • Логарифми, експоненти й гіперболічні функції не приймають одиниці або гроші. Звичайні тригонометричні функції приймають кути на зразок 30°.
  • Квадратні й кубічні корені зберігають одиниці, якщо їхні показники степеня діляться без остачі; піднесення величин до степеня також зберігає одиниці. Температуру в Цельсіях або Фаренгейтах не можна підносити до квадрата чи добувати з неї корінь.
calc
gcd(12, 18) дорівнює 6
round(17, 5) дорівнює 15
sin(30°) дорівнює 0.5
sqrt(9 m²) дорівнює 3 m
(2 kg)^2 дорівнює 4 kg²

Обмеження

Обмеження перевіряються до показу відповіді:

  • 1 024 елементи у списку або range
  • матриці до 32 × 32
  • 10 000 членів в одному sum або product
  • 16 рівнів вкладених списків і викликів функцій
  • 100 000 кроків для всіх розширених обчислень у рядку, включно з вкладеними викликами
  • 4 096 біт у чисельнику або знаменнику дробу, як і в інших обчисленнях Varlig Calc

Досягнення обмеження показує помилку в цьому рядку, а решта нотатки продовжує працювати. Часткова сума, обернена матриця чи корінь без досягнутої збіжності ніколи не видаються за готову відповідь. Усі обмеження й пояснення точності наведено в розділі Читання результатів: відображення й точність.