СИМВОЛЬНЫЕ ВЫЧИСЛЕНИЯ
Екатеринбург 2006
Символьныевычисления
1. Базовыеоперации
Символьныепеременные и функции являются объектами класса sym object, в отличие отчисловых переменных, которые содержатся в массивах double array.
Функция sym– формирует символьнуюпеременную или объект
Синтаксис
S=sym(A)
S=sym(A, flag)
x=sym(‘x’)
x=sym(‘x’, real)
x=sym (‘x’, unreal)
Описание
Ø ФункцияS=sym(A) создает объект класса sym для входного аргументаА.
Если А –строка символов, то результатом будет последовательность символов, если А –строка цифр, то результатом будет число, описываемое символьной переменной S. Если А – числовоймассив, то результатом будет символьный эквивалент этого объекта.
Ø Функцияx=sym(‘x’) создает символьнуюпеременную x.
Ø Функцияx=sym (‘x’, real) создает символьнуюпеременную x,которая во всех операциях будет рассматриваться как переменная, котораяпринимает только действительные значения. Это будет справедливо до тех пор,пока ей не будет присвоено, например, значение комплексного числа.
Ø Функцияx=sym (‘x’, unreal) создает символьнуюпеременную x,которая является формальной переменной без дополнительных ограничений.
Ø ФункцияS=sym (A, flag) преобразовываетчисловой массив А в символьную форму, используя второй аргумент flag для указания типасимвольной переменной S
Ø Функцияsym позволяет преобразовывать значения числовых переменных в символические,например:
>>A=[1.3 -2.1 4.9; 6.9 3.78.5];
Соответствующийсимвольный массив:
>>B=sym(A)
B=
[13/10,-21/10, 49/10]
[69/10,37/10, 17/2]
При переходеот числовых к символическим выражениям используется запись чисел в видерациональной дроби. В виде рациональной дроби представляются и промежуточные, иокончательные выражения. Это означает, что при использовании рациональныхдробей при выполнении символических вычислений всегда получается точныйрезультат, не содержащий погрешность округления, например:
>>format long
>>1.0e+10+1.0e‑10
ans=
1.000000000000000e+010
>>large=sym (1.0e+10);
>>small=sym (1.0e‑10);
>>s=large+small
s =
100000000000000000001/10000000000
Функция vpa– преобразует числовыезначения
Синтаксис
>> cn=vpa(c)
>> cn=vpa (c, n)
Вычисления срациональными дробями позволяют получить значения символического выражения слюбой степенью точности, т.е. найти сколь угодно много значащих цифррезультата. По умолчанию удерживается 32 значащие цифры. Второй параметр n указывает желаемое числоудерживаемых цифр (Второй аргумент задает удерживаемое число значащих цифртолько для данного вызова vpa; для глобальной установки служит функция digits, во входном аргументекоторой указывается требуемое количество цифр digits(n)).
Примеры
>> c=sym ('sqrt(2)')
c=
sqrt(2)
>>cn=vpa(c)
cn =
1.4142135623730950488016887242097
Функция syms – формирует группусимвольных объектов
Синтаксис
syms arg1 arg2…
При работе скомплексными числами следует указать, что определяемые переменные являются, вобщем случае, комплексными.
symsarg1 arg2 …real
symsarg1 arg2 …unreal
Ø Функцияsyms arg1 arg2 …это короткая записьпоследовательности функций sym.
Ø Конструированиесимволических функций от переменных класса sym object производится сиспользованием обычных арифметических операций и обозначений для встроенныхматематических функций, например:
§ >> f=(sin(x)+a)^2*(cos(x)+b)^2/sqrt (abs(a+b))
Ø Записьформулы для выражения в одну строку не всегда удобна, более естественный видвыражения выводит в командное окно функция pretty.
Функция pretty – выводит символьноевыражение на экран в привычном для пользователя виде.
Синтаксис
pretty(S)
pretty(S, n)
Функция pretty(S) выводит на экрансимвольное выражение S в формате, близком к печати математических выражений,используя при этом длину строки 79 символов.
Примеры
>>pretty(f)
(sin(x)+ a)2 (cos(x) + b)2
|a + b|1/2
Определеннаяфункция fтакже является символической переменной типа sym object, в чем несложноубедиться при помощи команды whos
Символическиепеременные могут являться элементами матриц и векторов. Элементы строк матрицпри вводе отделяются пробелами или запятыми, а столбцов – точкой с запятой, также как и для обычных матриц. В результате образуются символические матрицы ивекторы, к которым применимы матричные и поэлементные операции и встроенныефункции.
Примеры
>>syms a b c d e f g h
>>A=[ab; c d]
A=
[a,b]
[c,d]
>>B=[ef; g h]
A=
[e,f]
[g,h]
>>C=A+B
C=
[a+e,b+f]
[c+g,d+h]
2. Упрощениеи преобразование выражений
Сложныеалгебраические и тригонометрические выражения могут быть приведены кэквивалентным путем упрощения. Операции с полиномами реализуют четыре функции: collect, expand, horner, factor.
Функция collect – вычисляет коэффициентыпри степенях независимой переменной
Синтаксис
R=collect(S)
R=collect(S, v)
S – массив символьныхполиномов.
Ø Функциясобирает однородные члены по степеням переменной x.
Ø ФункцияR=collect (S, v) выполняет ту жефункцию, но только по отношению к независимой переменной, указанной в качествевторого аргумента (в данном случае v).
Примеры
>> syms x y
>> R1=collect((exp(x)+x)*(x+2))% здесь слагаемыегруппируются по степеням x
R1=
x^2+(exp(x)+2)*x+2*exp(x)
>> R2=collect((x+y)*(x^2+y^2+1), y)% здесь слагаемыегруппируются по степеням y
R2 =
y^3+x*y^2+(x^2+1)*y+x*(x^2+1)
>> R3=collect([(x+1)*(y+1), x+y])% здесь указаны сразудва многочлена, которые требуется сгруппировать по степеням x
R3 =
[(y+1)*x+y+1,x+y]
Функция expand – позволяет раскрытьсимвольное выражение
Синтаксис
R=expand(S)
Функция R=expand(S) позволяет раскрыть каждыйэлемент символьного выражения S. Эта операция применяется к полиномам, тригонометрическим,экспоненциальным и логарифмическим функциям.
Примеры
>>expand((x‑2)*(x‑4))
ans=
x^2–6*x+8
>>expand (exp((x+y)^2))
ans=
exp(x^2)*exp (x*y)^2*exp (y^2)
>>expand([sin (2*x), cos (2*x)])
ans=
[2*sin(x)*cos(x),2*cos(x)^2–1]
symst;
s=expand([sin(2*t) cos (2*t)])
s=
[2*sin(t)*cos(t),2*cos(t)^2–1]
Функция factor– позволяет разложитьсимвольное выражение на простые множители
Синтаксис
R=factor(N)
R=factor(S)
Ø ФункцияR=factor(N), где N – положительное целоечисло или целочисленный массив, возвращает каноническое разложение числа илиэлементов массива в виде произведения простых множителей.
Ø Функцияfactor(S), где S – матрица полиномов,возвращает разложение каждого элемента массива на простые множители.
Примеры
>>syms a b;
>>factor([a*a-b*b,a^3+b^3])
ans=
[(a-b)*(a+b),(a+b)*(a^2‑a*b+b^2)]
>>factor(sym('123'))
ans =
(3)*(41)
Функция simple – позволяет упроститьсимвольное выражение
Синтаксис
Simple(S)
R=simple(S)
[R,How]=simple(S)
Ø Функцияsimple(S) выполняет разныеалгебраические преобразования над символьным выражением S, выводит на экранварианты укороченных выражений и возвращает в конце концов самое короткое.
Ø ФункцияR=simple(S) выполняет те же самые операции, но не выводит на экранпромежуточных результатов.
Функция [R, How]=simple(S) в дополнение косновному результату выводит в качестве второго аргумента строку How, которая указываетвыполненное преобразование.
Примеры
>>[R, How]=simple (cos(x)^2+sin(x)^2)
R=1
How=combine
>>[R, How]=simple (2*cos(x)^2‑sin(x)^2)
R=3*cos(x)^2–1
How=simplify
>>[R, How]=simple (cos(x)^2+(-sin(x)^2)^(1/2))
R=cos(x)^2+i*sin(x)
How=radsimp
>>[R, How]=simple (cos(x)+i*sin(x))
R=exp(i*x)
How=convert(exp)
>>[R, How]=simple((x+1)*x*(x‑1))
R=x^3‑x
How=collect(x)
>>[R, How]=simple (x^3+3*x^2+3*x+1)
R=(x+1)^3
How=factor
>>[R, How]=simple (cos(3*acos(x)))
R=4*x^3–3*x
How=expand
Функция numden – выполняет приведениесимвольных полиномов к рациональной форме
Синтаксис
[N,D]=numden(A)
Ø Функция[N, D]=numden(A) преобразовывает каждыйэлемент символьного массива A к рациональной форме в виде отношения двух неприводимыхполиномов с целочисленными коэффициентами. N, D – соответственносимвольные массивы числителей и знаменателей элементов массива.
Примеры.
>>symsx y a b
>>[N, D]=numden (x/y+y/x)
N=x^2+y^2
D=x*y
>>A=[a,1/b]
>>[N, D]=numden(A)
N=[a, 1]]
D=[1, b]
Функция subs – выполняет подстановкузначений символьных переменных
Синтаксис
subs(S)
subs(S, NEW)
subs(S, OLD, NEW)
subs(S, OLD, NEW, 0)
Ø Функцияsubs(S) заменяет свободныесимвольные переменные их числовыми значениями, которые берутся либо извызываемой функции, либо из рабочей области системы MATLAB.
Ø Функцияsubs (S, OLD, NEW) заменяет свободныесимвольные переменные OLD новыми символьными переменными или числовымизначениями из списка NEW. Если OLD и NEW – массивы ячеек одинакового размера, то каждыйэлемент массива OLD заменяется соответствующим элементом массива NEW. Если символьноевыражение Sи список OLD – скаляры, а NEW – числовой массив или массив ячеек, то скалярырасширяются до размера массива. Если подстановка subs (S, OLD, NEW) не изменяет символьноговыражения S,то выполняется подстановка subs (S, NEW, OLD). Чтобы предотвратить попытку обратной подстановки, следуетиспользовать обращение subs (S, OLD, NEW, 0)
Примеры.
>>a=980
>>c1=3
>>symst
>>y=dsolve(‘Dy=-a*y’);
>>subs(y)
ans=3*exp(-980*t)
Однокомпонентнаяподстановка
>>syms a b
>>subs (a+b, a, 4)
ans=4+b
Многокомпонентнаяподстановка:
>>subs (cos(a)+sin(b), [a, b], [sym(‘alpha’), pi/2)
ans=cos(alpha)+sin(pi/2)
Подстановкаматрицы вместо скаляра:
>>subs (exp(a*t), ’a’, – magic(2))
ans=
[exp(-t),exp (-3*t)]
[exp(-4*t), exp (-2*t)
3. Математическийанализ
Функция limit – вычисляет пределфункции одной переменной
Синтаксис
limit(F, x, a)
limit(F, a)
limit(F)
limit(F, x, a, ’right’)
limit(F, x, a, ’left’)
Описание
Ø Функцияlimit (F, x, a) определяет пределфункции F(x) при x->a.
Ø Функцияlimit (F, a) автоматическиопределяет независимую переменную, например t, с помощью функции findsym(F) и затем вычисляетсяпредел функции F(t)при t->a.
Ø Функцияlimit(F) предполагает поумолчанию в качестве предельной точки a=0.
Ø Функцииlimit (F, x, a, ’right’) и limit (F, x, a, ’left’) вычисляют соответственноправосторонний и левосторонний пределы.
Примеры.
>>symsx a t h
>>limit(sin(x)/x)
ans=1
>>limit((x‑2)/(x^2–4),2)
ans=1/4
>>limit((1+2*t/x)^(3*x),x, inf)
ans=exp(6*t)
>>limit(1/x, x, 0,’right’)
ans=inf
>>limit(1/x, x, 0,’left’)
ans=-inf
>>limit((sin(x+h) – sin(x))/h, h, 0)
ans=cos(x)
v=[(1+a/x)^x,exp(-x)]
>>limit(v, x, inf, ’left’)
ans=[exp(a), 0]
Функция diff – выполняетдифференцирование функции одной переменной
Синтаксис
diff(S)
diff(S, ’v’)
diff(S, sym(‘v’))
diff(S, n)
diff(S, ’v’, n)
diff(S, n, ’v’)
Ø Функцияdiff(S) автоматическиопределяет независимую переменную с помощью функции findsym(S) и затем выполняетсоответствующее дифференцирование.
Ø Функцияdiff (S, ’v’) и diff (S, sym(‘v’)) дифференцируетсимвольное выражение S по переменной, указанной в ‘v’.
Ø Функцииdiff (S, n), diff (S, ’v’, n), diff (S, n, ’v’) дифференцируют n раз символьное выражениеS по переменной, указаннойв ‘v’.
Ø Если S матрица, то операциядифференцирования применяется к каждому элементу матрицы.
Примеры
>>symsx t
>>diff(sin(x^2))
ans=2*cos(x^2)*x
>>diff(t^6,6)
ans=720
Функция int – выполняетинтегрирование функции одной переменной
Синтаксис
R=int(S)
R=int(S, v)
R=int(S, a, b)
R=int(S, v, a, b)
Ø Функцияint(S) возвращает символьноезначение неопределенного интеграла от символьного выражения или массивасимвольных выражений S по переменной, которая автоматически определяется функцией findsym. Если S – скаляр или матрица, товычисляется интеграл по переменной ‘x’.
Ø Функцияint (S, v) возвращаетнеопределенный интеграл от S по переменной v.
Ø Функцияint (S, a, b) возвращает определенныйинтеграл от Sс пределами интегрирования от a до b, причем пределы интегрирования могут быть как символьными,так и числовыми.
Ø Функцияint (S, v, a, b) возвращает определенныйинтеграл от Sпо переменной vс пределами интегрирования от a до b.
Примеры
>> x=sym('x');
>> int (x^2, x)
ans=
1/3*x^3
>>int (sin(x)^3, x)
ans=
-1/3*sin(x)^2*cos(x) –2/3*cos(x)
>>int (log(2*x), x)
ans=
log(2*x)*x-x
>>int((x^2–2)/(x^3–1), x, 1,2)
ans=
– inf
>>int((x^2–2)/(x^3–1), x, 2,5)
ans=
-2/3*log(2)+2/3*log(31)+2/3*3^(1/2)*atan(11/3*3^(1/2)) – 2/3*log(7) – 2/3*3^(1/2)*atan (5/3*3^(1/2))
>>int([x^3 sin(x) exp(x)], x)
ans=
[1/4*x^4,– cos(x), exp(x)]
Функция taylor – служит для полученияразложений аналитических функций в ряд Тейлора (и Маклорена)
Синтаксис
taylor(f)
taylor (f, n)
taylor(f, a)
taylor(f, x)
Ø Функцияtaylor(f) возвращает шесть первыхчленов ряда Маклорена (ряд Тейлора в точке x=0). В любом разложенииможно задавать число членов ряда n, точку a, относительно которой ищется разложение, и переменную x, по которой ищетсяразложение, например taylor (f, n, x, a).
Ø Функцияtaylor (f, a) возвращает ряд Тейлорав окрестности точки a.
Ø Функцияtaylor (f, x) возвращает ряд Тейлорадля переменной x, определяемой функцией findsym.
Примеры
>> x=sym('x');
>> F=sin(x);
>>taylor(F)
ans=
x‑1/6*x^3+1/120*x^5
>>taylor (F, 10)
ans=
x‑1/6*x^3+1/120*x^5–1/5040*x^7+1/362880*x^9
>>taylor (exp(x), 1)
ans=
>>taylor (cos(x), – pi/2,6)
ans=
x+1/2*pi‑1/6*(x+1/2*pi)^3+1/120*(x+1/2*pi)^5
Функция yacobian – вычисляет матрицуЯкоби
Синтаксис
yacobian(f, v)
Ø Функцияyacobian (f, v) возвращает матрицуЯкоби для скаляра или вектора f по вектору переменных v. Каждый (i, j) – й элементматрицы представляет собой частную производную ∂fi/∂vj.
Примеры
>> v=[x, y, z];
>> J=jacobian (F, v)
J =
[2*x, 0, 0]
[1, 1/z, – y/z^2]
[z, 0, x]
>> v=[x; y];
>> J=jacobian (F, v)
J =
[2*x, 0]
[1, 1/z]
[z, 0]
>>J=jacobian (x*y, v)
J =
[y, x]
Функция symsum– вычисляет аналитическоезначение суммы ряда
Синтаксис
symsum(S)
symsum(S, v)
symsum(S, a, b)
Ø Функцияsymsum(S) возвращает символьноезначение суммы бесконечного ряда по переменной, найденной автоматически спомощью функции findsym.
Ø Функцияsymsum (S, v) возвращает суммубесконечного ряда по переменной v.
Ø Функцияsymsum (S, a, b) возвращает конечнуюсумму ряда в пределах номеров слагаемых от a до b.
Примеры
>> x=sym('x');
>> symsum (x^2)
ans=
1/3*x^3–1/2*x^2+1/6*x
>>symsum (1/x^4)
ans=
-1/6*Psi(3, x)
>>symsum (1/x^4,1,5)
ans=
14001361/12960000
>>symsum([x, x^2, x^3], 1,5)
ans =
[15, 55, 225]
Функция solve – решает системыалгебраических уравнений и одиночных уравнений
Синтаксис
solve(expr1, expr2,…, exprN, var1, var2,…, varN)
solve(expr1, expr2,…, exprN)
Ø Функцияsolve (expr1, expr2,…, exprN, var1, var2,…, varN) возвращает значенияпеременных varI, при которых соблюдаются равенства, заданные выражениями exprI. Если в выражениях неиспользуются знаки равенства, то полагается exprI=0.
Ø Функцияsolve (expr1, expr2,…, exprN) аналогичнапредшествующей функции, но переменные, по которым ищется решение, определяютсяфункцией fimdsym.
Примеры
>>syms x y;
>>solve (x^3–1, x)
ans=
[1]
[-1/2+1/2*i*3^(1/2)]
[-1/2–1/2*i*3^(1/2)]
>>solve (x^2‑x‑9, x)
ans=
[1/2+1/2*37^(1/2)]
[1/2–1/2*37^(1/2)]
>>syms a b c;
>>solve (a*x^2+b*x+c)
ans=
[1/2/a*(-b+(b^2–4*a*c)^(1/2))]
[1/2/a*(-b– (b^2–4*a*c)^(1/2))]
>>S=solve ('x+y=3', 'x*y^2=4', x, y)
S=
x:[3x1 sym]
y:[3x1 sym]
>>S.x
ans=
[4]
[1]
[1]
>>S.y
ans=
[-1]
[2]
[2]
>>solve ('sin(x)=0.5', x)
ans =
52359877559829887307710723054658
Функция dsolve – решаетдифференциальные уравнения в форме Коши
Синтаксис
dsolve (‘eqn1’, ‘eqn2’,…)
Ø Функцияdsolve (‘eqn1’, ‘eqn2’,…) возвращаетаналитическое решение системы дифференциальных уравнений с начальнымиусловиями. Они задаются равенствами eqnI.
Примеры
>>dsolve ('D2x=-2*x')
ans=
C1*sin(2^(1/2)*t)+C2*cos (2^(1/2)*t)
>>dsolve ('D2y=-2*x+y', 'y(0)=1', 'x')
ans=
2*x+C1*sinh(x)+cosh(x)
4. Графическиевозможности
Функция ezplot – строит графикисимвольно заданной функций
Синтаксис
ezplot(f)
ezplot (f, xmin, xmax)
ezplot (f, [xmin xmax])
ezplot (f, [xmin xmax], fig)
Ø Функцияezplot(f) строит график символьнозаданной функции f(x)независимой переменной ‘x’ в интервале [-2*pi 2*pi].
Ø Функцииezplot (f, xmin, xmax) и ezplot (f, [xmin xmax]) позволяют задатьдиапазон изменения независимой переменной x от xmin до xmax.
Ø Функцияezplot (f, [xmin xmax], fig) обеспечиваетспецификацию с помощью параметра fig.
Примеры
>>ezplot ('tan(x)', 0,20)
>>grid on
/>
Рис. 1 Графические возможности функцииezplot
Функция ezcontour– строит контурныеграфики функций вида f (x, y)
Синтаксис
ezcontour(f)
ezcontour(f, domain)
ezcontour(…,n)
Ø Функцияezcontour(f) строит контурный графикс настройкой по умолчанию.
Ø Функцияezcontour (f, domain) строит контурный графикс заданными параметром domain пределами изменения x и y.
Ø Функцияezcontour(…, n) обеспечивает ранееуказанные построения при явном задании числа линий n.
Примеры
>>syms x y
>>ezcontour (sin(x*y), [-3,3], 30)
/>
Рис. 2 Графические возможности функцииezcontour
>> syms x y
>>ezcontour (sin(x)*sin(y), [-3,3], 50)
/>
Рис. 3 Графические возможности функцииezcontour
Функция ezplot3 – строит трехмерныеграфики параметрически заданных функций
ezplot3(x, y, z)
ezplot3(x, y, z, [tmin tmax])
ezplot3(…, ‘animate’)
Ø Функцияezplot3 (x, y, z) строит трехмерныйграфик функции, заданной параметрически уравнениями x(t), y(t), z(t) при настроеке поумолчанию.
Ø Функцияezplot3 (x, y, z, [tmin tmax]) строит трехмерныйграфик функции, заданной параметрически уравнениями x(t), y(t), z(t) при измененияхаргумента tот tmin до tmaxю
Ø Функцияezplot3 (…, ‘animate’) аналогичнапредшествующим функциям, но обеспечивает анимацию графика.
Примеры
>>syms t;
>>ezplot3 (cos(t), sin(t), t, [0 20], 'animate')
/>
Рис. 4 Графические возможности функцииezplot3
Функция ezsurf – строит графикиповерхностей, задаваемых функциями двух переменных f (x, y)
Синтаксис
ezsurf(f)
ezsurf (f, domain)
ezsurf (x, y, z)
ezsurf (x, y, z, [smin, smax, tmin, tmax])
ezsurf(x, y, z, [min max])
ezsurf(…,n)
ezsurf(…,‘circ’)
Ø Функцияezsurf(f) строит поверхность f (x, y) с параметрами x и y, меняющимися поумолчанию от -2π до 2π.
Ø Функцияezsurf (f, domain) строит поверхность f (x, y) с пределами изменения x и y, заданными параметром domain.
Ø Функцияezsurf (x, y, z) строит поверхность,заданной параметрически зависимостями x (s, t), y (s, t), z (s, t) при s и t, меняющихся в интервале -2π до 2π.
Ø Функцияezsurf (x, y, z, [smin, smax, tmin, tmax]) строит поверхность,заданной параметрически зависимостями x (s, t), y (s, t), z (s, t) при s и t, меняющихся в заданном интервале.
Ø Функцияezsurf (x, y, z, [min max]) строит поверхность,заданной параметрически зависимостями x (s, t), y (s, t), z (s, t) при s и t, меняющихся в одинаковом интервале от min до max.
Ø Функцияezsurf(…, n) аналогична описаннымвыше командам, но с задаваемым числом линий сетки n.
Функция ezsurf(…, ‘circ’) аналогична описаннымвыше командам, но вписывает поверхность в окружность