horner函数实现对符号表达式进行嵌套
>> syms x y
>> horner(x^3 - 6*x^2 + 11*x - 6)
ans =
x*(x*(x - 6) + 11) - 6
>> horner([x^2 + x;y^3 - 2*y])
ans =
x*(x + 1)
y*(y^2 - 2)
factor函数用于实现符号表达式的分解
>> syms x y
>> factor(x^3 - y^3)
ans =
(x - y)*(x^2 + x*y + y^2)
>> factor(sym('12345678901234567890'))
ans =
2*3^2*5*101*3541*3607*3803*27961
根据一定的规则对符号表达式进行化简,函数为simplify
>> % 对符号表达式进行化简
>> syms x a b c
>> simplify(sin(x)^2 + cos(x)^2)
ans =
1
>> % 对符号矩阵进行化简
>> simplify([(x^2 + 5*x + 6)/(x + 2),sin(x)*sin(2*x) + cos(x) * cos(2*x);(exp(-x*i)*i)/2 - (exp(x*i)*i)/2,sqrt(16)])
ans =
[ x + 3, cos(x)]
[ sin(x), 4]
>> % 使用IgnoreAnalyticConstraints规则对符号表达式进行化简
>> s = (log(x^2 + 2*x + 1) - log(x + 1)) * sqrt(x^2);
>> simplify(s)
ans =
-(log(x + 1) - log((x + 1)^2))*(x^2)^(1/2)
当表达式结构复杂、变量较多的时候,引入一些新的变量进行代换,变化结果,从而达到解决问题的目的,这种方法称为变量代换法。matlab提供了subs函数和subexpr函数进行变量代换或者叫做符号表达式的替换。
subs函数利用符号变量或符号表达式替换目标符号表达式中的符号变量
subexpr函数利用符号变量替换目标符号表达式的某个子符号表达式
subs函数:
subs函数可以用指定符合替换符号表达式中的某一特定符号
>> syms a b
>> subs(a + b, a, 4)
ans =
b + 4
>> syms a b;
>> subs(cos(a) + sin(b),{a, b}, {sym('alpha'), 2})
ans =
sin(2) + cos(alpha)
subexpr函数:
subexpr函数将表达式中重复出现的字符串用变量代换。
>> syms a b c d x
>> solutions = solve(a * x ^ 3 + b * x ^ 2 + c * x + d == 0,...
x,'MaxDegree',3);
>> [r,sigma] = subexpr(solutions)
r =
sigma^(1/3) - b/(3*a) - (- b^2/(9*a^2) + c/(3*a))/sigma^(1/3)
(- b^2/(9*a^2) + c/(3*a))/(2*sigma^(1/3)) - sigma^(1/3)/2 + (3^(1/2)*(sigma^(1/3) + (- b^2/(9*a^2) + c/(3*a))/sigma^(1/3))*i)/2 - b/(3*a)
(- b^2/(9*a^2) + c/(3*a))/(2*sigma^(1/3)) - sigma^(1/3)/2 - (3^(1/2)*(sigma^(1/3) + (- b^2/(9*a^2) + c/(3*a))/sigma^(1/3))*i)/2 - b/(3*a)
sigma =
((d/(2*a) + b^3/(27*a^3) - (b*c)/(6*a^2))^2 + (- b^2/(9*a^2) + c/(3*a))^3)^(1/2) - b^3/(27*a^3) - d/(2*a) + (b*c)/(6*a^2)
matlab提供了把两个符号函数符合成一个符号函数的功能函数,同时也提供了对符号函数表达式的逆功能函数
compose函数:函数表达式的符合运算
>> syms x y z t u
>> f = 1/(1 + x^2);
>> g = sin(y);
>> h = x^t;
>> p = exp(-y/u);
>> a = compose(f,g)
a =
1/(sin(y)^2 + 1)
>> c = compose(h,g,x,z)
c =
sin(z)^t
finverse函数:实现符号表达式的反函数操作
>> syms t x
>> f1 = finverse(log(t))
f1 =
exp(t)
>> f2 = finverse(cos(2 * t) + 1)
f2 =
acos(t - 1)/2
符号表达式的极限:
求微分的基本思想是当自变量趋近某个值时,求函数值的变化。“无穷逼近”是为基本的一个基本思想。
matlab中用limit函数求表达式的极限
>> syms x;
>> f1 = sym((cos(x) + sin(x) - x)/x)
f1 =
(cos(x) - x + sin(x))/x
>> limit(f1,x,inf)
ans =
-1
>> limit(f1,x,0)
ans =
NaN
符号表达式的微分:
diff可以完成一元或多元函数的任意阶数的微分,对于自变量的个数多余一个的符号矩阵,微分为Jocabian矩阵,采用jacobian函数实现微分
(1) diff函数
>> syms x
>> f = exp(-2*x) * cos(2*x^0.5)
f =
exp(-2*x)*cos(2*x^(1/2))
>> g = diff(f,4)
g =
16*exp(-2*x)*cos(2*x^(1/2)) - (24*exp(-2*x)*cos(2*x^(1/2)))/x - (11*exp(-2*x)*cos(2*x^(1/2)))/x^2 - (15*exp(-2*x)*cos(2*x^(1/2)))/(4*x^3) + (32*exp(-2*x)*sin(2*x^(1/2)))/x^(1/2) + (4*exp(-2*x)*sin(2*x^(1/2)))/x^(3/2) + (3*exp(-2*x)*sin(2*x^(1/2)))/x^(5/2) + (15*exp(-2*x)*sin(2*x^(1/2)))/(8*x^(7/2))
>> pretty(g)
exp(-2 x) #2 24 exp(-2 x) #2 11
exp(-2 x) #2 16 - --------------- - ---------------
x 2
x
exp(-2 x) #2 15 exp(-2 x) #1 32 exp(-2 x) #1 4
- --------------- + --------------- + --------------
3 sqrt(x) 3/2
4 x x
exp(-2 x) #1 3 exp(-2 x) #1 15
+ -------------- + ---------------
5/2 7/2
x 8 x
where
#1 == sin(2 sqrt(x))
#2 == cos(2 sqrt(x))
(2) jacobian函数
matlab中,提供了jacobian函数用于求多元函数的导数。
>> syms x y z
>> f = [x*y*z; y; x+z];
>> v = [x, y, z];
>> R = jacobian(f,v)
R =
[ y*z, x*z, x*y]
[ 0, 1, 0]
[ 1, 0, 1]
>> b = jacobian(x+z,v)
b =
[ 1, 0, 1]
符号表达式的积分:
int函数求符号表达式的积分
>> syms a x t z
>> int(-2 * x/(1 + x^2)^2)
ans =
1/(x^2 + 1)
>> int(x/(1 + z^2), x)
ans =
x^2/(2*(z^2 + 1))
级数求和:
在matlab中提供了symsum函数用于求符号表达式的和。其调用格式为:
>> syms k x
>> S1 = symsum(k^2,k,0,10)
S1 =
385
>> S2 = symsum(1/k^2,k,1,Inf)
S2 =
pi^2/6
泰勒级数:
taylor函数用于求符号表达式的泰勒级数展开式
>> syms x
>> tayor(exp(x))
>> taylor(exp(x))
ans =
x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
>> taylor(sin(x))
ans =
x^5/120 - x^3/6 + x
傅里叶变换及其反变换:
>> syms w x y z a b c d t
>> f = exp(-x^2);
>> fourier(f,x,y)
ans =
pi^(1/2)*exp(-y^2/4)
>> F = sqrt(sym(pi)) * exp(-y^2/4);
>> ifourier(F,y,z)
ans =
exp(-z^2)
拉普拉斯变换及其反变换:
>> syms a b c d w x y z t s
>> f = 1/sqrt(x);
>> laplace(f,x,y)
ans =
pi^(1/2)/y^(1/2)
>> F = 1/y^2;
>> ilaplace(F,y,x)
ans =
x
z变换及其反变换:
>> syms a b c d w x y z k t n
>> f = sin(k);
>> ztrans(f, k, x)
ans =
(x*sin(1))/(x^2 - 2*cos(1)*x + 1)
>> F = 2*x/(x-2)^2;
>> iztrans(F,x,k)
ans =
2^k + 2^k*(k - 1)