exponenta event banner

Выбрать числовую или символьную арифметику

Символьные математические 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 для создания символьных чисел. Выразить иррациональные числа λ и 2 в символической форме.

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

Математические уравнения решения

С помощью символической арифметики можно решить математическое уравнение. Например, решите квадратичное уравнение 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
Используемые функцииdoublevpa
digits
sym
Тип данныхdoublesymsym
Ошибки округленияДа, ответ имеет 16 цифр точности.Да, количество цифр зависит от используемой точности.Нет, результаты точные.
СкоростьБыстрееБыстрее, в зависимости от используемой точностиСамый медленный
Использование памятиНаименьшееПеременная, в зависимости от используемой точностиСамый большой

Связанные темы