Высшая математика: функции и ограничения
Здесь собраны расширенные возможности 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 |
Списки, матрицы и комплексные числа — обычные значения. Их можно именовать и передавать собственным функциям; при изменении предыдущих строк они пересчитываются.
squares(n) = sum(k^2, k, 1, n)squares(3) даёт 14first(items) = items[0]first([10, 20]) даёт 10root(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)вычисляет скалярное произведение двух действительных векторов.
spend = [420, 385, 510, 460] даёт [420, 385, 510, 460]sum(spend) даёт 1,775average(spend) даёт 443.75median(spend) даёт 440spend[0] даёт 420spend * 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, но обращение по индексу возвращает сохранённое значение. Плохо обусловленные матрицы могут терять точность; не проверяйте такие результаты через ==.
# Two adult tickets and one child ticket cost 34; one adult and two children cost 29solve_system([[2,1],[1,2]], [34,29]) даёт [13, 8]det([[2,1],[1,2]]) даёт 3rank([[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, а также дробные и комплексные степени принимают комплексные числа. Они используют плавающую точку и главные ветви. Логарифм нуля и любой неконечный результат вызывают ошибку.
(2+3i) * (2-3i) даёт 13abs(3+4i) даёт 5sqrt(-4 + 0i) даёт 2isqrt(complex(-4,0)) даёт 2isqrt(-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 членами.
sum(k^2, k, 1, 10) даёт 385product(k, k, 1, 5) даёт 120k = 7 даёт 7sum(k, k, 1, 3) даёт 6k даёт 7Решение уравнений
Функция solve(equation) решает полиномиальное уравнение первой или второй степени с одной неизвестной. Неизвестная — единственное имя без значения; определённые имена подставляются как числа. Правую часть можно опустить: тогда выражение приравнивается нулю.
- Линейное уравнение возвращает число. Квадратное — список различных действительных корней по возрастанию; повторный корень даёт список из одного элемента. Форма результата определяется степенью уравнения, а не числом найденных корней.
- Коэффициенты и их преобразования точны. Корни тоже точны, если дискриминант — полный квадрат. В остальных случаях квадратное уравнение даёт два приближённых десятичных корня.
- Обе стороны должны содержать числа без единиц. Единицы, деньги и комплексные значения не допускаются.
- Если действительных корней нет, возвращается
Error: no real solution, а не комплексный корень. Если уравнению удовлетворяет любое значение, это сообщается вместо произвольного выбора. - Остальные случаи — степень от 3, неполиномиальное уравнение, неизвестная в делителе или показателе, второе неопределённое имя — отклоняются с предложением формы из четырёх аргументов ниже.
solve(2x + 6 = 10) даёт 2solve(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. - Корень точно на границе принимается. Иначе знаки выражения на границах должны различаться, а между ними оно должно быть непрерывным.
- На каждом шаге интервал делится пополам. Поиск завершается, когда выражение отличается от нуля не более чем на
1e-10, а интервал достаточно узок; доступно 128 шагов. Неопределённое значение в проверяемой точке или отсутствие сходимости вызывает ошибку. - Находится один корень, а не все. Для линейных систем используйте
solve_system.
solve(1500 + 12*x = 20*x, x, 0, 1000) даёт 187.5solve(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, вызывают ошибку; для них используйте производную в точке. Это не полноценная система компьютерной алгебры. - Производная сохраняет ограничения области определения исходного выражения.
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: с его названием.
derivative(x^3, x, 2) даёт 12f(x) = x^2derivative(f(x), x, 3) даёт 6differentiate(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 шагов, общих с другими расширенными вычислениями строки. Достижение предела или неопределённая точка вызывает ошибку.
- Оценка погрешности полезна, но не гарантирована. Используйте гладкие конечные выражения: пики, скачки и быстрые колебания могут снизить точность.
- Неопределённые интегралы и бесконечные границы не поддерживаются.
integrate(x^2, x, 0, 3) даёт 9integrate(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°. - Квадратные и кубические корни сохраняют единицы, если их показатели делятся нацело. Степени величин возводят в степень и единицы. Температуры Цельсия и Фаренгейта нельзя возводить в квадрат или извлекать из них корень.
gcd(12, 18) даёт 6round(17, 5) даёт 15sin(30°) даёт 0.5sqrt(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
При достижении ограничения ошибка появляется только в этой строке, остальная заметка работает. Частичная сумма, незавершённое обращение матрицы или несошедшийся корень не выдаются за результат. Все ограничения и сведения о точности — в разделе Чтение результатов: отображение и точность.