昆明理工大学上机安排3符号计算Word格式.docx
《昆明理工大学上机安排3符号计算Word格式.docx》由会员分享,可在线阅读,更多相关《昆明理工大学上机安排3符号计算Word格式.docx(21页珍藏版)》请在冰点文库上搜索。
最接近的有理表示,MATLAB的缺省表示方法
2.对于字符串变量名argv,flagv可以取以下“限定”项:
positive'
“正实数”符号变量
real'
“实数”符号变量
unreal'
“非实数”符号变量
3.syms是sym函数的简化书写方式,各符号对象之间只能用空格分开。
2符号常量
用sym函数可以定义符号常量对象,包括符号标量对象和符号常量数组对象,定义符号常量对象的同时也可以指定数值常量的表示方法。
例符号常量的定义
>
a=[1/3,sqrt(5),pi+sqrt
(2)];
%定义数值数组
s1=sym([1/3,sqrt(5),pi+sqrt
(2)],'
);
%用十进制方式表示符号常量
s2=sym([1/3,sqrt(5),pi+sqrt
(2)]);
%用最接近的有理方式表示符号常量
s3=sym('
[1/3,sqrt(5),pi+sqrt
(2)]'
%绝对准确的符号数值表示,输入为字符串
3符号变量与符号表达式
1.定义符号变量和符号表达式
例符号变量和符号表达式的定义
x=sym('
x'
'
);
%定义实数符号变量x
symyreal;
%定义实数符号变量y
z=x+i*y;
%定义符号表达式对象z
conj(z)%符号变量求共轭复转置
f=z*conj(z);
%符号表达式对象
f=simple(f)%符号表达式对象化简
f=
x^2+y^2
例符号变量与符号矩阵
symsabc;
%定义符号变量a,b,c
A=[a,b,c;
b,c,a;
c,a,b];
%定义符号矩阵A
sum(A(:
1));
%求矩阵A第一列的元素的和
sum(A(1,:
))==sum(A(:
2))%符号对象的关系运算
det(A);
%矩阵求行列式
symsalphabeta;
%定义符号变量alpha和beta
A(1,3)=beta;
%矩阵元素赋值
A=subs(A,a,alpha)%符号表达式的替换操作,矩阵A中的a用alpha代替
以上例子可以看出:
元素是符号对象的矩阵叫做符号矩阵;
符号表达式是由以下部分组成的符号对象:
a.符号常量;
b.符号变量;
c.符号运算符;
d.专用函数。
4符号表达式中自变量的确定
在数学表达式或者数学函数中,一般都含有自变量。
为了便于进行数学运算,通常要显示指定表达式中的自变量,如果不指定自变量,MATLAB会根据上下文关系,识别表达式中默认的自变量(独立自由的符号变量)。
识别表达式中自变量的基本原则是:
按照字母表中靠近小写字母x的顺序识别,最靠近字母x的变量被第一个识别为自变量。
MATLAB还提供了自变量识别函数findsym。
findsym(exp)识别表达式exp中所有的自由符号变量
findsym(exp,n)识别表达式exp中最靠近x的n个独立自由变量
1.表达式可以是符号矩阵,此时变量识别是对整个矩阵进行的。
2.函数识别的是“独立的”“自由的”符号变量,符号常量或者非独立的符号变量无法被识别。
3.识别次序是按照靠近x的远近进行的,区分大小写,总认为大写字母距离x的距离大于所有小写字母。
例符号表达式中自变量的识别
symsabxXY;
%定义符号变量
k=sym(2.5);
z=sym('
c*sqrt(alpha)+y*sin(beta)'
%定义符号表达式对象(变量)z
exp=a*z*X+k*Y+b^x%定义符号表达式变量exp
exp=
a*(c*alpha^(1/2)+y*sin(beta))*X+5/2*Y+b^x
findsym(exp)%自动识别所有自由独立变量,k为常量,z为非独立
findsym(exp,3)%识别exp中前3个靠近x的独立自由变量
5符号数学函数
在MATLAB中,可以定义表示数学函数的符号对象,既能建立具有详细运算关系的函数,又能建立抽象数学函数。
定义符号数学函数有2种方法:
1.用符号表达式
2.用函数M文件(在函数M文件中用符号变量作为输入变量)
例用符号表达式定义符号数学函数
symsxyz%定义函数自变量
r=sqrt(x^2+y^2+z^2);
%定义函数r
t=atan(y/x);
%定义函数t
f=sin(x*y)/(x*y);
%定义函数f
例用函数M文件来定义符号数学函数,下列代码定义了函数sin(x)=sinc(x)/x。
创建M函数文件如下:
functionz=sinc(x)
%SINC符号函数
%sin(x)/x数学计算公式
%接受符号变量作为输入变量
ifisequal(x,sym(0))%如果自变量值为符号0,则函数值为1
z=1;
else
z=sin(x)/x;
end
例建立抽象的符号数学函数(可用help命令查看subs、limit函数的用法)
f=sym('
f(x)'
)%建立抽象函数f(x)
symsxh;
df=(subs(f,x,x+h)-f)/h%建立抽象函数df,表示f(x)的导数表达式
df=
(f(x+h)-f(x))/h
g=subs(df,'
sin'
)%建立sin(x)的导数函数的定义
g=
((sin)(x+h)-(sin)(x))/h
limit(g,h,0)%根据导数定义,求sin(x)的导数
ans=
cos(x)
二符号计算
符号计算有:
代数运算、函数运算、微积分运算、极限运算、级数求和、方程(组)求解等。
A代数运算
符号对象的基本代数运算
符号对象的基本代数运算和普通数值变量一样,可以使用算术运算符、关系运算符(仅能用==和!
=),其运算符的定义和数值运算相同。
例符号矩阵的基本代数运算,查看结果
symst;
G=[cos(t),sin(t);
-sin(t),cos(t)];
A=G*G;
%符号矩阵的乘法
A=simple(A);
%化简为最简表达式
I=G'
.*G;
%符号数组乘法
I=simple(I);
F=[cos(t),-sin(t);
sin(t),cos(t)];
(F+G)/2;
%符号矩阵加法和符号矩阵与标量的除法
B函数运算
数值计算使用的函数基本上也可以用于符号计算,包括三角函数(atan2除外)、指数函数、对数函数(log2、log10除外)、复数函数(angle除外)、线性代数函数和矩阵函数。
例符号矩阵的函数运算,运行下面语句查看结果(去掉分号)
H=hilb(3);
%生成3×
3的希尔伯特数值矩阵
H=sym(H);
%将数值矩阵转为符号常数矩阵
inv(H);
%符号矩阵求逆
det(H)%符号矩阵求行列式的值
symss
H(1,1)=s;
%将符号元素赋值为符号变量s,使矩阵变为非奇异矩阵
Z=det(H)%带有符号变量的符号矩阵求行列式的值
sol=solve(Z)%求行列式的根
H=subs(H,s,sol);
%将矩阵行列式的根代入符号矩阵,使矩阵变为奇异矩阵
det(H);
%奇异矩阵的行列式值
%奇异矩阵求逆
eig(H);
%符号矩阵的特征值
C符号表达式分解、展开与化简
MATLAB提供了符号表达式的因式分解、展开和化简函数。
collect(expr,v)合并符号表达式expr中符号对象v的同类项系数
expand(expr)对表达式expr进行多项式、三角函数、指数对数等函数展开
factor(expr)对符号表达式expr做因式分解
horner(expr)把多项式expr分解为嵌套形式
[n,d]=numden(expr)提取表达式最小分母公因子d和相应的分子多项式n
simplify(expr)用多种恒定变换对表达式expr进行综合化简
simple(expr)把expr化简为最简表达式
【说明】上述表达式expr可以是符号矩阵,此时函数对符号矩阵的每个元素进行相应操作。
例符号表达式的展开和分解
f=sym('
(x^3-6*x^2+10*x-5)+(x-1)'
%定义原始的符号表达式
fc=collect(f);
%符号表达式合并同类项
ff=factor(f);
%符号表达式因式分解
fh=horner(f);
%符号表达式的嵌套分解
fe=expand(fh);
%符号表达式的展开
factor(1025);
%正整数的质数分解,1025=5×
5×
41
例写出矩阵
各元素的分子多项式和分母多项式
symsx;
A=[1/4,1/(2*x-1)+1/(x+1);
2/(x^2-1),3*x+2];
[n,d]=numden(A);
%提取表达式最小分母公因子d和相应的分子多项式n
pretty(simplify(n./d));
例化简
解:
用simplify进行多次化简也得不到最简结果,用simple化简可以得到最简结果
f=(1+3/x+3/x^2+1/x^3)^(1/3);
sfy1=simplify(f);
sfy2=simplify(sfy1);
sp1=simple(f);
sp2=simple(sp1)
D符号表达式的置换操作
MATLAB提供了子表达式的置换函数。
通常在这几种情况下使用子表达式的置换函数:
第一,符号计算结果中多次出现同一个表达式,为了阅读方便,可以把这个表达式用符号变量来置换;
第二,可以用符号常量对象置换表达式中的自变量,实现表达式求值;
第三,通过置换某些表达式可以生成新的表达式。
1.自动置换函数
[RS,vn]=subexpr(S,vn)用符号变量vn置换S中的子表达式,并重写S为RS。
[RS,vn]=subexpr(S,'
vn'
)
例对一元三次方程
的符号解进行子表达式的置换。
t=solve('
a*x^3+b*x^2+c*x+d=0'
[r,s]=subexpr(t,'
s'
)
2.通用置换函数
RS=subs(S,old,new)用new置换S中old,生成RS
【说明】
(1)old是被替换的子表达式,可以是符号变量,也可以是字符串表达式。
(2)new是替换old的值,可以是符号常量、符号变量、符号表达式,也可以是数值。
(3)如果要替换多个子表达式,则old和new为细胞数组。
例通用置换函数。
symsax;
f=a*cos(x)+1;
f1=subs(f,'
cos(x)'
sym('
y'
));
%用符号变量替换
f2=subs(f,{a,x},{3,sym('
pi/4'
)})%用符号常量替换,
f3=subs(f,{a,x},{3,pi/4});
%用双精度数替换
f4=subs(f,{a,x},{0:
3,0:
pi/3:
pi});
%用双精度数组替换
f5=subs(f,x,sym('
exp(-t)'
))%用符号表达式替换
E符号函数的反函数
g=finverse(f,v)求指定自变量为v的函数f(v)的反函数g(v)
g=finverse(f)求函数f对缺省的自变量(由findsym确定)的反函数g
例求
的反函数。
f=(x^2+1)^(1/2);
g=finverse(f);
F符号函数的复合函数
fg=compose(f,g,x,y,z)对f(x)和g(y)求复合函数fg(z)=f(g(y))|y=z
fg=compose(f,g)对f(⋅)和g(⋅)求复合函数fg=(fg(⋅)),自变量由findsym确定
例求复合函数。
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)
G符号微分和雅可比矩阵
求导数、高阶导数、偏导数是常见的数学运算,MATLAB提供这方面的符号微分函数。
【调用格式】
df=diff(f,v,n)求
,即求函数f(v)对的n阶导数
R=jacobian(f,v)求多元向量函数f(v)的雅可比矩阵,即
例
求
和
symsatx;
f=[a,t^2;
t*sin(x),log(x)];
dfx=diff(f,x)%矩阵f对x的一阶导数,也可写为diff(f)
df2t=diff(f,t,2);
%矩阵f对t的二阶导数
dfxt=diff(diff(f,x),t)
,求其雅可比矩阵
symsxyz;
f=[x*y*z;
y;
x+z];
v=[x,y,z];
R=jacobian(f,v)
H函数极限
函数的极限是通过导数来定义的,limit函数用于求函数极限。
limit(f,x,a)求
limit(f,x,a,'
right'
)求
left'
例求极限运算。
limit(sin(x)/x,x,0);
limit(1/x,x,0,'
limit((sin(x+h)-sin(x))/h,h,0)%sin(x)导函数的定义
v=[(1+a/x)^x,exp(-x)];
limit(v,x,inf)
I符号积分
int函数用于求定积分、不定积分和多重积分的符号解。
S=int(f,v)求不定积分∫f(v)dv,符号计算结果不带积分常数
S=int(f,v,a,b)求定积分
rsums(f,ra,rb)用Riemann和求符号函数f(x)在[ra,rb]区间上的近似积分
1.当f为矩阵时,将对矩阵的每个元素做积分运算。
2.v缺省时,积分对findsym确认的变量进行。
3.积分上下限a和b可以是任何数值和表达式
4.rsums函数绘制求积分的曲线,根据用户的选择来确定最终的近似积分值
例计算
symsat;
f=[exp(t),t^4;
1,sin(a*t)];
int(f,t)
例求多重积分
V=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x*y),y,sqrt(x),x^2),x,1,2)
vpa(V)
J符号级数求和
symsum函数实现符号级数的求和运算。
s=symsum(f,v,a,b)求
,a和b为整数,b可以取无穷大
和
symstkx;
f1=[t,k^2];
f2=x^k/sym('
k!
simple(symsum(f1,t,0,t))
simple(symsum(f2,k,0,inf))
K符号代数方程组的解
代数方程包括线性、非线性和超越方程等,solve函数用于符号代数方程求解。
g=solve('
eq1'
eq2'
...,'
eqn'
var1'
var2'
varn'
g=solve(exp1,exp2,...,expn,var1,var2,...,varn)
1.'
是字符串表达式的方程,或者是字符串表达式,如果它们是不含等号的字符串表达式,则相当于方程'
eqi=0'
2.'
是用字符串表示的方程中的变量名
3.exp1,exp2,...,expn只能是符号表达式,不能是带有等号的表达式方程。
4.var1,var2,...,varn只能是符号变量。
5.返回值g是一个结构体数据,方程组的解用g.var1,g.var2,...,g.varn表示。
6.在无法求得解析解的时候,给出数值解。
例方程组
,分别求其关于y,z和关于u,v,w的解
s1=solve('
u*y+v*z^2+w=0'
'
y+z+v=0'
z'
%方程组关于的解,从结果来看方程有2组解:
s1=
y:
[2x1sym]
z:
y=s1.y;
z=s1.z;
%方程组关于u,v,w的解,2个方程3个变量,方程有无穷多组解,其中w为自由变量,
s2=solve('
u'
v'
w'
u=s2.u;
v=s2.v;
w=s2.w;
L符号微分方程的解
g=dsolve('
cond1'
cond2'
...,'
condn'
是微分方程,只能用字符串形式。
微分方程是函数必须的输入变量。
是初始条件,也只能用字符串形式。
3.'
定义了微分方程的独立变量名(微分方程解中的自变量名),只能用字符串形式。
默认的独立变量名为t。
4.微分方程字符串中,Dny表示y的n阶导数,Dy表示y的一阶导数。
5.返回值g是一个结构体变量,要引用其成员才能得到方程的解。
例求微分方程组
的解。
s=dsolve('
Dx=y,Dy=-x'
x=s.x
x=
-C1*cos(t)+C2*sin(t)
y=s.y
y=
C1*sin(t)+C2*cos(t)
例求微分方程
的解y(x),初始条件为y(0)=0,y
(1)=1
x*D2y-3*Dy=x^2'
y(0)=0,y
(1)=1'
s=
4/3*x^4-1/3*x^3
例求微分方程y”+y2=1的解,初始条件为y(0)=0
y=dsolve('
(Dy)^2+y^2=1'
y(0)=0'
sin(t)
-sin(t)
M积分变换
MATLAB的符号计算支持积分变换,对傅氏变换、拉氏变换和Z变换都提供了相应的符号计算函数。
1傅立叶变换及其反变换
Fw=fourier(ft,t,w)求时域函数ft的傅氏变换Fw
ft=ifourier(Fw,w,t)求频域函数Fw的傅立叶反变换ft
【说明】:
ft是以时间t为自变量的时域