MATLAB符号运算.docx

上传人:b****5 文档编号:8503760 上传时间:2023-01-31 格式:DOCX 页数:17 大小:166.33KB
下载 相关 举报
MATLAB符号运算.docx_第1页
第1页 / 共17页
MATLAB符号运算.docx_第2页
第2页 / 共17页
MATLAB符号运算.docx_第3页
第3页 / 共17页
MATLAB符号运算.docx_第4页
第4页 / 共17页
MATLAB符号运算.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

MATLAB符号运算.docx

《MATLAB符号运算.docx》由会员分享,可在线阅读,更多相关《MATLAB符号运算.docx(17页珍藏版)》请在冰豆网上搜索。

MATLAB符号运算.docx

MATLAB符号运算

符号运算

科学计算包括数值计算和符号计算两种计算,数值计算是近似计算;而符号计算则是绝对精确的计算。

符号变量的生成和使用

1、符号变量、符号表达式和符号方程的生成

(1)、使用sym函数定义符号变量和符号表达式

单个符号变量

sqrt

(2)

sym(sqrt

(2))%显示精确结果

a=sqrt(sym

(2))%显示精确结果

double(a)

sym

(2)/sym(3)%显示精确结果

2/5+1/3

sym(2/5+1/3)%显示精确结果

sym

(2)/sym(5)+sym

(1)/sym(3)%显示精确结果

sym函数定义符号表达式:

单个变量定义法,整体定义法

单个变量定义法

a=sym('a')

b=sym('b')

c=sym('c')

x=sym('x')

f=a*x^2+b*x+c

整体定义法

f=sym('a*x^2+b*x+c')

g=f^2+4*f-2

(2)、使用syms函数定义符号变量和符号表达式

一次可以创建任意多个符号变量symsvar1var2var3…

symsabcx

f=a*x^2+b*x+c

g=f^2+4*f-2

(3)、符号方程的生成

函数:

数字和变量组陈的代数式

方程:

函数和等号组成的等式

用sym函数生成符号方程:

equation1=sym('sin(x)+cos(x)=1')

2、符号变量的基本操作

(1)、findsym函数用于寻找符号变量

findsym(f):

找出f表达式中的符号变量

findsym(s,n):

找出表达式s中n个与x接近的变量

symsaalphabx1y

findsym(alpha+a+b)

findsym(cos(alpha)*b*x1+14*y,2)%x1,y

findsym(y*(4+3i)+6j)

findsym(cos(alpha)*b*x1+14*y,1)%x1

findsym(cos(alpha)*b*x1+14*y,3)%x1,y,b

(2)、任意精确度的符号表达式

digits函数设定所用数值的精度

digits:

在commandwindow显示当前设定的数值精度

digits(D):

设置数值的精度为D

D=digits:

在commandwindow中返回当前设定数值精度

digits

digits(100)

D=digits

vpa函数进行可控精度运算

R=vpa(S):

显示符号表达式S在当前精度D下的值,D是使用digits函数设置的数值精度

vpa(S,D):

显示符号表达式S在精度D下的值,D不是当前精度值,只是临时设置的

r=vpa(pi)

r=vpa(pi,1000)

q=vpa(hilb

(2))

q=vpa(hilb

(2),6)

(3)、数值型变量与符号型变量的转换形式

数值型变量t转换成符号型变量

有理数形式:

sym(t)或sym(t,’r’)

浮点数形式:

sym(t,’f’)

指数形式:

sym(t,’e’)

指数精度形式:

sym(t,’d’)

t=0.1

sym(t)

sym(t,'r')

sym(t,'f')

sym(t,'e')

sym(t,'d')

可以通过digits函数改变精度

digits(7)

sym(t,'d')

也可以用于矩阵,但是矩阵只能转换为有理数形式

A=hilb(4)

A=sym(A)

A=sym(A,'d')%报错

A=sym(A,'e')%报错

A=sym(A,'f')%报错

3、符号表达式(符号函数)的操作

(1)、四则运算(与通常算术式一样)

symsxyab

fun1=sin(x)+cos(y)

fun2=a+b

fun1+fun2

(2)、合并同类项

collect(S,v):

将符号矩阵S中所有同类项合并,并以v为符号变量输出

collect(S):

