Пропустить к содержанию
Руководство 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.
  • Корень точно на границе принимается. Иначе знаки выражения на границах должны различаться, а между ними оно должно быть непрерывным.
  • На каждом шаге интервал делится пополам. Поиск завершается, когда выражение отличается от нуля не более чем на 1e-10, а интервал достаточно узок; доступно 128 шагов. Неопределённое значение в проверяемой точке или отсутствие сходимости вызывает ошибку.
  • Находится один корень, а не все. Для линейных систем используйте 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

При достижении ограничения ошибка появляется только в этой строке, остальная заметка работает. Частичная сумма, незавершённое обращение матрицы или несошедшийся корень не выдаются за результат. Все ограничения и сведения о точности — в разделе Чтение результатов: отображение и точность.