Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Конкретный выбор параметров может уменьшать некоторые специальные функции до более простых специальных функций, элементарных функций или чисел. Тем не менее, для большинства параметров MuPAD® возвращает символьное обозначение специальной функции. В таких случаях можно аппроксимировать значение специальной функции численно. Чтобы аппроксимировать специальную функцию численно, используйте команду float
или вызовите специальную функцию с аргументами с плавающей точкой.
При приближении значения специальной функции численно, помните, что результаты с плавающей точкой могут быть чрезвычайно чувствительны к числовой точности. Кроме того, результаты с плавающей точкой подвержены ошибкам округления. Следующие подходы могут помочь вам распознать и избежать неправильных результатов:
Когда возможно, используйте символьные вычисления. Переключитесь на арифметику с плавающей точкой, только если вы не можете получить символьные результаты. Смотрите Использование Символьные Вычисления, Когда Возможно.
Числовые вычисления чувствительны к переменной окружения DIGITS
, которая определяет числовую рабочую точность. Увеличьте точность числовых вычислений и проверки, если результат значительно изменяется. Смотрите Точность Увеличения.
Вычислите значение специальной функции символически, и затем аппроксимируйте результат численно. Кроме того, вычислите значение специальной функции с помощью параметров с плавающей точкой. Значительная разница в этих двух результатах указывает, что одно или оба приближения являются неправильными. Смотрите Аппроксимированные Параметры и Аппроксимируйте Результаты.
Постройте функцию. См. График Специальные Функции.
По умолчанию MuPAD выполняет вычисления в точной символьной форме. Например, стандартные математические константы имеют свои собственные символьные представительства в MuPAD. Используя эти представления, можно сохранить точное значение константы в течение вычислений. Всегда можно находить числовое приближение константы при помощи функции float
:
pi := float(PI)
Избегайте ненужных преобразований в числа с плавающей запятой. Число с плавающей запятой аппроксимирует константу; это не сама константа. Используя это приближение, можно получить неправильные результаты. Например, heaviside
специальная функция возвращает различные результаты для синуса π и синуса 10-разрядного приближения с плавающей точкой π:
heaviside(sin(PI)), heaviside(sin(pi))
Риманова гипотеза утверждает, что все нетривиальные нули Дзета-функции Римана имеют ту же действительную часть. Чтобы определить местоположение возможных нулей Дзета-функции, постройте ее абсолютное значение. Следующий график показывает первые три нетривиальных корня Дзета-функции:
plot(abs(zeta(1/2 + I*y)), y = 0..30, AxesTitles = ["y", "|zeta|"])
Используйте числовой решатель, чтобы аппроксимировать первые три нуля этой Дзета-функции:
numeric::solve(zeta(1/2 + I*y), y = 13..15), numeric::solve(zeta(1/2 + I*y), y = 20..22), numeric::solve(zeta(1/2 + I*y), y = 24..26)
Теперь, рассмотрите ту же функцию, но немного увеличьте действительную часть:. согласно Римановой гипотезе, эта функция не имеет нуля ни для какого действительного значения y
. По умолчанию MuPAD использует 10 значительных десятичных цифр для вычислений, которые включают числа с плавающей запятой. Когда вы используете решатель numeric::solve
с количеством по умолчанию цифр, решатель находит следующий (несуществующий) нуль Дзета-функции:
numeric::solve(zeta(1000000001/2000000000 + I*y), y = 14..15)
Увеличение чисел цифр показывает, что результат является неправильным. Дзета-функция не имеет нуля в 14 < y < 15
:
DIGITS:=15: numeric::solve(zeta(1000000001/2000000000 + I*y), y = 14..15)
delete DIGITS;
Функции Бесселя с половиной целочисленных индексов возвращают точные символьные выражения. Аппроксимируя эти выражения числами с плавающей запятой, можно получить очень нестабильные результаты. Например, точное символьное выражение для следующей Функции Бесселя:
B := besselJ(53/2, PI)
Используйте команду float
, чтобы аппроксимировать это выражение численно:
float(B)
Теперь, вызовите Функцию Бесселя с параметром с плавающей точкой. Значительная разница в этих двух приближениях указывает, что один или оба результата являются неправильными:
besselJ(53/2, float(PI))
Увеличьте числовую рабочую точность, чтобы получить более точные приближения:
DIGITS:= 45: float(B); besselJ(53/2, float(PI))
delete DIGITS;
Теперь вы видите, что использование параметра с плавающей точкой, чтобы вычислить Функцию Бесселя приводит к правильному результату (в рабочей точности). Приближение точного символьного выражения, для которого Функция Бесселя возвращает неправильный результат из-за числовой нестабильности.
Графический вывод функции может помочь вам распознать неправильные приближения с плавающей точкой. Например, числовое приближение следующей Функции Бесселя возвращается:
B := besselJ(53/2, PI): float(B)
Постройте функцию для значений x
вокруг 53/2. График функций показывает, что приближение с плавающей точкой является неправильным:
plot(besselJ(x, PI), x = 26..27)
Иногда, чтобы видеть, что приближение с плавающей точкой является неправильным, необходимо масштабировать конкретные части графика функций. Например, числовой решатель находит неожиданный нуль Дзета-функции:
numeric::solve(zeta(1000000001/2000000000 + I*y), y = 14..15)
Чтобы заняться расследованиями, имеет ли Дзета-функция на самом деле нуль в той точке или появляется ли результат из-за ошибки округления, постройте абсолютное значение Дзета-функции.
plot(abs(zeta(1000000001/2000000000 + I*y)), y = 0..30, AxesTitles = ["y", "|zeta|"])
Чтобы видеть больше деталей графика функций около возможного нуля, масштабируйте график. Чтобы видеть, что числовой результат является неправильным, увеличьте ту часть графика функций вне числовой рабочей точности, и затем переоцените график. Когда вы масштабируете и переоцениваете, MuPAD повторно вычисляет часть графика функций с увеличенной числовой точностью.
При изменении масштаба MuPAD автоматически не переоценивает график функций.
Чтобы получить точные результаты после изменения масштаба графика, используйте кнопку Recalculate. После изменения масштаба и переоценки графика, вы видите, что функция не имеет нуля в том интервале.