使用findsym函数规定的默认变量,代替上式的v

symsxy

collect(x^2*y+y*x-x^2-2*x)

f=-1/4*x*exp(-2*x)+3/16*exp(-2*x)

collect(f)

(3)、因式分解

horner(P):

将表达式P进行因式分解

symsx

fun1=2*x^3+2*x^2-32*x+40

horner(fun1)

fun2=x^3-6*x^2+11*x-6

horner(fun2)

(4)、简化

simplify(S):

将表达式S中的每个元素都进行简化,即便使用多次simplify也不一定能得到最简形式

symsx

fun1=(1/x+7/x^2+12/x+8)^(1/3)

sfy1=simplify(fun1)

sfy2=simplify(sfy1)

simplify(sin(x)^2+cos(x)^2)

simple(S):

使用多种代数方法对S进行简化,显其中最简单的结果

[R,how]=simple(S):

R为最简结果,how为简化方法的字符串

s=2*cos(x)^2-sin(x)^2

simple(s)

[Rhow]=simple(s)

simple(f)

(5)、subs函数用于替换求值

subs函数可以将符号表达式的符号变量替换为数值变量

subs(S):

将S中自由符号变量用调用函数中的值或是MATLAB工作区间值替换

subs(S,new):

将S中自由符号变量用数值型变量或表达式new替换

subs(S,old,new):

将S中符号变量old用数值型变量或表达式new替换

symsxy

f=x^2*y+5*x*sqrt(y)

subs(f)

subs(f,x,3)

subs(f,y,3)

subs(f,3)%与subs(f,x,3)结果相同

用户没指定被替换的符号变量,对单个字母的变量,MATLAB选择在字母表中与x接近的字母,若有两个变量离x一样近,则选择字母表中靠后的那个

findsym(f,1)

symsst

g=s+t

findsym(g,1)%找到t

subs(g,1)%替换为s+1

多个变量替换

symsab

subs(cos(a)+sin(b),{a,b},{sym('alpha'),2})

用矩阵替换

symstxy

subs(exp(a*t),a,-magic

(2))

subs(x*y,{x,y},{[01;-1-1],[1-1;-21]})

(6)、反函数

g=finverse(f):

求函数f的反函数,返回g也是符号函数

g=finverse(f,v):

设定f的自变量是v,当f包括不止一个变量时最好使用该命令

symsxy

f=x^2+y

finverse(f,y)

finverse(f)%由于没指明自变量,给出警告

symsx

f=x^2

g=finverse(f)%x^2的反函数不唯一,默认给出正值

fg=simple(compose(g,f))%验证反函数正确性

(7)、复合函数

compose(f,g):

返回f=f(x),g=g(y)的复合函数f(g(y)),x是findsym定义的f的符号变量,y是findsym定义的g的符号变量

compose(f,g,z):

返回f=f(x),g=g(y)的复合函数f(g(z)),返回函数以z为自变量

compose(f,g,x,z):

返回f(g(z)),x为函数f的独立变量

compose(f,g,x,y,z):

返回f(g(z)),x为函数f的独立变量,y为函数g的独立变量

symsxyztu

f=1/(1+x^2)

g=sin(y)

h=x^t

p=exp(-y/u)

compose(f,g)

compose(f,g,t)

compose(h,g,x,z)

compose(h,g,t,z)

compose(h,p,x,y,z)

compose(h,p,t,u,z)

符号矩阵的生成和运算

1、符号矩阵的生成

(1)、使用sym函数直接生成符号矩阵

a1=sym('[1/32/35/7;9/1111/1313/17;17/1919/2323/29]')

a1=sym('[1/3,0.2+sqrt

(2),pi;2/7,sin(x),cos(x),log(x);sin(x)^2,sin(22*x),exp(x)]')%长度不一致的行补0

(2)、用生成子矩阵的方法生成符号矩阵

与字符串矩阵的直接输入法类似,同一列元素长度须相同(不同补0)

a=['[100,cos(x)]';'[1/s,x]']

(3)、由数值矩阵转换为符号矩阵

系统首先将自动在MATLAB工作区间将数值型变量转换为符号型变量,用户也可以用sym函数进行转换

M=[30111;6159;98254;3245620]

S=sym(M)

