DOM_INTERVAL
Интервалы с плавающей точкой
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Объект типа DOM_INTERVAL
представляет интервал комплексных чисел. Или границей может быть infinity или - ∞. Границы представлены числами с плавающей точкой (DOM_FLOAT
).
Объекты типа DOM_INTERVAL
представляют числовые корпуса прямоугольников в комплексной плоскости или конечных объединениях этого. Числовые корпуса действительных интервалов являются важным особым случаем.
Поскольку элемент типа, DOM_INTERVAL
содержит числа с плавающей запятой типа DOM_FLOAT
, его точное значение, зависит от значения переменной окружения DIGITS
во время создания.
Результат всех арифметических операций на элементах типа, DOM_INTERVAL
округлен за пределы, то есть, получившееся (объединение) прямоугольник (прямоугольники), как гарантируют, будет содержать точный результат. Если интервал результата будет чисто действителен, нижняя граница результата, как гарантируют, будет не больше, чем точное значение точного результата, в то время как верхнее значение результата, как гарантируют, будет не меньшим, чем точное значение. Точные значения не могут быть представимыми как числа с плавающей запятой. В этом случае результатом одной операции, такой как +
или *
является самый маленький представимый интервал, содержащий точный результат. Другими словами, операции на DOM_INTERVAL
локально оптимальны.
Обратите внимание на то, что представление элемента DOM_INTERVAL
на экране сгенерировано с исходящим округлением, также. Это может привести к “очевидной переоценке”, как вы видите в Примере 1.
Для генерации матричных или полиномиальных звонков на интервалах с плавающей точкой используйте область фасада Dom::FloatIV
.
Интервал типа, DOM_INTERVAL
может только содержать числа с плавающей запятой, которые внутренне хранятся как двоичные числа. Поэтому это не может содержать символьные выражения как свои операнды:
iv := hull(PI)
Это интервалы, конечно, содержит π. Однако значение, распечатанное на экране, точно не описывает сгенерированный интервал, когда вы видите, когда вы распечатываете тот же интервал с большим значением DIGITS
:
DIGITS := 15: iv; delete DIGITS:
В первом выводе выглядело, как будто различие между двумя границами (ширина интервала) равнялось 10 - 8, в то время как в последнем выводе мы видим, что это самое большее 10 - 13. На самом деле различие еще меньше:
op(iv,2) - op(iv,1)
Это округление не происходит для символьных значений, которые могут быть представлены точно и во внутреннем (двоичный файл) и в экранном (десятичном) формате:
iv := hull(1); op(iv,2) - op(iv,1)
Однако значения с плавающей точкой во входе приняты, чтобы быть приближениями до текущей вычислительной точности:
iv := hull(1.0); op(iv,2) - op(iv,1)
Если вы преобразуете infinity
или -infinity
на интервал типа DOM_INTERVAL
, то получившийся интервал будет содержать соответствующую бесконечность с плавающей точкой, которые отображены как RD_INF
или RD_NINF
, соответственно:
hull(infinity), hull(-infinity)
Поскольку область значений чисел с плавающей запятой ограничивается, также преобразование конечных значений может сгенерировать бесконечности с плавающей точкой. Точный предел чисел с плавающей запятой может измениться от одной версии MuPAD® до следующего. В настоящее время следующая команда превышает представимую область значений::
hull(exp(10^9))
Что касается вычисления с интервалами с бесконечностями как их границы, обратите внимание, что любое умножение, где одним фактором является точно нуль и другой фактор, содержит любую бесконечность результаты в интервале, охватывающем целую вещественную ось:
(0...0) * (1e30...infinity)
Объекты типа DOM_INTERVAL
представляют прямоугольные подмножества комплексной плоскости со сторонами, параллельными осям координат или объединениям таких прямоугольников. В следующем примере точным результатом был бы вращаемый прямоугольник. Арифметика интервала возвращает самый маленький невращаемый прямоугольник, заключающий точный результат:
(1...2+I)*(1+I)
При вычислении с числами с плавающей запятой можно легко столкнуться с ошибками отмены и округления без того, чтобы замечать:
(1+1e-18) - 1.0
sin(1e42)
Основная проблема численных расчетов состоит в том, что нет никакой индикации этим ошибкам. Конечно, можно обойти большинство проблем этого типа путем увеличения числа значительных цифр, если вы знаете, что проблемы скрываются:
DIGITS:=50: (1+1e-18) - 1.0, sin(1e42)
Вычисления интервала, среди других вещей, обеспечивают путь, который будет уведомлен относительно отмены, поскольку результат операции по DOM_INTERVAL
несомненно будет содержать точный результат:
DIGITS:=10: (1+1e-18) - hull(1.0)
sin(hull(1e42))
DIGITS:=50: sin(hull(1e42))
Так, в последнем случае мы знаем, что первые 17 цифр правильны и что 18-я цифра равняется 3, 4, или 5.
Результатом вызова интервала является сам интервал, независимо от аргументов. Аргументы не оценены.
Можно получить доступ к границам интервала с помощью op
. Смотрите ниже для деталей.
Интервалы могут быть просмотрены как наборы и соответствующие функции union
, intersect
, и minus
работает над интервалами, также.
С версии 2.5 MuPAD реализует следующие операции на элементах типа DOM_INTERVAL
:
Тригонометрические функции и их инверсии: sin
, cos
, tan
, sec
, csc
, cot
, arcsin
, arccos
, arctan
, arccsc
, arccot
.
Гиперболические функции и их инверсии: sinh
, cosh
, tanh
, sech
, csch
, coth
, arcsinh
, arccosh
, arctanh
, arccsch
, arccoth
.
Функции Re
, Im
(действительный - и мнимая часть), abs
, sign
и arg
('аргумент' = угол в полярных координатах комплексного числа).
Для допустимых комбинаций аргументов все вычисления выполняются в арифметике интервала, видят Пример 4.
Операнды интервала зависят от его значения:
Интервал типа DOM_INTERVAL
может быть объединением прямоугольников в комплексной плоскости. В этом случае 0th операнд является идентификатором union
, в то время как остающиеся операнды являются соответствующими прямоугольниками, которые имеют тип DOM_INTERVAL
.
Прямоугольники с ненулевой мнимой частью, которые не являются объединениями, имеют два операнда типа DOM_INTERVAL
: Их действительные и мнимые части, обе из которых являются действительными интервалами.
Действительные интервалы, т.е. не состоящие в профсоюзе прямоугольники с исчезающей мнимой частью, имеют два операнда, их левые и правые границы.
Действительный интервал отображен в форме, “оставил право ...
”, где “оставлено” и “право” границы интервала, распечатанного как числа с плавающей запятой.
Комплексный интервал отображен как “(действительная часть) + (мнимая часть) * я”, с действительной и мнимой частью, отображенной как действительные интервалы.
Объединение прямоугольников отображено как “интервал объединения интервала”, с интервалами, внутри записанными, как задано выше.
Вывод интервала зависит от переменной окружения DIGITS
, а также от настроек preference Pref::floatFormat
и Pref::trailingZeroes
.
Обратите внимание на то, что границы округлены за пределы для печати. Пример 1 показывает, как это производит вывод.
Элементы типа DOM_INTERVAL
могут быть созданы следующими способами:
Обратите внимание на то, что значения с плавающей точкой во входе hull
или interval
считаются приближениями, даже если значение, отображенное в десятичной системе счисления, может быть представлено точно во внутреннем двоичном формате. Это вызвано тем, что hull
не может решить, был ли, например, 0.25 на самом деле введен как таковой или если это должны были быть приблизительно 0,25 + ϵ. Если вы хотите интервалы нулевой ширины, используйте рациональное число в качестве входа, который может быть представлен точно в двоичном файле:
Интервалы типа, DOM_INTERVAL
всегда интерпретируется как закрытые интервалы, т.е. конечные точки, принадлежат набору. Разумно не иметь открытые включенные интервалы, поскольку большинство операций увеличит получившийся интервал так или иначе (несмотря на то, что только незначительно так).