Выберите Numeric or Symbolic Arithmetic

Symbolic Math Toolbox™ работает с числами или при помощи числовой или при помощи символьной арифметики. В числовой арифметике вы представляете числа в формате с плавающей точкой с помощью или двойной точности или переменной точности. В символьной арифметике вы представляете числа в их точной форме. Эта тема выдерживает сравнение с двойной точностью, переменная точность и символьная арифметика.

Арифметика с двойной точностью

Числовые расчеты в MATLAB® используют арифметику с двойной точностью по умолчанию. Например, выполните выражения 10001/1001, π, и 2. Результаты преобразованы в значения с двойной точностью.

x = 10001/1001
y = pi
z = sqrt(2)
x =
    9.9910

y =
    3.1416

z =
    1.4142

Для получения дополнительной информации об арифметике с двойной точностью, смотрите Числа с плавающей запятой (MATLAB). Эта арифметика рекомендуется, когда вы не имеете 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 создать символьные числа. Выразите иррациональные числа π и 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

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

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

Похожие темы