M1=[0.30.330.3331/3;3.143.1423.1416pi;log

(2)log(3)log(5)log(7);sin

(1)cos

(1)tan

(1)atan

(1)]

S1=sym(M1)

2、符号矩阵及符号数组的运算

(1)、符号矩阵的四则运算

A+B和A-B同型矩阵可以分别对对应分量进行加减,若A与B至少有一个为标量,则把标量扩大为与另一个同型的阵列

A*B为线性代数中定义的矩阵乘法

A\B实现左除,X=A\B为符号线性方程组A*X=B的解,A\B近似等于inv(A)*B,X不存在或不唯一,则产生警告,A可以是非方阵,要求方程组必须是相容的

A/B实现右除,X=B/A为符号线性方程组X*A=B的解,B/A近似等于B*inv(A),X不存在或不唯一,则产生警告,A可以是非方阵,要求方程组必须是相容的

m=sym('[x,x^2,x*2,1/x]')

n=sym('[2*x,y,x,x^2]')

m+n

m-n

m*n%出错

m\n

m/n%出错

(2)、符号数组的四则运算

若有标量,则扩展为同型阵列

.*乘法

./右除

.\左除

q=sym('[3496;xyzw;abcd]')

p=sym('[x1/xx^2x^3;abcd;5236]')

q.*p

q./p

q.\p

r=q*p%矩阵行列不匹配,出错

(3)、矩阵和数组的逆运算

A’实现矩阵的Hermition转置,若A为复数矩阵,则A’为共轭转置

q=sym('[3496;xyzw;abcd]')

q'%符号变量具体值不知,只能用conj给出

q.'%普通转置

(4)、矩阵和数组的幂运算

A^B实现矩阵幂运算,若A为标量B为方阵,A^B用方阵B的特征值与特征向量计算数值。

若A、B均为矩阵,则返回错误

A.^B实现数组幂运算,若A与B为同型矩阵,则按对应分量进行计算。

若A与B中至少有一个为标量,则现将标量扩大为另一个同型的阵列

p=sym('[x1/xx^2x^3;abcd;5236]')

q=sym('[3496;xyzw;abcd;1357]')

q^2

p^2%p矩阵不为方阵,报错

q.^2

p.^2

(5)、符号矩阵的秩

rank(A):

求出方阵A的线性不相关的独立行和列的个数

rank(A,tol):

求出比tol值大的值的个数,在上个命令中默认tol=max(size(A))*norm(A)*eps

a=sym('[11/xx^2;xin(x)cos(x)tan(x);log(x)29]')

rank(a)

(6)、符号矩阵的逆和行列式运算

inv(X):

求方阵X的逆,当X奇异或者范数很小时,系统给出一个出错信息

det(X):

求方阵X的行列式

h=sym(hilb(4))

inv(h)

det(h)

b=sym('[1xx^2;00sin(x);00log(x)]')

inv(b)%b矩阵行列式为0,不存在逆,返回FAIL

b=sym('[1,x;x;x^2]')

inv(b)%矩阵不是方阵,报错

符号微积分

1、符号极限

limit(F,x,a):

计算符号表达式当x趋于a时F=F(x)的极限值

limit(F,a):

x默认为findsym(F)

limit(F):

a默认为0

limit(F,x,a,’right’)或Limit(F,x,a,’left’):

计算右极限和左极限

limit(sin(x)/x)

limit((x-2)/(x^2-4),2)

limit((1-2*1/x)^(3*x),x,inf)

limit(1/x,x,0,'left')

limit(1/x,x,0,'right')

limit((sin(x+h)-sin(x))/h,h,0)

2、符号微分和求导

(1)、diff函数的使用

diff(x):

根据findsym(x)命令返回的自变量v,求表达式x的一阶导数

diff(x,n):

根据findsym(x)命令返回的自变量v,求表达式x的n阶导数

diff(x,’v’)或diff(x,sym(‘v’)):

对v求x的一阶导数

diff(x,‘v’,n):

对v求x的n阶导数

symsxy

diff(x^3+3*x^2+2*x+5)

diff(sin(x^3),6)

diff(sin(x^3),'x',6)

diff(sin(x^3),'v',6)%对v求x的6阶导数,结果为0

diff(x*y+y^2+sin(x)+cos(y),y)

