赞
踩
Matlab符号推理工具箱简介
有了Matlab符号工具箱之后,Matlab可以说也具备了一定的智能推理能力。很多繁杂的逻辑推理和公式化简可以交给Matlab来做了。现在我将就Matlab中较常用的符号函数做一些简要介绍。不过个人感觉,Matlab有些推理计算还是有点慢,也可能是我的电脑太老啦。不过计算的准确度还是能保证的。Matlab符号工具箱以前是使用的是Maple引擎处理符号运算,不过只购买部分内核使用权。自从Matlab R2008之后,他集成了一个自己符号处理引擎叫 MUPAD,并作为Matlab默认的符号处理工具箱引擎。以前的Maple引擎还是可以使用的,只要安装了Maple。在Matlab中输入
symengine
根据需要,选择自己喜欢的引擎,个人认为Maple的处理速度效率要稍好些。
不愧为符号运算的老大。
对Maple就不再介绍了,虽然符号处理Maple比Matlab强大,功能太单一。Matlab
的功能那才叫博大精深。开放式的结构,丰富的工具箱。让设计变得简单。
---------------------------------------------------------------------
创建符号变量,这是最最基本的哦,其实也就两种方式。sym和syms
a = sym('a'); t = sym('t'); x = sym('x'); y = sym('y');
pi = sym('pi')
delta = sym('1/10')
s = sym('sqrt(2)')
f=sym(‘sin(x)^2+cos(x)^2’)
f=sym(‘[a b;c d]’) 创建符号矩阵
或
syms a t x y
f=sin(x)^2+4*cos(2*x)
*********************************************************************
推理运算函数:
求微分 默认对最靠近x(字母顺序)的变量进行微分
diff(y)对y求微分(1阶)
diff(y,n)对y求n阶微分
diff(y,n,x)y对x求n阶微分(求解偏微分)
例如:syms a x;
y=4*sin(4*a*x)
diff(y)---------------结果:4*a*cos(4*a*x)
diff(y,2)-------------结果:(-16)*a^2*sin(4*a*x)
diff(y,2,a)-----------结果:(-16)*x^2*sin(4*a*x)
---------------------------------------------------------------------
求积分默认对最靠近x的变量进行积分
int(y) 对y求一次不定积分
int(y,v) y对v求一次不定积分
int(y,a,b) 对默认变量从区间[a,b]求y的定积分
int(y,v,a,b) 对变量v从区间[a,b]求y的定积分
例如:
syms x t z alpha;
int(-2*x/(1+x^2)^2)---------------------------------------结果:1/(x^2 + 1)
int(x/(1+z^2),z)--------------------------------------------结果:x*atan(z)
int(x*log(1+x),0,1) ---------------------------------------结果:1/4
int(2*x, sin(t), 1) -----------------------------------------结果:cos(t)^2
int([exp(t),exp(alpha*t)]) -------------------------------结果:[ exp(t), exp(alpha*t)/alpha]
---------------------------------------------------------------------
求极限
limit(F,x,a)求解符号表达式F的极限(当x->a时)
limit(F,a) 求解符号表达式F的极限(当自变量趋于a时),其中使用了findsym
(F)自动查找自变量。更多findsym的详情,请查看相关文档。再此不详述。
limit(F) 同上,只是a被默认为0。
limit(F,x,a,'right') 右极限
limit(F,x,a,'left') 左极限
实例:
syms x a t h;
limit(sin(x)/x) --------------------------------------------结果: => 1
limit(1/x,x,0,'right') -------------------------------------结果:=> Inf
limit(1/x,x,0,'left') ---------------------------------结果: => -Inf
limit((sin(x+h)-sin(x))/h,h,0) -------------------------结果: => cos(x)
v = [(1 + a/x)^x, exp(-x)];
limit(v,x,inf) --------------------------------------------结果: => [ exp(a), 0]
---------------------------------------------------------------------
求解符号表达式的级数自变量范围为([0,k-1])。
r = symsum(s)以findsym(F)为自变量,求s的级数。
r = symsum(s,v)以v为自变量求s的级数。
r = symsum(s,a,b)以findsym(F) 为自变量,求s在[a,b]区间的级数。
r = symsum(s,v,a,b)以v为自变量,求s在[a,b]区间的级数。
实例:
表达式n 的级数 即sum=1+2+3+4+…+(n-1)
笔算易得:sum=n(n-1)/2=n^2/2--n/2
ans =
n^2/2 - n/2
表达式n^2 的级数 即sum=1+2^2+3^3+4^+…+(n-1)^2
ans =
n^3/3 - n^2/2 + n/6
symsum(k^2,0,10)
ans =
385
---------------------------------------------------------------------
求解表达式的泰勒级数
taylor(f)
taylor(f,n,v)
taylor(f,n,v,a)
*********************************************************************
求矩阵的行列式。
>> syms a b c d
>> A=[a b;c d]
A =
[ a, b]
[ c, d]
>> det(A)
ans =
a*d - b*c
---------------------------------------------------------------------
求n阶对角矩阵
diag(A,k)
diag(A)
syms a b c x y z
v= [ a, 0, 0]
[ 0, b, 0]
[ 0, 0, c]
diag(v)
v =[a b c]
diag(v,-2)
[ 0, 0, 0, 0, 0]
[ 0, 0, 0, 0, 0]
[ a, 0, 0, 0, 0]
[ 0, b, 0, 0, 0]
[ 0, 0, c, 0, 0]
---------------------------------------------------------------------
求矩阵的逆
A = sym([2,-1,0;-1,2,-1;0,-1,2]);
inv(A)
[ 3/4, 1/2, 1/4]
[ 1/2, 1, 1/2]
[ 1/4, 1/2, 3/4]
syms a b c d
A = [a b; c d]
inv(A)
[ d/(a*d - b*c), -b/(a*d - b*c)]
[ -c/(a*d - b*c), a/(a*d - b*c)]
---------------------------------------------------------------------
*********************************************************************
多项式展开和表达式展开
expand(S)
实例:
syms x y a b t;
expand((x-2)*(x-4))
结果为:x^2 - 6*x + 8
expand(cos(x+y))
结果为:cos(x)*cos(y) - sin(x)*sin(y)
---------------------------------------------------------------------
因式分解
factor(X)
实例:
syms x y a b; factor(x^3-y^3)
结果为:(x - y)*(x^2 + x*y + y^2)
factor([a^2-b^2, a^3+b^3])
结果为:[ (a - b)*(a + b), (a + b)*(a^2 - a*b + b^2)]
---------------------------------------------------------------------
对符号表达式尝试多种不同的算法进行化简,以显示长度最短的符号
表达式简化形式
r = simple(S)
[r,how] = simple(S) 不显示中间化简结果只显示最后的最简形式
实例:
syms x
y=cos(x)^2+sin(x)^2
simple(y)
ans=
1
syms x
y=cos(x)^2-sin(x)^2
simple(y)
ans=
cos(2*x)
---------------------------------------------------------------------
直接求出最简表达式,对符号表达式进行化简,它利用各种类型的代数恒等式,包括求和、积分、三角函数、指数函数以及Bessel 函数等来化简符号表达式。
R = simplify(S)
R = simplify(S, n) n用于控制函数进行上化简的步骤数
实例:
syms x a b c;
simplify(exp(c*log(sqrt(a+b))))
结果为
(a + b)^(c/2)
---------------------------------------------------------------------
将表达式显示变成我们可以接受的形式。其实就是显示和我们书写的样子一致
实例:
syms x
f = x^3-6*x^2+11*x-6
结果为:f =
x^3 - 6*x^2 + 11*x – 6
pretty(f)
结果为:
3 2
x - 6 x + 11 x – 6
看上去是不是更顺眼些了。
---------------------------------------------------------------------
R = subs(S)
R = subs(S, new) 将默认变量替换成新的变量
R = subs(S,old,new)用新的变量替换旧的变量
实例:
y = dsolve('Dy = -a*y')
计算结果:
y =
C2/exp(a*t)
假设我们想算下y在 a=980 C2=3的情况下 的值
a = 980; C2 = 3; subs(y)
结果为:
3/exp(980*t)
这个函数很管用,比例在各种变换中对等式进行变量代换,或计算函数在特定变量下的值。
---------------------------------------------------------------------
也可以说是一种化简方式吧。就是将表达式中复杂的一段表达式用一个符号等效
替换。
[Y,SIGMA] = subexpr(X,SIGMA)
[Y,SIGMA] = subexpr(X,'SIGMA')
实例:
f=sym('a*x^2+b*x+c=0') 很熟悉的方程
[m n]=subexpr(solve(f),'delta')
m =
-(b + sigma)/(2*a)
-(b - sigma)/(2*a)
n =
(b^2 - 4*a*c)^(1/2)
运算结果中:(b^2 - 4*a*c)^(1/2) 项用指定的符号delta替换了。
m n 指明了代换关系。
---------------------------------------------------------------------
R = collect(S)
R = collect(S,v) 以v为最小整体单元,对S表达式进行展开。
实例:
syms x y;
R1 = collect((exp(x)+x)*(x+2))
R2 = collect((x+y)*(x^2+y^2+1), y)
R3 = collect([(x+1)*(y+1),x+y])
R1 =
2*exp(x) + x*(exp(x) + 2) + x^2
R2 =
y^3 + x*y^2 + (x^2 + 1)*y + x*(x^2 + 1)
R3 =
[ y + x*(y + 1) + 1, x + y]
---------------------------------------------------------------------
分离出表达式的分子和分母
[N,D] = numden(A) N代表分子 D代表分母
syms x y; [n,d] = numden(x/y + y/x) returns
n =
x^2 + y^2
d =
x*y
*********************************************************************
生成复合函数f(g(y))
compose(f,g) g和f复合的 f(g(y))
compose(f,g,z) g和f复合的 f(g(z))
compose(f,g,x,z) g和f复合的 f(g(y)) 中的x全替换成z
compose(f,g,x,y,z) 类似上
实例:
syms x y z t u;
f = 1/(1 + x^2); g = sin(y); h = x^t; p = exp(-y/u);
运算结果:
compose(f,g) -> 1/(sin(y)^2 + 1)
compose(f,g,t) -> 1/(sin(t)^2 + 1)
compose(h,g,x,z) -> sin(z)^t
compose(h,g,t,z) -> x^sin(z)
compose(h,p,x,y,z) -> (1/exp(z/u))^t
compose(h,p,t,u,z) -> x^(1/exp(y/z))
---------------------------------------------------------------------
微分方程的求解
r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')
r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')
微分方程中,dy 表示为 Dy d2y 表示为D2y
默认的自变量是t 也可以指定为‘v’所代表的符号。
实例:
先看这么一个微分方程
dsolve('Df = f + sin(t)')
结果为: C5*exp(t) - sin(t)/2 - cos(t)/2
dsolve('Dx = -a*x')
结果为: C3/exp(a*t)
dsolve('Df = f + sin(t)')
结果为: C5*exp(t) - sin(t)/2 - cos(t)/2
dsolve('(Dy)^2 + y^2 = 1','s') -1
结果为:
1
sin(C12 + s)
sin(C8 - s)
dsolve('Dy = a*y', 'y(0) = b')
结果为:b*exp(a*t)
dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0')
结果为:cos(a*t)
z = dsolve('Dx = y', 'Dy = -x')
结果为: z =
y: [1x1 sym]
x: [1x1 sym]
键入z.x 和z.y 看输出结果。
z.x
ans =
(C23*i)/exp(i*t) - C22*i*exp(i*t)
z.y
ans =
C22*exp(i*t) + C23/exp(i*t)
---------------------------------------------------------------------
求反函数
g = finverse(f)
g = finverse(f,v) 对v求反函数
实例:
syms x u v; finverse(1/tan(x))
结果为:
atan(1/x)
finverse(exp(u-2*v),u) returns
2*v + log(u)
---------------------------------------------------------------------
代数方程求解,多元代数方程。
solve(eq)
solve(eq,var)
solve(eq1,eq2,...,eqn)
g = solve(eq1,eq2,...,eqn,var1,var2,...,varn)
实例:
solve('a*x^2 + b*x + c')
结果为: -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
solve('a*x^2 + b*x + c','b')
结果为:
-(a*x^2 + c)/x
S = solve('x + y = 1','x - 11*y = 5') 返回一个S的结构数组
S.y = -1/3, S.x = 4/3
A = solve('a*u^2 + v^2', 'u - v = 1', 'a^2 - 5*a + 6')
*********************************************************************
可变精度运算,指定需要的位数 精确的输出某个变量的数值。
R = vpa(A)
R = vpa(A,d) d指定精度或位数也可以用digits(d)指定位数 精度。
实例:
digits(25)
q = vpa(sin(sym('pi')/6))
p = vpa(pi)
w = vpa('(1+sqrt(5))/2')
结果为:
q = 0.5
p = 3.141592653589793238462643
w = 1.618033988749894848204587
*********************************************************************
+ - 矩阵加减运算,A 与B的维数必须相等,除非其中一个为标量。-
* /运算为矩阵乘 除运算 .* ./运算是数组运算 为元素群操作。注意加以区别。
^ 矩阵乘方操作 .^数值群运算符。
conj(A)矩阵共轭运算。
‘ 矩阵共轭转置运算
.’ 为矩阵转置运算
注意区别,很多人搞不清楚这个。
/ 左除运算A*X=B 则A/B 表示X=inv(A)*B
/ 右除运算X*A=B 则B/A表示 X=B*inv(A)
左除与右除如何记忆:
比如: 有一个竖杠|
左除 则竖杠| 向左边偏 /.
右除 则竖杠| 向右边偏 /.
方程:A*X=B => X=inv(A)*B,A B书写顺序不变,inv在左边故该为左除,改写为X=A/B.
方程:X*A=B => X=B*inv(A),A B书写顺序不变,inv在右边故该为右除,改写为 X=B/A .
*********************************************************************
floor(x) 向下取整
round(x) 取最靠近的整数
ceil(x) 向上取整
frac(x) 取浮点即小数部分
x = sym(-5/2)
[fix(x) floor(x) round(x) ceil(x) frac(x)]
= [ -2, -3, -3, -2, -1/2]
此外还有:
real
imag
log2
log10
mod 等等。
*********************************************************************
正弦 余弦积分
Y = sinint(X) Y = cosint(X)
syms x;
f = cosint(x);
diff(f)
结果为:
cos(x)/x
---------------------------------------------------------------------
dirac(x)
实例:
ans =
dirac(x)
a = 5;
int(dirac(x-a)*sin(x),-inf, inf)
---------------------------------------------------------------------
单位阶跃函数
heaviside(x) 当 x < 0时为0 x > 0为1, x = 0为0.5。 heaviside(sym(0)) = 1/2.
---------------------------------------------------------------------
绘制函数图像
ezplot(f) 默认范围 [–2π, 2π].
ezplot(f,[xmin xmax])
ezplot(f,[xmin xmax],fign)
ezplot(f,[xmin,xmax,ymin,ymax])
ezplot(x,y)
ezplot(x,y,[tmin,tmax])
ezplot(...,figure)
实例:
syms x y
ezplot(x^2-y^4)
---------------------------------------------------------------------
绘制函数极坐标图形
1 + cos(t)
定义域 [0, 2π].
syms t
ezpolar(1+cos(t))
---------------------------------------------------------------------
傅立叶变换
F = fourier(f)
F = fourier(f,v)
F = fourier(f,u,v)
几个实例:
那么理论计算:也就是手算啦,呵呵。为
Matlab计算结果:
F =
pi^(1/2)/exp(w^2/4)
---------------------------------------------------------------------
Z变换
F = ztrans(f)
F = ztrans(f,w)
F = ztrans(f,k,w)
实例:
syms n
returns
(z^4 + 11*z^3 + 11*z^2 + z)/(z - 1)^5
---------------------------------------------------------------------
拉普拉斯变换
laplace(F)
laplace(F,t)
laplace(F,w,z)
实例:
syms t
returns
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。