MATLAB符号运算.docx
- 文档编号:8503760
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:17
- 大小:166.33KB
MATLAB符号运算.docx
《MATLAB符号运算.docx》由会员分享,可在线阅读,更多相关《MATLAB符号运算.docx(17页珍藏版)》请在冰豆网上搜索。
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内核
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 符号 运算