числовой::

Аппроксимируйте число с плавающей запятой рациональным числом

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::rationalize(object, <Exact | Minimize | Restore>, <digits>)

Описание

numeric::rationalize(object) заменяет все числа с плавающей запятой в object рациональными числами.

Объект области библиотеки, охарактеризованной domtype(extop(object,0))=DOM_DOMAIN, возвращен неизменный. Для всех других объектов numeric::rationalize применяется рекурсивно ко всем операндам. Объекты областей библиотеки могут быть рационализированы, если область имеет соответствующий метод map. Смотрите Пример 5.

Число с плавающей запятой f аппроксимировано рациональным числом r, удовлетворяющий |f - r | <ε   | f |.

Примечание

С опциями Exact и Minimize, гарантируемая точность. С Restore гарантируемая точность только.

Точностью по умолчанию является digits = DIGITS.

Определяемая пользователем точность не должна быть больше, чем внутренняя точность с плавающей точкой, установленная DIGITS: ошибка происходит для digits > DIGITS.

Взаимодействия среды

Функция чувствительна к переменной окружения DIGITS.

Примеры

Пример 1

numeric::rationalize применяется к каждому операнду составного объекта:

numeric::rationalize(0.2*a+b^(0.7*I))

numeric::rationalize([{poly(0.2*x, [x]), sin(7.2*PI) + 1.0*I},
                      exp(3 + ln(2.0*x))])

Пример 2

Мы демонстрируем стратегию по умолчанию Exact:

numeric::rationalize(12.3 + 0.5*I),
numeric::rationalize(0.33333), 
numeric::rationalize(1/3.0)

numeric::rationalize(10^12/13.0),
numeric::rationalize(10^(-12)/13.0)

Мы уменьшаем точность приближения к 5 цифрам:

numeric::rationalize(10^12/13.0, 5),
numeric::rationalize(10^(-12)/13.0, 5)

Пример 3

Мы демонстрируем стратегию Minimize для минимизации сложности получившегося рационального числа:

numeric::rationalize(1/13.0, 5),
numeric::rationalize(1/13.0, Minimize, 5),
numeric::rationalize(0.333331, 5),
numeric::rationalize(0.333331, Minimize, 5),
numeric::rationalize(14.285, 5),
numeric::rationalize(14.2857, Minimize, 5),
numeric::rationalize(1234.1/56789.2),
numeric::rationalize(1234.1/56789.2, Minimize)

Мы вычисляем рациональные приближения π с различной точностью:

numeric::rationalize(float(PI), Minimize, i) $ i = 1..10

Пример 4

Мы демонстрируем стратегию Restore для восстановления рациональных чисел после элементарных операций плавающих. Во многих случаях, также восстановления стратегии Minimize:

numeric::rationalize(1/7.3, Exact),
numeric::rationalize(1/7.3, Minimize),
numeric::rationalize(1/7.3, Restore)

Однако использование Restore улучшает возможности восстановления с эффектов округления:

numeric::rationalize(10^9/13.0, Minimize),
numeric::rationalize(10^9/13.0, Restore)

DIGITS:= 11:
numeric::rationalize(1234.56/12345.67, Minimize),
numeric::rationalize(1234.56/12345.67, Restore)

В некоторых случаях Restore удается восстановиться с распространения ошибки округления в составных арифметических операциях:

DIGITS:= 10:
x:= float(122393/75025):
y:= float(121393/75025):
z := (x^2 - y^2)/(x + y)

numeric::rationalize(z, Restore)

Результат с Restore соответствует точной арифметике:

rx := numeric::rationalize(x, Restore):
ry := numeric::rationalize(y, Restore):
rx, ry, (rx^2 - ry^2)/(rx + ry)

Обратите внимание на то, что приближение с Restore может иметь уменьшаемую точность только digits/2:

x := 1.0 + 1/10^6:
numeric::rationalize(x, Exact),
numeric::rationalize(x, Restore)

delete x, y, z, rx, ry:

Пример 5

Плавания в объектах областей библиотеки не рационализированы непосредственно. Однако для большинства областей соответствующий метод map может передать numeric::rationalize операндам:

Dom::Multiset(0.2, 0.2, 1/5, 0.3)

numeric::rationalize(%), map(%, numeric::rationalize, Restore)

Параметры

object

Произвольный объект MuPAD®

digits

Положительное целое число (количество десятичных цифр) не больше, чем переменная окружения DIGITS. Это определяет точность рационального приближения.

Опции

Exact

Задает стратегию приближения чисел с плавающей запятой рациональными числами. Это - стратегия по умолчанию, таким образом, нет никакой действительной потребности передать Exact в качестве параметра numeric::rationalize.

Любое действительное число с плавающей запятой f ≠ 0.0 имеет уникальное представление

С целочисленной экспонентой и 1,0 ≤ mantissa <10.0. С опцией Exact мантисса плавающая заменяется рациональным приближением

.

Это гарантирует относительную точность digits значительные десятичные числа рационального приближения.

Minimize

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

Гарантируемой точностью рационального приближения является digits.

Смотрите пример 3.

Restore

Задает стратегию приближения чисел с плавающей запятой рациональными числами. Эта стратегия пытается восстановить рациональные числа, полученные после того, как элементарные арифметические операции применились к числам с плавающей запятой. Например, для рационального r деление плавающее f = 1/float(r) вводит дополнительное округление, которое алгоритм Restore пытается устранить: numeric::rationalize(f, Restore) = 1/r. Эта стратегия, однако, является просто эвристикой и не успешно выполнится, когда значительное округление вызывается арифметическими операциями плавающими!

Примечание

Гарантируемой точностью рационального приближения является только digits/2!

Смотрите пример 4.

Возвращаемые значения

Если аргумент является объектом некоторой области ядра, то это возвращено со всеми операндами с плавающей точкой, замененными рациональными числами. Объект некоторой области библиотеки возвращен неизменный.

Перегруженный

object

Алгоритмы

Расширение непрерывной дроби (CF) используется с опциями Minimize и Restore.

С Minimize возвращено первое приближение CF, удовлетворяющее критерий точности.

Остановки алгоритма Restore, когда большие коэффициенты расширения CF найдены.