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

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

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

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

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

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

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

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

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

  • Графика

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

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

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

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

5π12(5*sym (пи))/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) + журнал (x)

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

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

{-1 если  x<01 если  0<xкусочный (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)[в (x, 'действительный'), 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)[-sym (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)[-sym (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])

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.7652087814927846556172932675903') + 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)[-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 (журнал (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 (пи)) *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]

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

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]

Графика

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