exponenta event banner

Вычислительная математика в инструментарии символьной математики

В этом примере представлен обзор инструментария символьной математики, который предлагает полный набор инструментов для вычислительной и аналитической математики.

Этот пример включает

  • Переменные, выражения, функции и уравнения

  • Замещение и решение

  • Упрощение и манипулирование

  • Расчет (дифференциация, интеграция, пределы, серия)

  • Дифференциальные уравнения

  • Линейная алгебра

  • Графика

Дополнительные сведения см. в разделе Начало работы с инструментарием символьной математики. Дополнительные сведения о документировании и совместном использовании математики см. в разделе Создание сценариев в интерактивном редакторе.

Переменные, выражения, функции и уравнения

Переменные в MATLAB по умолчанию имеют двойную точность. Панель инструментов «Символьная математика» (Symbolic Math Toolbox) расширяет эту область, позволяя выражать числа в точной символьной форме с помощью sym и с переменной точностью с использованием vpa.

pi/6 + pi/4
ans = 1.3090
sym(pi/6) + sym(pi/4)
ans = 

5π12(5*sym(pi))/12

vpa(pi/6) + vpa(pi/4)
ans = 1.3089969389957471826927680763665vpa('1.3089969389957471826927680763665')

Символьные переменные могут использоваться в математических выражениях, функциях и уравнениях, включая тригонометрические, логарифмические, экспоненциальные и специальные функции. Можно создавать символьные выражения и выполнять над ними математические вычисления.

syms x y 
log(x) + exp(y)
ans = ey+log(x)exp(y) + log(x)

Также можно создавать кусочные функции.

y(x) = piecewise(x<0, -1, x>0, 1)
y(x) = 

