Вычислительная математика в Symbolic Math Toolbox

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

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

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

  • Подстановка и решение

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

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

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

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

  • Графика

Для получения дополнительной информации смотрите Запуск с Symbolic Math Toolbox. Для получения дополнительной информации о документировании и совместном использовании вашей математики смотрите Создать Live скрипты в Live Editor.

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

Переменные в 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 если  x<01 если  0<xкусочно (x < 0, -1, 0 < x, 1)

Создайте и вычислите Create Symbolic Functions. Найдите значение 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)[-сим (1); sym (1); -sym (1i); sym (1i)]

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

Подстановка и решение

Symbolic Math Toolbox поддерживает оценку математических функций, заменяя любую часть выражения, используя 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=π2,b=π4,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)[-сим (1/3); sym (1/3)]

Решить общее квадратичное уравнение ax2+bx+c=0 и используйте нижние индексы, чтобы оценить это решение для 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)[-сим (1/3); sym (1/3)]

Решите уравнения символически или с арифметикой переменной точности, когда необходимы точные результаты или высокая точность. Область графика f(x)=6x72x6+3x38 очень плоский около его корня.

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)корень (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,765208781492784656172932675903') + vpa ('0,83187331431049713218367239317121i'); vpa ('0.7652087814927846556172932675903') - vpa ('0.83187331431049713218367239317121i')]

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

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

Выполните умножение полиномов и упростите результаты, покажите, что (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)[-сым (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 (журнал (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)

Показать, что tan(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 может аналитически решить системы Решения Системы Дифференциальных Уравнений, используя dsolve.

Решение ОДУ первого порядка 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

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

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]

Графика

Symbolic Math Toolbox поддерживает аналитическое графическое изображение в 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.