Символьные математические Toolbox™ работают с числами с помощью числовой или символьной арифметики. В числовой арифметике числа представлены в формате с плавающей запятой с помощью двойной или переменной точности. В символьной арифметике вы представляете числа в их точном виде. В этом разделе сравниваются двойная точность, переменная точность и символьная арифметика.
Числовые вычисления в MATLAB ® по умолчанию используют арифметику двойной точности. Например, вычислите выражения 10001/1001, δ и 2. Результаты преобразуются в значения двойной точности.
x = 10001/1001 y = pi z = sqrt(2)
x =
9.9910
y =
3.1416
z =
1.4142Дополнительные сведения об арифметике с двойной точностью см. в разделе Числа с плавающей запятой. Эту арифметику рекомендуется использовать, если у вас нет инструментария символьной математики или вы используете функции, которые не принимают символьный ввод. В противном случае рекомендуется использовать точную символьную арифметику и арифметику переменной точности. Чтобы преобразовать символьное значение в двойную точность, используйте double функция.
Арифметика с переменной точностью с использованием vpa - рекомендуемый подход для числовых вычислений в инструментарии символьной математики. При выполнении вычислений с арифметикой переменной точности можно указать количество значащих цифр.
Например, использовать vpa для оценки 10001/1001 фракции. По умолчанию vpa оценивает входные данные до 32 значащих цифр. Аппроксимировать дробь, 10001/1001 по крайней мере до 32 значащих цифр.
vpa(10001/1001)
ans = 9.991008991008991008991008991009
Аппроксимировать дробь по крайней мере до 8 значащих цифр. Изменение количества значащих цифр с помощью digits функция.
digits(8); vpa(10001/1001)
ans = 9.991009
В арифметике с переменной точностью можно увеличить число значащих цифр для большей точности. Кроме того, можно уменьшить количество значащих цифр для ускорения вычислений и уменьшения использования памяти.
Панель инструментов символьной математики обеспечивает 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^3Z1 = 80435758145817515 Z2 = 12602123297335631 Z3 = -80538738812075974 Zsum = 42
С помощью символической арифметики можно решить математическое уравнение. Например, решите квадратичное уравнение ax2 + 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: Оценка греха (δ) |
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 | vpadigits | sym |
| Тип данных | double | sym | sym |
| Ошибки округления | Да, ответ имеет 16 цифр точности. | Да, количество цифр зависит от используемой точности. | Нет, результаты точные. |
| Скорость | Быстрее | Быстрее, в зависимости от используемой точности | Самый медленный |
| Использование памяти | Наименьшее | Переменная, в зависимости от используемой точности | Самый большой |