diff(x*y+y^2+sin(x)+cos(y),y,3)

(2)、jacobian函数的使用

jacobian(f,v):

计算数量或向量f对向量v的jacobi矩阵,所得矩阵的第i行第j列的数是df(i)/dv(j),当f为数量的时候,该命令返回的是f的梯度,若此时v也是数量,则jacobian(f,v)等价于diff(f,v)

symsxyz

a=[x^2+x*y;sin(x)*cos(y)]

jacobian(a,[x,y])

3、符号积分

int(S):

根据由findsym(S)命令返回的自变量v,求S的不定积分,其中S为符号矩阵或符号数量

int(S,v):

求S对v的不定积分

int(S,a,b):

求a到b的定积分

int(S,v,a,b):

求a到b的定积分

symsxx1alphaut;

A=[cos(x*t)sin(x*t);-sin(x*t)cos(x*t)]

int(1/(1+x^2))

int(sin(alpha*u),alpha)

int(besselj(1,x),x)

int(x1*log(1+x1),0,1)

int(4*x*t,x,2,sin(t))

int([exp(t)exp(alpha*t)])

int(A,t)

符号积分变换

1、Fourier变换及其逆变换

(1)、Fourier变换

F=fourier(f):

以x为默认独立变量,返回w的函数,若f是w的函数,则返回的F是t的函数

F=fourier(f,v):

返回的F以v为自变量

fourier(f,u,v):

返回的函数以v为自变量,f以u为自变量

fourier(1/t)

fourier(exp(-x^2),x,t)

fourier(exp(-t)*sym('Heaviside(t)'),v)

fourier(diff(sym('F(x)')),x,w)

(2)、Fourier反变换

f=ifourier(F):

以w为默认独立变量,默认的返回函数是以x为自变量的函数,若F以x为变量,返回函数以t为自变量

f=ifourier(F,u):

返回的函数f以u为自变量

f=ifourier(F,v,u):

返回的函数f以u为自变量,F以v为自变量

symstuvwx

ifourier(w*exp(-3*w)*sym('Heaviside(w)'))

ifourier(1/(1+w^2),u)

ifourier(v/(1+w^2),v,u)

ifourier(sym('fourier(f(x),x,w)'),w,x)

2、Laplace变换及其逆变换

(1)、Laplace变换

L=laplace(F):

F以t为独立自变量,返回函数L以s为变量,若F以s为自变量,则L以t为自变量

L=laplace(F,t):

返回函数以t为自变量

L-laplace(F,w,z):

返回函数L以z为自变量,F以w为自变量

symsastwx

laplace(t^5)

laplace(exp(a*s))

laplace(sin(w*x),t)

laplace(cos(w*x),w,t)

laplace(x^sym(3/2),t)

laplace(diff(sym('F(t)')))

(2)、Laplace反变换

F=ilaplace(L):

L以s为独立自变量,返回函数以t为自变量,若L以t为自变量,返回函数以x为自变量

F=ilaplace(L,x):

返回函数以x为自变量

F=ilaplace(L,y,x):

返回函数以x为自变量,L以y为自变量

symsstwxy

ilaplace(1/(s-1))

ilaplace(1/(t^2-1))

ilaplace(t^sym(5/2),x)

ilaplace(y/(y^2+w^2),y,x)

ilaplace(sym('laplace(F(x),x,s)'),s,x)

3、Z变换及其反变换

(1)、Z变换

F=ztrans(f):

返回函数以z为自变量,f以n为独立自变量,若f以z为自变量,返回函数以w为自变量

F=ztrans(f,w)

F=ztrans(f,k,w)

symsknwz

ztrans(2^n)

ztrans(sin(k*n),w)

ztrans(cos(k*n),k,z)

ztrans(cos(k*n),n,w)

ztrans(sym('f(n+1)'))

(2)、Z反变换

f=iztrans(F):

F以z为独立自变量,f以n为自变量,若F以n为自变量,f以k为自变量

f=iztrans(F,k)

f=iztrans(F,w,k)

symsxzk

iztrans(z/(z-2))

iztrans(exp(x/z),z,k)

符号代数方程的求解

1、符号线性方程组的求解

X=linsolve(A,B):

求解AX=B的解

a=rand(4)

b=[1;2;3;4]

