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.

Примеры

Пример 1

Интервал типа 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)

Пример 2

Если вы преобразуете infinity или -infinity на интервал типа DOM_INTERVAL, получившийся интервал будет содержать соответствующую бесконечность с плавающей точкой, которые отображены как RD_INF или RD_NINF, соответственно:

hull(infinity), hull(-infinity)

Поскольку область значений чисел с плавающей запятой ограничивается, также преобразование конечных значений может сгенерировать бесконечности с плавающей точкой. Точный предел чисел с плавающей запятой может измениться от одной версии MuPAD® до следующего. В настоящее время следующая команда превышает представимую область значений::

hull(exp(10^9))

Что касается вычисления с интервалами с бесконечностями как их границы, обратите внимание, что любое умножение, где одним фактором является точно нуль и другой фактор, содержит любую бесконечность результаты в интервале, охватывающем целую вещественную ось:

(0...0) * (1e30...infinity)

Пример 3

Объекты типа DOM_INTERVAL представляйте прямоугольные подмножества комплексной плоскости со сторонами, параллельными осям координат или объединениям таких прямоугольников. В следующем примере точным результатом был бы вращаемый прямоугольник. Арифметика интервала возвращает самый маленький невращаемый прямоугольник, заключающий точный результат:

(1...2+I)*(1+I)

Пример 4

При вычислении с числами с плавающей запятой можно легко столкнуться с ошибками отмены и округления без того, чтобы замечать:

(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пересечение, и minus работайте над интервалами, также.

С версии 2.5 MuPAD реализует следующие операции на элементах типа DOM_INTERVAL:

Для допустимых комбинаций аргументов все расчеты выполняются в арифметике интервала, видят Пример 4.

Операнды

Операнды интервала зависят от его значения:

  • Интервал типа DOM_INTERVAL может быть объединение прямоугольников в комплексной плоскости. В этом случае 0th операнд является идентификатором union, в то время как остающиеся операнды являются соответствующими прямоугольниками, которые имеют тип DOM_INTERVAL.

  • Прямоугольники с ненулевой мнимой частью, которые не являются объединениями, имеют два операнда типа DOM_INTERVAL: Их действительные и мнимые части, обе из которых являются действительными интервалами.

  • Действительные интервалы, т.е. не состоящие в профсоюзе прямоугольники с исчезающей мнимой частью, имеют два операнда, их левые и правые границы.

Вывод

Действительный интервал отображен в форме, “оставил ... право”, где “оставлено” и “право” являются границами интервала, распечатанного как числа с плавающей запятой.

Комплексный интервал отображен как “(действительная часть) + (мнимая часть) * я”, с действительной и мнимой частью, отображенной как действительные интервалы.

Объединение прямоугольников отображено как “интервал объединения интервала”, с интервалами, внутри записанными, как задано выше.

Выход интервала зависит от переменной окружения DIGITS а также на настройках preference Pref::floatFormat и Pref::trailingZeroes.

Обратите внимание на то, что границы округлены за пределы для печати. Пример 1 показывает, как это производит выход.

Создание элемента

Элементы типа DOM_INTERVAL может быть создан следующими способами:

  • С функциональным hull:

    hull(PI, -3, 1/2), hull(1/3)

  • С оператором ... (который в свою очередь вызывает hull):

    1 ... 4+I

  • Функциональный interval создает элементы типа DOM_INTERVAL также, но может возвратить выражения:

    interval(x^2+sin(1))

Обратите внимание на то, что значения с плавающей точкой во входе hull или interval считаются приближениями, даже если значение, отображенное в десятичной системе счисления, может быть представлено точно во внутреннем двоичном формате. Это вызвано тем, что hull не может решить, был ли, например, 0.25 на самом деле введен как таковой или если это должны были быть приблизительно 0,25 + ϵ. Если вы хотите интервалы нулевой ширины, используйте рациональное число в качестве входа, который может быть представлен точно в двоичном файле:

Алгоритмы

Интервалы типа DOM_INTERVAL всегда интерпретируются как закрытые интервалы, т.е. конечные точки принадлежат набору. Разумно не иметь открытые включенные интервалы, поскольку большинство операций увеличит получившийся интервал так или иначе (несмотря на то, что только незначительно так).