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

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

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

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

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

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

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

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

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

  • Графика

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

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

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

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

5π12

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

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

syms x y 
log(x) + exp(y)
ans = ey+журнал(x)

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

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

{-1 если  x<01 если  0<x

Создайте и выполните функции. Найдите значение 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+10
f(-5)
ans = 1045

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

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

32

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

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

(-11-ii)

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

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

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

Сделайте замены со своими символьными переменными. Замена x=xo-1 в x2+1

syms x xo
subs(x^2+1,x,xo-1)
ans = xo-12+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-2

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

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

(-1313)

Решите общее квадратное уравнение 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)

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

(-1313)

Решите уравнения символически или с арифметикой переменной точности, когда точные результаты или высокая точность будут необходимы. График 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])

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

   0.9471 + 0.0000i
  -0.2861 + 0.8426i
  -0.2861 - 0.8426i

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

корень(z7-z63+z32-43,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)

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

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-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)+1

Фактор или расширяет многомерные полиномы.

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

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

f(x) = sqrt(log(x));
g(x) = sqrt(1-x);
h = compose(g,f,x)
h(x) = 1-журнал(x)

Исчисление (Дифференцирование, Интегрирование, Пределы, Ряд, и т.д.)

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

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

diff(sin(x))
ans = потому что(x)

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

diff(x^2+sin(2*x^4)+1,x)
ans = 2x+8x3потому что(2x4)

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

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

2πerf(2x2)2

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

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

14

Покажите это 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+1

subs(T,x,0)
ans = 1

Покажите это tan(x) прерывисто в x=π2 путем показа, что левые и правые пределы не равны. lim xπ2+tan(x)lim xπ2-tan(x).

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

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

Symbolic Math Toolbox может аналитически решить системы обыкновенных дифференциальных уравнений с помощью dsolve.

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

syms a b y(x)
dsolve(diff(y) == -a*y)
ans = C4e-ax

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

dsolve(diff(y)== -a*y,y(0)==b)
ans = be-ax

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

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

(C7потому что(t)+C6sin(t)C6потому что(t)-C7sin(t))

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

Symbolic Math Toolbox может работать с символьными векторами и матрицами. Это может вычислить собственные значения и собственные вектора символьных матриц.

Выполните умножение матриц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.

det(A)
ans = ad-bc

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

lambda = eig(A)
lambda = 

(a2+d2-a2-2ad+d2+4bc2a2+d2+a2-2ad+d2+4bc2)

Графика

Symbolic Math Toolbox поддерживает аналитический графический вывод в 2D и 3D.

fplot(tan(x))

Постройте параметрическую кривую 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

Постройте 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');

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

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

Постройте 2D контуры той же поверхности.

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

Для просмотра документации необходимо авторизоваться на сайте