{-1 if  x<01 if  0<xpiecewise(x < 0, -1, 0 < x, 1)

Создание и вычисление символьных функций. Найти значение f при x = -5.

syms f(x)
f(x) = x^4-2*x^3+6*x^2-2*x+10
f(x) = x4-2x3+6x2-2x+10x^4 - 2*x^3 + 6*x^2 - 2*x + 10
f(-5)
ans = 1045sym(1045)

Найти пересечение между линиями y1 и y2 с помощью solve. Приравнять строки с помощью оператора = = .

syms y1 y2
y1 = x+3; y2 = 3*x;
solve(y1 == y2)
ans = 

32sym(3/2)

Сделать assume на символьных переменных. Существует 4 решения x4 = 1, два вещественных и два комплексных. Предполагая, что x является вещественным и x > 0, существует только одно решение.

syms x
solve(x^4 == 1)
ans = 

(-11-ii)[-sym(1); sym(1); -sym(1i); sym(1i)]

assume(x,'real')
assumeAlso( x > 0)
assumptions(x)
ans = (xR0<x)[in(x, 'real'), 0 < x]
solve(x^4 == 1)
ans = 1sym(1)
assume(x,'clear')

Замещение и решение

Панель инструментов символьной математики поддерживает оценку математических функций путем замены любой части выражения с помощью subs. Можно заменить числовые значения, другие символьные переменные или выражения, векторы или матрицы. Панель инструментов «Символьная математика» (Symbolic Math Toolbox) поддерживает решение уравнений и систем уравнений с помощью solve. Он поддерживает решение многомерных уравнений, решение неравенств и решение с предположениями. Решения можно найти символически или численно с высокой точностью, используя арифметику переменной точности.

Выполните подстановки с помощью символьных переменных. Заменить x = xo-1 на x2 + 1

syms x xo
subs(x^2+1,x,xo-1)
ans = xo-12+1(xo - 1)^2 + 1

Подстановка нескольких значений. Например, вычислить cos (a) + sin (b) -e2C, подставив a = xeon2, b = xeon4, c = -1.

syms a b c
subs(cos(a) + sin(b) - exp(2*c), [a b c], [pi/2 pi/4 -1])
ans = 

22-e-2sqrt(sym(2))/2 - exp((-sym(2)))

Создание и решение уравнений. Найдите нули 9x2-1 = 0.

solve(9*x^2 - 1 == 0)
ans = 

(-1313)[-sym(1/3); sym(1/3)]

Решите общее квадратичное уравнение ax2 + bx + c = 0 и используйте subs, чтобы вычислить это решение для a = 9, b = 0, c = -1.

eqn = a*x^2 + b*x + c == 0;
sol = solve(eqn) 
sol = 

(-b+b2-4ac2a-b-b2-4ac2a)[-(b + sqrt(b^2 - 4*a*c))/(2*a); -(b - sqrt(b^2 - 4*a*c))/(2*a)]

subs(sol,[a b c],[9 0 -1])
ans = 

(-1313)[-sym(1/3); sym(1/3)]

Решайте уравнения символически или с помощью арифметики переменной точности, когда необходимы точные результаты или высокая точность. Граф f (x) = 6x7 2x6 + 3x3 − 8 очень плоский около своего корня.

syms x f(x)
assume(x>0)
f(x) = 6*x^7-2*x^6+3*x^3-8;
fplot(f)
xlim([-10 10])
ylim([-1e3 1e3])

Figure contains an axes. The axes contains an object of type functionline.

doubleSol = roots([6 -2 0 0 3 0 0 -8]) %  double-precision
doubleSol = 7×1 complex

   1.0240 + 0.0000i
   0.7652 + 0.8319i
   0.7652 - 0.8319i
  -0.8808 + 0.5043i
  -0.8808 - 0.5043i
  -0.2297 + 0.9677i
  -0.2297 - 0.9677i

symsSol = solve(f) % exact. The roots object stores the zeros for symbolic computations
symsSol = 

root(z7-z63+z32-43,z,5)root(z^7 - z^6/3 + z^3/2 - sym(4/3), z, 5)

vpaSol = vpasolve(f) % variable-precision 
vpaSol = 

(1.0240240759053702941448316563337-0.88080620051762149639205672298326+0.50434058840127584376331806592405i-0.88080620051762149639205672298326-0.50434058840127584376331806592405i-0.22974795226118163963098570610724+0.96774615576744031073999010695171i-0.22974795226118163963098570610724-0.96774615576744031073999010695171i0.7652087814927846556172932675903+0.83187331431049713218367239317121i0.7652087814927846556172932675903-0.83187331431049713218367239317121i)[vpa('1.0240240759053702941448316563337'); - vpa('0.88080620051762149639205672298326') + vpa('0.50434058840127584376331806592405i'); - vpa('0.88080620051762149639205672298326') - vpa('0.50434058840127584376331806592405i'); - vpa('0.22974795226118163963098570610724') + vpa('0.96774615576744031073999010695171i'); - vpa('0.22974795226118163963098570610724') - vpa('0.96774615576744031073999010695171i'); vpa('0.7652087814927846556172932675903') + vpa('0.83187331431049713218367239317121i'); vpa('0.7652087814927846556172932675903') - vpa('0.83187331431049713218367239317121i')]

Упрощение и манипулирование

Панель инструментов символьной математики поддерживает манипуляции с формулами и упрощение математических функций. Большинство математических выражений могут быть представлены в различных, но математически эквивалентных формах, и набор символьных математических инструментов поддерживает ряд операций, включая факторинг или расширение выражений, объединение терминов, перезапись или перестановку выражений и упрощение на основе допущений.

Выполните умножение полинома и упростите результаты, показав, что (x-1) (x + 1) (x2 + x + 1) (x2 + 1) (x2-x + 1) (x4-x2 + 1) упрощается до x12-1.

simplify((x - 1)*(x + 1)*(x^2 + x + 1)*(x^2 + 1)*(x^2 - x + 1)*(x^4 - x^2 + 1))
ans = x12-1x^12 - 1

Примените тригонометрические идентичности к упрощениям, например sin2 (x) = 1-cos (2x) 2.

combine(2*sin(x)*cos(x) + (1- cos(2*x))/2 + cos(x)^2,'sincos')
ans = sin(2x)+1sin(2*x) + 1

Множить или расширять многомерные многочлены.

syms x y
factor(y^6-x^6)
ans = (-1x-yx+yx2+xy+y2x2-xy+y2)[-sym(1), x - y, x + y, x^2 + x*y + y^2, x^2 - x*y + y^2]
f(x) = (x^3 + 7);
expand(f(y-1))
ans = y3-3y2+3y+6y^3 - 3*y^2 + 3*y + 6

Найти функциональный состав f (g (x)).

f(x) = sqrt(log(x));
g(x) = sqrt(1-x);
h = compose(g,f,x)
h(x) = 1-log(x)sqrt(1 - sqrt(log(x)))

Расчет (дифференциация, интеграция, пределы, серия и т.д.)

Инструментарий «Символьная математика» (Symbolic Math Toolbox) содержит полный набор инструментов вычисления для прикладной математики. Он может выполнять многомерную символическую интеграцию и дифференциацию. Он может генерировать, манипулировать и выполнять вычисления с сериями.

Найдите производную ddx (sin (x)).

diff(sin(x))
ans = cos(x)cos(x)

Найдите производную ddx (x2 + sin (2x4) + 1) с помощью правила цепочки.

diff(x^2+sin(2*x^4)+1,x)
ans = 2x+8x3cos(2x4)2*x + 8*x^3*cos(2*x^4)

Найдите неопределенный интеграл ∫f (x) dx для f (x) = e-x22.

int(exp(-x^2/2),x)
ans = 

2πerf(2x2)2(sqrt(sym(2))*sqrt(sym(pi))*erf((sqrt(sym(2))*x)/2))/2

Найдите определенный интеграл ∫abf (x) dx для f (x) = xlog (1 + x) от 0 до 1.

int(x*log(1+x),0,1)
ans = 

14sym(1/4)

Покажите, что sin (x) x = 1 при x = 0, вычисляя ∑ расширения рядов Тейлора (x-a) nf (n) (a) n! для f (x) = sin (x) x вокруг точки x = 0.

syms x 
T = taylor(sin(x)/x)
T = 

x4120-x26+1x^4/120 - x^2/6 + 1

subs(T,x,0)
ans = 1sym(1)

Показать, что загар (x) прерывистый при x = ¼ 2, показывая, что левый и правый пределы не равны. limx→π2+tan (x) ≠limx→π2-tan (x).

limit(tan(x),x,pi/2,'left')
ans = sym(inf)
limit(tan(x),x,pi/2,'right')
ans = --sym(inf)
limit(tan(x),x,pi/2)
ans = NaNsym(NaN)

Дифференциальные уравнения

Панель инструментов «Символьная математика» (Symbolic Math Toolbox) позволяет аналитически решать системы «Решать систему дифференциальных уравнений» (Solve a System of Differential Equations) с помощью dsolve.

Решите ODE dydx = -ay первого порядка.

syms a b y(x)
dsolve(diff(y) == -a*y)
ans = C1e-axC1*exp((-a*x))

Решите тот же ОДУ с начальным условием y (0) = b.

dsolve(diff(y)== -a*y,y(0)==b)
ans = be-axb*exp((-a*x))

Решить систему связанных ОДУ первого порядка dxdt = y и dydt = -x.

syms x(t) y(t)
z = dsolve(diff(x) == y, diff(y) == -x);
disp([z.x;z.y])

(C1cos(t)+C2sin(t)C2cos(t)-C1sin(t))[C1*cos(t) + C2*sin(t); C2*cos(t) - C1*sin(t)]

Линейная алгебра

Панель инструментов «Символьная математика» (Symbolic Math Toolbox) может работать с символьными векторами и матрицами. Он может вычислять eig символьных матриц.

Выполните умножение матрицы Ax = b, где A = [abcd] и x = [x1, x2]

syms a b c d
syms x1 x2
x = [x1; x2];
A = [a b ; c d];
b = A*x
b = 

(ax1+bx2cx1+dx2)[a*x1 + b*x2; c*x1 + d*x2]

Найти определитель А.

det(A)
ans = ad-bca*d - b*c

Найдите собственные значения A.

lambda = eig(A)
lambda = 

(a2+d2-a2-2ad+d2+4bc2a2+d2+a2-2ad+d2+4bc2)[a/2 + d/2 - sqrt(a^2 - 2*a*d + d^2 + 4*b*c)/2; a/2 + d/2 + sqrt(a^2 - 2*a*d + d^2 + 4*b*c)/2]

Графика

Панель инструментов «Символьная математика» поддерживает аналитическую печать в 2D и 3D.

fplot(tan(x))

Figure contains an axes. The axes contains 2 objects of type functionline.

Постройте график параметрической кривой x (t) = t * sin (5t) и y (t) = t * cos (5t).

syms t
x = t*sin(5*t); 
y = t*cos(5*t);
fplot(x, y)
grid on

Figure contains an axes. The axes contains an object of type parameterizedfunctionline.

Подготовьте 3D параметрическую кривую x (t) =e't|10sin (5|t |), y (t) =e't|10cos (5|t |) и z (t) =t от[-10,10] пунктирной красной линией.

syms t
xt = exp(abs(t)/10).*sin(5*abs(t));
yt = exp(abs(t)/10).*cos(5*abs(t));
zt = t;
h = fplot3(xt,yt,zt, [-10,10],'--r');

Figure contains an axes. The axes contains an object of type parameterizedfunctionline.

Постройте график 3D поверхности f (x, y) = sin (x) + cos (y).

syms x y
fsurf(sin(x) + cos(y))

Figure contains an axes. The axes contains an object of type functionsurface.

Постройте график 2D контуров одной и той же поверхности.

fcontour(sin(x) + cos(y))

Figure contains an axes. The axes contains an object of type functioncontour.