Symbolic Math Toolbox™ работает с числами или при помощи числовой или при помощи символьной арифметики. В числовой арифметике вы представляете числа в формате с плавающей точкой с помощью или двойной точности или переменной точности. В символьной арифметике вы представляете числа в их точной форме. Эта тема выдерживает сравнение с двойной точностью, переменная точность и символьная арифметика.
Числовые расчеты в MATLAB® используют арифметику с двойной точностью по умолчанию. Например, выполните выражения 10001/1001, π, и . Результаты преобразованы в значения с двойной точностью.
x = 10001/1001 y = pi z = sqrt(2)
x = 9.9910 y = 3.1416 z = 1.4142
Для получения дополнительной информации об арифметике с двойной точностью, смотрите Числа с плавающей запятой. Эта арифметика рекомендуется, когда вы не имеете Symbolic Math Toolbox или используете функции, которые не принимают символьный вход. В противном случае точная символьная арифметика и арифметика переменной точности рекомендуются. Чтобы преобразовать символьное значение в двойную точность, используйте double
функция.
Использование арифметики переменной точности vpa
рекомендуемый подход для числовых вычислений в Symbolic Math Toolbox. Можно задать количество значительных цифр при выполнении вычислений с арифметикой переменной точности.
Например, используйте vpa
оценивать часть 10001/1001. По умолчанию, vpa
оценивает входные параметры к 32 значительным цифрам. Аппроксимируйте часть 10001/1001 по крайней мере к 32 значительным цифрам.
vpa(10001/1001)
ans = 9.991008991008991008991008991009
Аппроксимируйте часть по крайней мере к 8 значительным цифрам. Измените количество значительных цифр при помощи digits
функция.
digits(8); vpa(10001/1001)
ans = 9.991009
В арифметике переменной точности можно увеличить число значительных цифр для большей точности. В качестве альтернативы можно сократить число значительных цифр для более быстрых расчетов и уменьшенного использования памяти.
Symbolic Math Toolbox обеспечивает sym
и syms
функции, чтобы выполнить точные символьные расчеты. В символьной арифметике можно выполнить расчеты включающие числа и переменные в их точной форме, такие как x/2
, 2^(1/2), или
pi
. Следующий трем примерам показывает несколько вычислений, которые выполняются в символьной арифметике.
Использование sym
создать символьные числа. Опишите иррациональные числа π и в символьной форме.
x = sym(pi) y = sqrt(sym(2))
x = pi y = 2^(1/2)
Когда вы объявляете номер, MATLAB автоматически преобразует номер в двойную точность. Например, объявите целочисленный 80435758145817515
как входной параметр sym
. Номер теряет свою точность, поскольку это больше, чем самый большой последовательный целочисленный flintmax
в двойной точности, которая является 2^53
.
Z = 80435758145817515 Zinaccurate = sym(80435758145817515)
Z = 8.0436e+16 Zinaccurate = 80435758145817520
sym
.Zaccurate = sym('80435758145817515')
Zaccurate = 80435758145817515
Можно затем выполнить вычисления с большими целыми числами с помощью символьной арифметики точно. Например, оцените сумму кубов трех больших целых чисел.
Z1 = sym('80435758145817515') Z2 = sym('12602123297335631') Z3 = sym('-80538738812075974') Zsum = Z1^3 + Z2^3 + Z3^3
Z1 = 80435758145817515 Z2 = 12602123297335631 Z3 = -80538738812075974 Zsum = 42
С символьной арифметикой можно решить математическое уравнение. Например, решите квадратное уравнение ax 2 + bx + c = 0. Использование syms
объявить переменную x и коэффициенты a, b и c в квадратном уравнении.
syms a b c x eqn = a*x^2 + b*x + c == 0;
Найдите использование решений solve
и возвратите их как символьные выражения.
sols = solve(eqn,x)
sols = -(b + (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a)
Использование subs
заменять символьными значениями коэффициенты. Установите a = 1, b = 2, и c = 3. Возвратите решения квадратного уравнения как символьные числа.
solsSym = subs(sols,[a b c],[1 2 3])
solsSym = - (8^(1/2)*1i)/2 - 1 (8^(1/2)*1i)/2 - 1
Можно затем преобразовать символьные решения формата с плавающей точкой в двойной точности или переменной точности.
digits(32); solsDouble = double(solsSym) solsVpa = vpa(solsSym)
solsDouble = -1.0000 - 1.4142i -1.0000 + 1.4142i solsVpa = - 1.0 - 1.4142135623730950488016887242097i - 1.0 + 1.4142135623730950488016887242097i
Приведенная ниже таблица выдерживает сравнение с двойной точностью, переменная точность и символьная арифметика.
Двойная точность | Переменная точность | Символьный | |
---|---|---|---|
Пример 1: Оцените sin (π) |
a = pi sin(pi) a = 3.1416 ans = 1.2246e-16 |
b = vpa(pi) sin(b) b = 3.1415926535897932384626433832795 ans = -3.2101083013100396069547145883568e-40 |
c = sym(pi) sin(c) c = pi ans = 0 |
Пример 2: оцените 1 - 3* (4/3 - 1) |
a = 4/3 1 - 3*(a - 1) a = 1.3333 ans = 2.2204e-16 |
digits(16); b = vpa(4/3) 1 - 3*(b - 1) b = 1.333333333333333 ans = 3.308722450212111e-24 |
c = sym(4)/3 1 - 3*(c - 1) c = 4/3 ans = 0 |
Используемые функции | double | vpa digits | sym |
Тип данных | double | sym | sym |
Ошибки округления | Да, ответ имеет 16 цифр точности. | Да, количество цифр зависит от используемой точности. | Нет, результаты точны. |
Скорость | Быстрее | Быстрее, в зависимости от точности используется | Самый медленный |
Использование памяти | Наименьшее | Переменная, в зависимости от точности используется | Самый большой |