Matlab符号处理工具箱简介

Matlab符号推理工具箱简介

一,微积分... 2

diff: 2

int: 3

limit... 3

symsum... 4

taylor: 4

二,线性代数... 4

det 4

diag. 5

inv. 5

三,表达式化简... 6

expand: 6

factor... 6

simple... 6

simplify: 7

pretty. 7

subs: 7

subexpr... 8

collect... 8

numden... 9

四,方程的求解... 9

compose... 9

dsolve... 10

finverse... 10

solve... 11

五,可变精度的计算... 11

vpa... 11

六,算术运算符... 12

七,基本函数运算... 12

八,特殊函数运算... 13

sinint cosint... 13

dirac... 13

heaviside... 13

九,图形图像处理函数... 14

ezplot: 14

ezpolar 14

十,整合和Z变换... 14

fourier: 14

ztrans 15

laplace. 15

 

 

有了Matlab符号工具箱之后,Matlab可以说也具备了一定的智能推理能力。很多繁杂的逻辑推理和公式化简可以交给Matlab来做了。现在我将就Matlab中较常用的符号函数做一些简要介绍。不过个人感觉,Matlab有些推理计算还是有点慢,也可能是我的电脑太老啦。不过计算的准确度还是能保证的。Matlab符号工具箱以前是使用的是Maple引擎处理符号运算,不过只购买部分内核使用权。自从Matlab R2008之后,他集成了一个自己符号处理引擎叫 MUPAD,并作为Matlab默认的符号处理工具箱引擎。以前的Maple引擎还是可以使用的,只要安装了Maple。在Matlab中输入

 

symengine

 

根据需要,选择自己喜欢的引擎,个人认为Maple的处理速度效率要稍好些。

不愧为符号运算的老大。

Maple就不再介绍了,虽然符号处理MapleMatlab强大,功能太单一。Matlab

的功能那才叫博大精深。开放式的结构,丰富的工具箱。让设计变得简单。

---------------------------------------------------------------------

创建符号变量,这是最最基本的哦,其实也就两种方式。symsyms

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)

*********************************************************************

推理运算函数:

一,微积分

diff:

求微分 默认对最靠近x(字母顺序)的变量进行微分

diff(y)y求微分(1)

diff(y,n)yn阶微分

diff(y,n,x)yxn阶微分(求解偏微分)

例如: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)

---------------------------------------------------------------------

int:

求积分默认对最靠近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

求极限

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]

---------------------------------------------------------------------

symsum

求解符号表达式的级数自变量范围为([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:

求解表达式的泰勒级数

taylor(f)

taylor(f,n,v)

taylor(f,n,v,a)

*********************************************************************

二,线性代数

det

求矩阵的行列式。

>> syms a b c d

>> A=[a b;c d]

A =

    [ a, b]

    [ c, d]

>> det(A)

ans =

a*d - b*c

---------------------------------------------------------------------

diag

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]

---------------------------------------------------------------------

inv

求矩阵的逆

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:

多项式展开和表达式展开

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

因式分解

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

---------------------------------------------------------------------

simple

对符号表达式尝试多种不同的算法进行化简,以显示长度最短的符号
表达式简化形式

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)

---------------------------------------------------------------------

simplify:

直接求出最简表达式,对符号表达式进行化简,它利用各种类型的代数恒等式,包括求和、积分、三角函数、指数函数以及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)

---------------------------------------------------------------------

pretty

将表达式显示变成我们可以接受的形式。其实就是显示和我们书写的样子一致

实例:

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

看上去是不是更顺眼些了。

 

---------------------------------------------------------------------

subs:

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)

这个函数很管用,比例在各种变换中对等式进行变量代换,或计算函数在特定变量下的值。

---------------------------------------------------------------------

subexpr

也可以说是一种化简方式吧。就是将表达式中复杂的一段表达式用一个符号等效

替换。

[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 指明了代换关系。

---------------------------------------------------------------------

collect

 

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]

---------------------------------------------------------------------

numden

分离出表达式的分子和分母

[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

*********************************************************************

四,方程的求解

compose

生成复合函数f(g(y))
compose(f,g) gf复合的 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)) 

---------------------------------------------------------------------

dsolve

微分方程的求解

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)

---------------------------------------------------------------------

finverse

求反函数

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

代数方程求解,多元代数方程。

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

*********************************************************************

五,可变精度的计算

vpa

可变精度运算,指定需要的位数 精确的输出某个变量的数值。

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)*BA B书写顺序不变,inv在左边故该为左除,改写为X=A/B.

方程:X*A=B => X=B*inv(A)A B书写顺序不变,inv在右边故该为右除,改写为 X=B/A .

*********************************************************************

七,基本函数运算

fix(x)    取定点即整数部分

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 等等。

*********************************************************************

八,特殊函数运算

sinint cosint

正弦 余弦积分

Y = sinint(X)   Y = cosint(X)

syms x;

f = cosint(x);

diff(f)

结果为:

cos(x)/x

---------------------------------------------------------------------

dirac

狄拉函数delta

dirac(x)

实例:

diff(heaviside(x),x)

ans =

dirac(x)

syms x a

a = 5;

int(dirac(x-a)*sin(x),-inf, inf)

---------------------------------------------------------------------

heaviside

单位阶跃函数

heaviside(x)

描述:

heaviside(x) x < 0时为0 x > 01, x = 00.5 heaviside(sym(0)) = 1/2.

---------------------------------------------------------------------

九,图形图像处理函数

ezplot:

绘制函数图像

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)

---------------------------------------------------------------------

ezpolar

绘制函数极坐标图形

ezpolar(f)
ezpolar(f,[a,b])

ezpolar(f) 默认定义域为 0 < θ < 2π.

ezpolar(f,[a,b])    a < θ < b.

实例:

1 + cos(t)

定义域 [0, 2π].

syms t

ezpolar(1+cos(t))

---------------------------------------------------------------------

十,整合和Z变换

fourier:

傅立叶变换

F = fourier(f)
F = fourier(f,v)
F = fourier(f,u,v)

几个实例:

那么理论计算:也就是手算啦,呵呵。为

Matlab计算结果:

F =

    pi^(1/2)/exp(w^2/4)

---------------------------------------------------------------------

 

ztrans

Z变换

F = ztrans(f)
F = ztrans(f,w)
F = ztrans(f,k,w)

实例:

syms n

f = n^4

ztrans(f)

returns

(z^4 + 11*z^3 + 11*z^2 + z)/(z - 1)^5

---------------------------------------------------------------------

 

laplace

拉普拉斯变换

Syntax

laplace(F)

laplace(F,t)

laplace(F,w,z)

实例:

syms t

f = t^4

laplace(f)

returns

24/s^5

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值