linsolve(a,b)

2、符号非线性方程组的求解

F(X)=0

X=fsolve(fun,X0):

以X0为初始矩阵来求解方程fun,fun接受输入并返回一个向量,使得F=fun(X)

%求解方程组

%3*x

(1)^2-x

(2)^2=0

%3*x

(1)*x

(2)^2-x

(1)^2-1=0

建立myfun2.m文件

functiony=myfun2(x)

y

(1)=3*x

(1)^2-x

(2)^2;

y

(2)=3*x

(1)*x

(2)^2-x

(1)^2-1;

运行代码

x=[0.80.4]

x=fsolve('myfun2',x)

3、一般符号代数方程组的求解

solve(‘eqn1’,’eqn2’,…,’eqnN’)

solve(‘eqn1’,’eqn2’,…,’eqnN’,’var1,var2,…,varN’)

solve(‘eqn1’,’eqn2’,…,’eqnN’,’var1’,’var2’,…,’varN’)

eqns是一些具体方程的符号表达式或字符串,而vars是一些未知的符号变量或未知额的字符串

solve('p*sin(x)=r')

[xy]=solve('x^2+x*y+y=3','x^2-4*x+3=0')

S=solve('x^2*y^2-2*x-1=0','x^2-y^2-1=0')%S是一个结构体

[uv]=solve('a*u^2+v^2=0','u-v=1')%a被作为参数求解关于u和v的方程组

S=solve('a*u^2+v^2=0','u-v=1','a,u')%v作为参数

[auv]=solve('a*u^2+v^2=0','u-v=1','a^2-5*a+6')

[xy]=solve('sin(x+y)-exp(x)*y=0','x^2-y=2')%系统无法给出符号解,只给出数值解

符号微分方程的求解

dsolve(‘eqn1’,’eqn2’,’eqn3’,…):

求符号解,初始条件,边界条件也可以算作eqns,默认输出函数的自变量为t,D表示对x一阶微分,D2表示对x二阶微分,以此类推

dsolve('Dx=-a*x')

x=dsolve('Dx=-a*x','x(0)=1','s')

dsolve('D2y=-a^2*y','y(0)=1,Dy(pi/a)=0')

图示化符号函数计算器

1、单变量符号函数计算器

使用funtool函数来调用图示化单变量符号函数计算器

(1)、输入框功能

f=显示代表函数f的符号表达式,按Enter显示图像(图形窗口1)

g=显示代表函数g的符号表达式,按Enter显示图像(图形窗口2)

x=显示用于函数f与g的绘制区间,按Enter改变图像

a=显示一个用于改变函数f的常量因子

(2)、控制按钮的功能

运算操作按钮的功能

df/dx:

函数f的导数

intf:

函数f的积分

simplef:

化简函数f

numf:

函数f的分子

denf:

函数f的分母

1/f:

函数f的倒数

finv:

函数f的反函数

f+a:

用f(x)+a代替函数f(x)

f-a:

用f(x)-a代替函数f(x)

f*a:

用f(x)*a代替函数f(x)

f/a:

用f(x)/a代替函数f(x)

f^a:

用f(x)^a代替函数f(x)

f(x+a):

用f(x+a)代替函数f(x)

f(x*a):

用f(x*a)代替函数f(x)

f+g:

用f(x)+g(x)代替函数f(x)

f-g:

用f(x)-g(x)代替函数f(x)

f*g:

用f(x)*g(x)代替函数f(x)

f/g:

用f(x)/g(x)代替函数f(x)

g=f:

f*g:

用f(x)代替函数g(x)

swap:

函数f(x)与g(x)互换

系统操作按钮的功能

Insert;将函数f(x)保存到函数内存列表中的最后

Cycle:

用内存函数列表中的第二项代替函数f(x)

Delete:

从内存函数列表中删除函数f(x)

Reset:

重新设计计算器为初始状态

Help:

显示在线的关于计算器的帮助

Demo:

运行该计算器的演示程序

Close:

关闭计算器的三个窗口

2、泰勒级数逼近计算器

使用taylortool函数来调用图示化泰勒级数逼近计算器

绘制函数f的前N阶泰勒级数

利用Maple的深层符号计算资源

MATLAB2010a已经不再支持maple内核

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1