xin第4章MATLAB符号计算pptConvertor.docx
《xin第4章MATLAB符号计算pptConvertor.docx》由会员分享,可在线阅读,更多相关《xin第4章MATLAB符号计算pptConvertor.docx(25页珍藏版)》请在冰豆网上搜索。
xin第4章MATLAB符号计算pptConvertor
第4章MATLAB符号计算
本章重点
符号运算的基本函数
符号微积分
符号方程求解
符号计算的特点:
1)符号计算定义在符号变量的基础上,符号表达式计算前必须定义符号变量。
2)符号计算是精确计算。
3)符号计算的计算速度较慢。
4)符号计算的运算符和基本数学函数与数值计算中的运算符和基本数学函数几乎完全相同。
4.1符号函数的运算
4.1.1符号变量和符号矩阵
MATLAB提供了两个建立符号对象的函数:
sym和syms,两个函数的用法不同。
(1)sym函数
格式:
符号量名=sym(‘表达式')
说明:
该函数可以建立一个符号变量,表达式可以是字符、字符串、数学表达式、字符表达式等。
(2)syms函数
函数sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数syms,一次可以定义多个符号变量。
格式:
syms符号变量名1符号变量名2…符号变量名n
说明:
一次创建多个符号变量
用这种格式定义符号变量时不要在变量名上加字符串分界符(‘’),变量间用空格而不要用逗号分隔。
符号变量在工作空间窗口数据类型名为sym
例:
>>a2=sym('matlab');
>>A=[123;456;789];
>>A=sym(A)
A=
[1,2,3]
[4,5,6]
[7,8,9]
B=sym('3*x^2+4*x+7')
B=
3*x^2+4*x+7
例:
建立符号变量z,使得z=x2+y2
symsxy
z=x^2+y^2
注意:
如果不定义符号变量x,y直接给z赋值的话,会出现以下提出信息
z=x^2+y^2
?
?
?
Undefinedfunctionorvariable'x‘
所以符号表达式计算前必须定义符号变量。
4.1.2常用函数
符号表达式的运算和普通数值运算的不同:
(1)运算结果都是符号表达式或符号矩阵
(2)符号计算占用时间和内容多
(3)计算结果最精确
1.符号表达式的算术运算
符号表达式的加、减、乘、除运算和数值运算一致,用运算符“+,-*,/“直接实现
例计算表达式x3-1和表示式2x3-x2+1的四则运算结果
symsx
s1=x^3-1;
s2=2*x^3-x^2+1;
>>s1+s2
ans=
3*x^3-x^2
>>s1-s2
ans=
-x^3-2+x^2
>>s1*s2
ans=
(x^3-1)*(2*x^3-x^2+1)
>>s1/s2
ans=
(x^3-1)/(2*x^3-x^2+1)
2.化简函数
MATLAB提供了符号表达式的因式分解与展开、合并、化简、通分等函数,函数的调用格式为:
collect(s,v):
对符号表达式s合并自变量v的同幂系数。
v为x时可以省略。
expand(s):
对符号表达式s进行展开。
factor(s):
对符号表达式s分解因式。
[n,d]=numden(s):
符号表达式s的分式通分。
提取符号表达式s的分子和分母,分别将它们存放在n与d中。
simple(s):
对表达式进行综合化简,并显示化简过程。
simplify(s):
符号表达式s进行化简。
horner(s):
符号表达式s的嵌套形式
3.替换函数
可以通过符号替换使表达式的输出形式化简,得到一个简单的表达式:
提供了两个替换函数:
(1)subexpr函数
调用格式:
[R,SYM]=subexpr(S,SYM)
用变量SYM的值代替符号表达式S中重复出现的字符串,R是返回替换后的结果。
eg4-11:
化简三次方程ax3+bx+1=0的符号解
t=solve(‘a*x^3+b*x+1=0’)
[r,s]=subexpr(t,’s’)
(2)subs函数
调用格式:
R=subs(S,old,new)
用新的符号变量new替换原来符号表达式S中的变量old,
注意:
当new是数值形式时,显示的结果虽然是数值,但它事实上是符号变量。
要强制的求值需要用vpa函数。
例4-12
symsx
s=(3*x^3+x^2-1)/(x^2+1);
r=subs(s,’x’,’1’)
vpa(r)
注意小数点精确的位数,小数点后31位
补充:
digits和vpa函数
digits(n)
功能:
设定计算精度和改变默认的有效位数函数。
其中n为所期望的有效位数,默认值为32位。
vpa的格式为:
S=vpa(s,n)
功能:
将s表示为n位有效位数的符号对象。
n省略时要么为30位有效数,要么是digits函数事先设置好的位数。
a=sym('2*sqrt(5)+pi')%创建符号对象
digits%显示默认的有效位数
vpa(a)%用默认的位数计算并显示
vpa(a,15)%按指定的精度计算并显示
digits(15)%改变默认的有效位数
vpa(a)%按digits指定的精度计算并显示
4.2符号微积分
4.2.1符号极限
limit函数的调用格式为:
(1)limit(f,x,a):
求符号函数f(x)的极限值。
即计算当变量x趋近于常数a时,f(x)函数的极限值。
(2)limit(f,a):
求符号函数f(x)的极限值。
由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。
(3)limit(f):
求符号函数f(x)的极限值。
符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况。
(4)limit(f,x,a,'right'):
求符号函数f的极限值。
'right'表示变量x从右边趋近于a。
(5)limit(f,x,a,‘left’):
求符号函数f的极限值。
‘left’表示变量x从左边趋近于a。
例4-1求下列极限。
极限1:
symsamx;
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);
limit(f,x,a)
ans=
(1/2*a*exp(sin(a))+1/2*a-exp(tan(a))+1)/a
极限2:
symsxt;
limit((1+2*t/x)^(3*x),x,inf)
ans=
exp(6*t)
极限3:
symsx;
f=x*(sqrt(x^2+1)-x);
limit(f,x,inf,'left')
ans=
1/2
极限4:
symsx;
f=(sqrt(x)-sqrt
(2)-sqrt(x-2))/sqrt(x*x-4);
limit(f,x,2,'right')
ans=
-1/2
4.2.2符号导数
diff函数用于对符号表达式求导数。
该函数的一般调用格式为:
diff(s):
没有指定变量和导数阶数,则系统默认变量对符号表达式s求一阶导数。
diff(s,'v'):
以v为自变量,对符号表达式s求一阶导数。
diff(s,n):
按默认变量对符号表达式s求n阶导数,n为正整数。
diff(s,'v',n):
以v为自变量,对符号表达式s求n阶导数。
例求下列函数的导数。
xx,1/x,x^3+1/y
4.2.3符号积分
符号积分由函数int来实现。
该函数的一般调用格式为:
int(s):
没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分。
int(s,v):
以v为自变量,对被积函数或符号表达式s求不定积分。
int(s,v,a,b):
求定积分运算。
a,b分别表示定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。
当a,b中有一个是inf时,函数返回一个广义积分。
当a,b中有一个符号表达式时,函数返回一个符号函数。
例求下列积分。
4.2.4积分变换
积分变换就是通过积分运算把一个函数f变成另一个函数
F;积分变换的意义是换一个角度来认识函数。
F(t)=∫f(x)K(x,t)dx
常见的积分变换有傅立叶变换、拉普拉斯变换和Z变换。
1.傅立叶(Fourier)变换
在MATLAB中,进行傅立叶变换的函数是:
fourier(f,x,t):
求函数f(x)的傅立叶像函数F(t)。
ifourier(F,t,x):
求傅立叶像函数F(t)的原函数f(x)。
2.拉普拉斯(Laplace)变换
在MATLAB中,进行拉普拉斯变换的函数是:
laplace(fx,x,t):
求函数f(x)的拉普拉斯像函数F(t)。
ilaplace(Fw,t,x):
求拉普拉斯像函数F(t)的原函数f(x)。
例计算y=x3的拉普拉斯变换及其逆变换。
3.Z变换
当函数f(x)呈现为一个离散的数列f(n)时,对数列f(n)进行z变换的MATLAB函数是:
ztrans(fn,n,z):
求fn的Z变换像函数F(z)。
iztrans(Fz,z,n):
求Fz的z变换原函数f(n)。
例求数列f=e-2x的Z变换及其逆变换。
4.3符号方程求解
4.3.1符号代数方程求解
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:
solve(s):
求解符号表达式s的代数方程,求解变量为默认变量。
solve(s,v):
求解符号表达式s的代数方程,求解变量为v。
solve(s1,s2,…,sn,v1,v2,…,vn):
求解符号表达式s1,s2,…,sn组成的代数方程组,求解变量分别v1,v2,…,vn。
例
symsxyz
s1=10*x+3*y+z-14;
s2=2*x-10*y+3*z+5;
s3=x+3*y+10*z-14;
[x,y,z]=solve(s1,s2,s3)
a=solve(s1,s2,s3)
也可以写成
solve(‘10*x+3*y+z-14’,
’2*x-10*y+3*z+5’,
’x+3*y+10*z-14’)或者
[x,y,z]=solve('10*x+3*y+z=14',
'2*x-10*y+3*z=-5',
‘x+3*y+10*z=14’)的形式。
4.3.2符号常微分方程求解
在MATLAB中,用大写字母D表示导数。
例如,Dy表示y',D2y表示y'',Dy(0)=5表示y'(0)=5。
D3y+D2y+Dy-x+5=0表示微分方程y'''+y''+y'-x+5=0。
符号常微分方程求解可以通过函数dsolve来实现,其调用格式为:
dsolve(e,c,v)
该函数求解常微分方程e在初值条件c下的特解。
参数v描述方程中的自变量,省略时按缺省原则处理,若没有给出初值条件c,则求方程的通解。
dsolve在求常微分方程组时的调用格式为:
dsolve(e1,e2,…,en,c1,…,cn,v1,…,vn)
该函数求解常微分方程组e1,…,en在初值条件c1,…,cn下的特解,若不给出初值条件,则求方程组的通解,v1,…,vn给出求解变量。
y=dsolve(‘Dy=2*x*y^2’,’x’)
y=-1/(x^2-C1)
y=dsolve(‘Dy=2*x*y^2’,’y(0)=1’,’x’)
y=-1/(x^2-1)
4.4级数
4.4.1级数符号求和
求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:
symsum(s,v,n,m)
其中s表示一个级数的通项,是一个符号表达式。
v是求和变量,v省略时使用系统的默认变量。
n和m是求和的开始项和末项。
4.4.2函数的泰勒级数
MATLAB提供了taylor函数将函数展开为幂级数,其调用格式为:
taylor(f,v,n,a)
该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。
v的缺省值与diff函数相同。
参数a指定将函数f在自变量v=a处展开,a的缺省值是0。
第5章MATLAB绘图
5.1图形窗口以其操作
1.图形窗口操作命令
figure创建新的图形图像窗口
figure(gcf)显示当前图形窗口
gcf/shg显示当前图形窗口
clf/clg清除当前图形窗口
clc清除命令窗口
home光标到命令窗口的左上角
holdon保持当前窗口
holdoff释放当前图形窗口
subplot(m,n,p)或subplot(mnp)将图形窗口分成
m*n个窗口,p指定第一个窗口(从左到右,从上到下)
例题:
x=0:
0.02:
2*pi;
plot(x,sin(x))
holdon
plot(x,cos(x),’r’)
例题
subplot(223)
plot(x,cos(x),'r')
2.坐标轴、刻度和图形窗口缩放的操作
axis([xminxmaxyminymax])
axisequal:
纵、横坐标轴采用等长刻度。
axissquare:
产生正方形坐标系(缺省为矩形)。
axisauto:
使用缺省设置。
axisoff:
取消坐标轴。
axison:
显示坐标轴
boxon是否四周都设定坐标轴
boxoff
xlim([xminxmax])设定x轴的最大、最小值
ylim([yminymax])设定y轴的最大、最小值
gridon是否绘制图形窗口的网格
gridoff
grid在两者之间切换
点型线型和颜色
绘图函数的常用的颜色含义
类型符号
蓝色(默认)b(Blue)
黄色y(Yellow)
品红色(紫色)m(Magenta)
青色c(Cyan)
红色r(Red)
绿色g(Green)
白色w(White)
黑色k(Black)
绘图函数的常用的线形含义
类型符号
实线(默认)-
点线:
点划线-.
虚线--
绘图函数的常用的数据点形含义
类型符号
实点标记(默认).
圆圈标记o
叉号形×x
星号标记**
钻石形标记◇d
向下的三角形标记v
向上的三角形标记^
向左的三角形标记<
向右的三角形标记>
五角星标记☆p
5.2二维绘图
Matlab7.0可以绘制二维数据曲线、函数曲线图、对数坐标图、数据散点图、条形图、饼图、极坐标图等
1.函数曲线图
fplot函数实现
flot(‘fun’,’lim’,tol,n,s)
fun函数名,多个函数时‘[fun1,fun2,fun3...]’
lim给定的绘图范围比如[0,100]
tol给定绘图的相对误差
s可以是线性、点型和颜色
n表示至少用n+1个点在lim给定的范围内绘制fun给定的函数的曲线
fun,lim必不可少
tol,n,s可选参数
实例1
再同一窗口绘制y=sinx,y=cosx,y=sqrt(x)-1在[0,2pi]上的图像
fplot(‘[sin(x),cos(x),sqrt(x)-1]’,[0,2*pi])
fplot('[sin(x),cos(x),sqrt(x)-1]',[0,2*pi],'k:
',200);
[x,y]=fplot(‘fun’,lim)
不绘制图形,只将fplot的计算结果保存到变量x和y中
2.数据曲线图
Plot:
直角坐标系的二维图形的绘制函数
三种调用格式:
1)plot(y,’s’)
功能:
当y是向量时,元素的序号作为x坐标,元素值作为y坐标,对应绘制线性直角坐标系的二维图形。
当y是矩阵时,元素的所在列号作为x坐标,元素值作为y坐标,分别对应绘制线性直角坐标系的二维图形,曲线条数等于输入参数矩阵的列数。
2)plot(x,y,’s’)
功能:
(1)x和y均为向量,要求两向量的长度相同一致。
分别作为x坐标和y坐标数据。
(2)x为向量,y为矩阵时,绘制y的行或列对于x的图形(其中行或列的选择取决于x,y的维数),若y为方阵,或y的列向量长度与x向量的长度致,则绘制出y矩阵的各列向量相对于x的一组二维图形;若y矩阵的行向量长度与x向量的长度一致,则绘制出y矩阵的各行向量相对于x的一组二维图形;
(3)x为矩阵,y为向量,类似
(2)
(4)x,y同维的矩阵,则绘制出y列向量相对于x的列向量之间的一组二维图形
3)plot(x1,y1,’s1’,x2,y2,’s2’…,xn,yn,’sn’)
功能:
绘制(xi,yi,’si’)对应的二维图形。
S是表示所绘图形的线形、点型和颜色的字符串。
函数调用格式中的S是线形、点型和颜色的组合字符,默认值为b-.(蓝色点划线标记)。
例在0≤x≤2p区间内,绘制曲线
y=2e-0.5xcos(4πx)
程序如下:
x=0:
pi/100:
2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y)
或者:
fplot('2*exp(-0.5*x)*cos(4*pi*x)',[0,2*pi]);
例绘制行向量(18654)的图形。
4)h=plot(...)
求函数plot绘制曲线的句柄属性值
5)plotyy函数
Plotyy:
用不同标度在同一个坐标内绘制曲线
plotyy(x1,y1,x2,y2)
分别绘制(x1,y1)和(x2,y2)的图形。
其中x1和y1、x2和y2为对应的向量或矩阵。
例用不同标度在同一坐标内绘制曲线
y1=0.2e-0.5xcos(4πx)和y2=2e-0.5xcos(πx)。
程序如下:
x=0:
pi/100:
2*pi;
y1=0.2*exp(-0.5*x).*cos(4*pi*x);
y2=2*exp(-0.5*x).*cos(pi*x);
plotyy(x,y1,x,y2);
3.极坐标系绘图
Polar:
极坐标系绘图函数
polar函数用来绘制极坐标图,其调用格式为:
polar(theta,rho,选项)
其中theta为极坐标相角,rho为极坐标矢径,选项的内容与plot函数相似。
例绘制r=sin(t)cos(t)的极坐标图,并标记数据点。
程序如下:
t=0:
pi/50:
2*pi;
r=sin(t).*cos(t);
polar(t,r,'-*');。
例画出心形线的
图像。
4.条形图
条形图用来表示一些数据的对比情况
bar(x,参数)垂直方向
barh(x,参数)水平方向
x为向量:
以x序号为横坐标,x的各个元素为纵坐标
x为矩阵:
参数‘grouped’,每行分成一组
‘stacked’,每一行累加,再绘制
width一组内条形的间距默认0.8
Y=round(rand(5,3)*10);
subplot(2,2,1)
bar(Y,'group')
title'Group'
subplot(2,2,2)
bar(Y,'stack')
title'Stack'
subplot(2,2,3)
barh(Y,'stack')
title'Stack'
subplot(2,2,4)
bar(Y,1.5)
title'Width=1.5'
5.饼图
饼图常用来表示各种因素所占的比例
pie(x,参数)
x为向量:
绘制x中每一个元素占全部向量总和的百分比饼图。
x为矩阵:
占全部矩阵元素的百分比
参数:
1:
表示分离,0:
表示不分离,维数与x相同
例x=[123;456;789]
explode=[100;100;011]
pie(x,explode)
6.柱形图
概率分布图用于研究随机系统的数据分布情况
hist(y,x)绘制y在以x为中心的区间中分布个数的条形图
>x=[11234]
>>y=-10:
1:
5;
>>hist(x,y)
5.3三维绘图
1.三维网格图与曲面图
在绘制三维网格图与曲面图时,往往先将要绘制图形的定义区域分成若干个网格,然后计算这些网格节点上的二元函数值。
最后才能使用mesh或者surf绘制相应的图形。
网格生成函数:
meshgrid
meshgrid:
网格坐标矩阵的生成函数
[X,Y]=meshgrid(x,y)
功能:
由向量x和y产生在x-y平面的各网格点坐标矩阵(X,Y)。
其中向量x为1×n的行向量,向量y为1×m的行向量,产生的网格点坐标矩阵(X,Y)的元素为
坐标对(Xij,Yij),i=1,...,m,j=1,...,n。
注意向量x和y相同时,meshgrid函数也可以写成[X,Y]=meshgrid(x)。
例如语句
x=[1234];
y=[567];
[U,V]=meshgrid(x,y)
功能:
将x(1×n)向量和y(1×m)向量转换为(m×n)的矩阵。
Z=peaks(n)生成一个n阶高斯分布的方阵
[X,Y,Z]=peaks(n)生成一个n阶高斯分布的方阵Z,并给出相应的X,Y的矩阵。
三维网格图
mesh:
三维网格图的绘制函数
mesh(z)
mesh(x,y,z)mesh(x,y,z,c)其中c为的同维颜色矩阵。
功能:
绘制三维网格图。
当只有参数z时,以z矩阵的行下标作为x坐标轴,把z的列下标当作y坐标轴;x和y分别为x和y坐标轴的自变量。
当有x,y和z参数时,绘制出由坐标(xij,yij,zij)确定的三维网格图形。
meshc(x,y,z)带等高线的网格图
meshz(x,y,z)带底座的网格图
surf(x,y,z)绘制三维曲面
surfc(x,y,z)带等高线的三维曲面图
例
在x:
[-4,4],y:
[-4,4]区域上绘制z=x2+y2的三维网格图
[x,y]=meshgrid(-4:
0.125:
4);
Z=x.^2+y.^2;
Mesh(x,y,z)
[X,Y]=meshgrid(-3:
.125:
3);
Z=peaks(X,Y);
meshc(X,Y,Z);
axis([-33-33-105])
[X,Y]=meshgrid(-3:
.125:
3);
Z=peaks(X,Y);
meshz(X,Y,Z)
[X,Y,Z]=peaks(30);
surfc(X,Y,Z)
colormaphsv//设置曲面显示的颜色
axis([-33-33-105])
2.三维曲线图229页
plot3:
三维曲线图形函数
plot3(x,y,z,'s')
功能:
绘制三维曲线。
其中当x,y和z是相同的向量时,则绘制以x,y和z元素为坐标的三维曲线;当x,y和z是同型矩阵时,则绘制以x,y和z元素为坐标的三维曲线,且曲线的条数等于矩阵的列数。
s是指定绘制三维曲线的线型、数据点形和颜色的字符串,省略s时,将自动选择线型、数据点形和颜色。
线型、