MATLAB第6章符号运算功能1jsp.docx
- 文档编号:7845492
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:32.45KB
MATLAB第6章符号运算功能1jsp.docx
《MATLAB第6章符号运算功能1jsp.docx》由会员分享,可在线阅读,更多相关《MATLAB第6章符号运算功能1jsp.docx(16页珍藏版)》请在冰豆网上搜索。
MATLAB第6章符号运算功能1jsp
第6章符号运算功能
6.1符号表达式的生成
符号表达式包括函数和符号方程,两者的区别前者不包括等号,后者必须带等号。
●创建符号函数
f='log(x)'
●创建符号方程
equation='a*x^2+b*x+c'
●创建符号微分方程
diffeq='Dy-y=x'
●sym命令创建
f=sym('sin(x)')
f=sym('sin(x)^2=0')
●syms命令
symsx%定义符号变量
f=sin(x)+cos(x)
6.2符号和数值之间的转换
●digits函数
digits(D)函数设置为有效数字个数为D的近似精度
●vpa函数
格式1:
r=vpa(S)符号表达式S在digits函数设置下的精度的数值解。
格式2:
r=vpa(S,D)符号表达式S在digits(D)函数设置下的精度的数值解。
S=solve('3*x^2-exp(x)')
解为:
[-2*lambertw(-1/6*3^(1/2))]
[-2*lambertw(-1,-1/6*3^(1/2))]
[-2*lambertw(1/6*3^(1/2))]
执行:
vpa(S)
结果为:
(数值解)
[.91000767248870906066733829676944]
[3.7330790286328142006199640298434]
[-.46896226763694861469867243243408]
执行digits(4)
vpa(S)
结果为:
(数值解,精度为4位)
[.9100]
[3.734]
[-.4690]
●numeric
将不含自由变量的符号表达式转换为数值形式。
6.3符号函数的运算
一、复合函数
compose(f,g):
返回当f=f(x)和g=g(y)时的符合函数f(g(y)),其中x和y均为符号变量。
compose(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)%用sin(y)代替x,结果为1/(1+sin(y)^2)
compose(f,g,t)%用sin(y)代替x,t代替y,结果为1/(1+sin(t)^2)
compose(f,g,x,z)%返回复合函数f(g(z)),结果为sin(z)^t
compose(h,g,t,z)%结果为x^sin(z)
compose(h,p,x,y,z)%结果为exp(-z/u)^t
compose(h,p,t,u,z)%结果为x^exp(-y/z)
二、反函数
finverse(f)
finverse(f,v)
举例:
symsxy
f=x^2+y
finverse(f,y)结果为:
-x^2+y
6.4符号矩阵的创立
1.使用sym函数直接创建
2.用创建子阵的方法创建符号矩阵
3.将数值矩阵转化为符号矩阵
6.6符号矩阵的运算
一、基本运算
1.符号矩阵的四则运算(加、减、乘、除)
2.符号矩阵的行列式运算
3.符号矩阵的逆
4.符号矩阵的秩
5.符号矩阵的指数运算
二、矩阵分解
1.特征值函数
[x,y]=eig(b)
2.奇异值分解函数
svd(b)
3.约当标准型
符号矩阵的约当标准型由函数jordan计算得到。
4.三角抽取函数
diag:
对角线
tril:
上三角
triu:
下三角
5.符号矩阵的列空间
符号矩阵的列空间由函数colspace计算得到。
6.符号矩阵的零空间
符号矩阵的零空间由函数null计算得到。
三、符号矩阵的简化
1.因式分解
fact(S)
symsx
f=x^9-1
factor(f)%结果为:
(x-1)*(x^2+x+1)*(x^6+x^3+1)
2.符号矩阵的展开
expand(S)
举例:
expand((x+1)^3)得到:
x^3+3*x^2+3*x+1
3.同类式合并
collect(S,v)将符号矩阵S中的各元素的V的同幂项系数合并。
collect(S)将符号矩阵S中的各元素的默认变量进行同类项合并。
举例:
collect(x^2*y+y*x-x^2-2*x)%合并x的同类项,得到:
(y-1)*x^2+(y-2)*x
4.符号简化
simple(x)
simplify(x)
5.分式通分:
numden求解符号表达式的分子和分母,格式:
〔N,D〕=numden(A)把A的各元素转换为分子和分母都是整数的最佳多项式型
6.“秦九卲型”重写
horner(P)将多项式转换为嵌套形式的表达式
四、符号极限、微分、积分与差分
1.符号极限
limit(F,x,a):
计算符号表达式F在x→a条件下的极限值。
limit(F,a):
计算符号表达式中的独立变量趋向于a的极限值。
limit(F)计算在a=0时的极限。
limit(F,x,a,’right’):
计算符号表达式F在x→a+时的极限值。
limit(F,x,a,’left’):
计算符号表达式F在x→a-时的极限值。
举例:
symsxath
limit(sin(x)/x)
结果为:
ans=1
limit(sin(x)/x,a)
结果为:
ans=sin(a)/a
limit(cos(x)/x,a)
结果为:
ans=cos(a)/a
limit(sin(x)/x,x,0,'left')
结果为:
ans=1
limit(sin(x)/x,x,0,'right')
结果为:
ans=1
2.符号积分int(x)
(1)不定积分
在MATLAB中,求不定积分的函数是int,其调用格式为:
int(f,x)
int函数求函数f对变量x的不定积分。
参数x可以缺省,缺省原则与diff函数相同。
int(s):
int(s,v):
计算符号表达式S对符号自变量v的不定积分。
V是一数量符号量。
举例1:
求不定积分
int(sin(x)/x,a)
举例2求不定积分
int(cos(2*x)*cos(3*x))
ans=1/2*sin(x)+1/10*sin(5*x)
(2)符号函数的定积分
定积分在实际工作中有广泛的应用。
在MATLAB中,定积分的计算使用函数:
int(f,x,a,b)
int(s,a,b):
计算符号表达式S对默认符号变量从a到b的定积分。
A和b为双精度或符号数量。
int(s,v,a,b):
计算符号表达式对变量v从a到b的定积分。
举例1:
命令如下:
x=sym('x');t=sym('t');
int(abs(1-x),1,2)%求定积分
(1)
f=1/(1+x^2);
int(f,-inf,inf)%求定积分
(2)
int(4*t*x,x,2,sin(t))%求定积分(3)
f=x^3/(x-1)^100;
I=int(f,2,3)%用符号积分的方法求定积分(4)
double(I)%将上述符号结果转换为数值
例2求定积分
eval(int(x^2*log(x),1,exp
(1)))
使用函数trapz
x=1:
0.01:
exp
(1);
y=x.^2.*log(x);
trapz(x,y)
ans=4.5137
例3求二重积分
使用符号积分
symsxy;
f=y^2/x^2;
int(int(f,x,1/2,2),y,1,2)
结果:
ans=7/2
使用数值计算
f='(y.^2)./(x.^2)';
dblquad(f,1/2,2,1,2)
结果:
ans=3.5000
3.符号微分和差分diff
微分和差分函数
◆diff(s)对符号表达式S求自变量的微分
◆diff(s,’v’)或diff(s,sym(’v’))对以V为自变量的符号S求微分
◆diff(s,n)n为正整数,对函数表达式求n阶微分
◆diff(s,’v’,n)或diff(s,sym(’v’),n)对以V为自变量的符号S求n阶微分
举例1
symsabtxyz;
f=sqrt(1+exp(x));
diff(f)%求
(1)。
未指定求导变量和阶数,按缺省规则处理
f=x*cos(x);
diff(f,x,2)%求
(2)。
求f对x的二阶导数
diff(f,x,3)%求
(2)。
求f对x的三阶导数
f1=a*cos(t);f2=b*sin(t);
diff(f2)/diff(f1)%求(3)。
按参数方程求导公式求y对x的导数
(diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2))/(diff(f1))^3%求(3)。
求y对x的二阶导数
f=x*exp(y)/y^2;
diff(f,x)%求(4)。
z对x的偏导数
diff(f,y)%求(4)。
z对y的偏导数
f=x^2+y^2+z^2-a^2;
zx=-diff(f,x)/diff(f,z)%求(5)。
按隐函数求导公式求z对x的偏导数
zy=-diff(f,y)/diff(f,z)%求(5)。
按隐函数求导公式求z对y的偏导数
举例2:
在曲线y=x3+3x-2上哪一点的切线与直线y=4x-1平行。
命令如下:
x=sym('x');
y=x^3+3*x-2;%定义曲线函数
f=diff(y);%对曲线求导数
g=f-4;
solve(g)%求方程f-4=0的根,即求曲线何处的导数为4
6.7符号代数方程求解
1、线性代数方程式的符号解法
linsolve可得到方程组的精确解,得到的解析解可由函数vpa转换成浮点近似数值。
x=linsolve(a,b)只给出特解
例1:
对数值方程组用符号函数求解
a=sym([10-10;-110-2;0-210])
b=sym([9;7;6])
linsolve(a,b)
[473/476]
[91/96]
[376/476]
vpa(ans)
例2:
求给定线性方程组的解
a=sym('[1,1/2,1/3;311;121]')
b=sym('[1,2;1/3,1;1,1/7]')
linsolve(a,b)
例3:
求欠定方程组的解
a=sym('[11/21/3;311]')
b=sym('[1;1]')
x=linsolve(a,b)
例4:
求符号特征多项式的根
a=sym('[1,2,1/3;060;70a]')
ca=poly(a)
x^3-x^2*a-6*x^2+6*x*a+8/3*x-6*a+36/3
ra=solve(ca)
ra=
[6]
[1/2*a+1/2+1/6*(9*a^2-18*a+93)^(1/2)]
[1/2*a+1/2-1/6*(9*a^2-18*a+93)^(1/2)]
例6:
求三元非线性方程组的解
s1='x^2+sqrt
(2)*x+1=0'
s2='x+3*z=4'
s3='y*z=-1'
[x,y,z]=solve(s1,s2,s3)
例6:
求解超越方程组
[x,y]=solve('x^x=1/7','x/y=3')
得到:
x=-log(7)/lambertw(-log(7))
y=-1/3*log(7)/lambertw(-log(7))
例7:
求线性方程组AX=b的解。
解方程组
(1)的命令如下:
A=[34,8,4;3,34,3;3,6,8];
b=[4;6;2];
X=linsolve(A,b)%调用linsolve函数求
(1)的解
A\b%用另一种方法求
(1)的解
解方程组
(2)的命令如下:
symsa11a12a13a21a22a23a31a32a33b1b2b3;
A=[a11,a12,a13;a21,a22,a23;a31,a32,a33];
b=[b1;b2;b3];
X=linsolve(A,b)%调用linsolve函数求
(2)的解
XX=A\b%用左除运算求
(2)的解
2、非线性代数方程式的符号解法
(1)求解非线性方程(组)的函数是solve,调用格式为:
solve('eqn1','eqn2',…,'eqnN','var1,var2,…,varN')
举例1:
解方程。
命令如下:
x=solve('1/(x+2)+4*x/(x^2-4)=1+2/(x-2)','x')%解方程
(1)
f=sym('x-(x^3-4*x-7)^(1/3)=1');
x=solve(f)%解方程
(2)
x=solve('2*sin(3*x-pi/4)=1')%解方程(3)
x=solve('x+x*exp(x)-10','x')%解方程(4)。
仅标出方程的左端
格式2x=fsolve(‘fun’,x0)
例2:
x1-0.7sinx1-0.2cosx2=0
x2-0.7cosx1+0.2cosx2=0
functiony=fc(x)
y
(1)=x
(1)-0.7*Sin(x
(1))-0.2*Cos(x
(2));
y
(2)=x
(2)-0.7*Sin(x
(2))-0.2*Cos(x
(2));
y=[y
(1)y
(2)];
在命令窗口中输入:
x0=[0.50.5]
fsolve(‘fun’,x0)
6.8符号微分方程求解
MATLAB的符号运算工具箱中提供了功能强大的求解常微分方程的函数dsolve。
该函数的调用格式为:
dsolve('eqn1','condition','var')
该函数求解微分方程eqn1在初值条件condition下的特解。
参数var描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件condition,则求方程的通解。
dsolve在求微分方程组时的调用格式为:
dsolve('eqn1','eqn2',…,'eqnN','condition1',…,'conditionN','var1',…,'varN')
函数求解微分方程组eqn1、…、eqnN在初值条件conditoion1、…、conditionN下的解,若不给出初值条件,则求方程组的通解,var1、…、varN给出求解变量。
或者可以表达为:
[y1,y2,….]=dsolve(a1,a2,…,a12)
说明:
(1)a1,a2,…,a12为输入变量,输入变量包括三部分内容:
微分方程、初始条件和指定独立变量,其中微分方程是必不可少的输入内容,后两个内容视具体需要而定。
(2)关于指定独立变量的规定:
若指定独立变量,则总是由全部输入变量a1,a2,…,a12中的最后一个变量定义。
若不对独立变量加以专门的定义,则默认为小写的英文字母x或t为独立变量名。
(3)微分方程的记述规定:
当y是因变量,用Dny表示“y的n阶导数”,如Dy表示“y的1阶导数”,D2表示“y的2导数”,默认的变量为x或t。
(4)关于初始条件的规定:
初始条件要写成y(a)=b,Dy(c)=d等。
(6)输出变量可有可无
(7)输入变量个数不超过12个。
3.常微分方程求解
举例1:
求通解
[x,y]=dsolve('Dx=y,Dy=-x')
x=cos(t)*C1+sin(t)*C2
y=-sin(t)*C1+cos(t)*C2
其中:
t是默认的独立变量;C1和C2为任意常数
y=dsolve('Dy-(x^2+y^2)/x^2/2','x')%解
(1)。
方程的右端为0时可以不写
y=dsolve('Dy*x^2+2*x*y-exp(x)','x')%解
(2)
y=dsolve('Dy-x/y/sqrt(1-x^2)','x')%解(3)
举例2:
求特解
[f,g]=dsolve('Df=3*f+4*g,Dg=-4*f+3*g','f(0)=0,g(0)=1')
得到:
f=exp(3*t)*sin(4*t)
g=exp(3*t)*cos(4*t)
y=dsolve('Dy=2*x*y^2','y(0)=1','x')
y=dsolve('Dy-x^2/(1+y^2)','y
(2)=1','x')
举例3:
指定变量
y=dsolve('D3y=-y','y(0)=1,Dy(0)=0,D2y(0)=0','t')
得到:
y=1/3*exp(-t)+2/3*exp(1/2*t)*cos(1/2*3^(1/2)*t)
举例4:
计算初值问题:
dsolve('Dy=x+y','y(0)=1','x')
结果:
ans=-x-1+2*exp(x)
举例5:
常微分方程组求解
命令如下:
[x,y]=dsolve('Dx=4*x-2*y','Dy=2*x-y','t')%解方程组
(1)
[x,y]=dsolve('D2x-y','D2y+x','t')%解方程组
(2)
6.9级数展开
1、泰勒级数
MATLAB中提供了将函数展开为幂级数的函数taylor
格式1:
taylor(f),
taylor(f,n)返回n-1次幂多项式
taylor(f,a)返回a点附近的幂多项式近似值
taylor(f,x)使用独立变量代替函数findsym(f)
例1:
求函数的泰勒展开式,并计算该函数在x=3.42时的近似值。
symsx;
taylor(sin(x)/x,x,10)
ans=
1-1/6*x^2+1/120*x^4-1/5040*x^6+1/362880*x^8
x=3.42;
eval(ans)
ans=
-0.0753
调用格式2:
taylor(f,v,n,a)
举例2:
求函数在指定点的泰勒展开式。
命令如下:
x=sym('x');
f1=(1+x+x^2)/(1-x+x^2);
f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3);
taylor(f1,x,5)%求
(1)。
展开到x的4次幂时,应选择n=5
taylor(f2,6)%求
(2)。
举例3:
将多项式表示成x+1的幂的多项式。
命令如下:
x=sym('x');
p=1+3*x+5*x^2-2*x^3;
f=taylor(p,x,-1,4)
举例4:
应用泰勒公式近似计算。
命令如下:
x=sym('x');
f=(1-x)^(1/12);%定义函数,4000^(1/12)=2f(96/2^12)
g=taylor(f,4)%求f的泰勒展开式g,有4000^(1/12)≈2g(96/2^12)
b=96/2^12;
a=1-b/12-11/288*b^2-253/10368*b^3%计算g(b)
2*a%求4000^(1/12)的结果
4000^(1/12)%用MATLAB的乘方运算直接计算
2、傅立叶级数
MATLAB5.x版中,尚未提供求函数傅立叶级数的内部函数。
下面提供一个简化的求任意函数的傅立叶级数的函数文件。
functionmfourier=mfourier(f,n)
symsxabc;
mfourier=int(f,-pi,pi)/2;%计算a0
fori=1:
n
a(i)=int(f*cos(i*x),-pi,pi);
b(i)=int(f*sin(i*x),-pi,pi);
mfourier=mfourier+a(i)*cos(i*x)+b(i)*sin(i*x);
end
return
调用该函数时,需给出被展开的符号函数f和展开项数n,不可缺省。
应用举例:
在[-π,π]区间展开函数为傅立叶级数。
命令如下:
x=sym('x');a=sym('a');
f=x;
mfourier(f,5)%求f(x)=x的傅立叶级数的前5项
f=abs(x);
mfourier(f,5)%求f(x)=|x|的傅立叶级数的前5项
symsa;
f=cos(a*x);
mfourier(f,6)%求f(x)=cos(ax)的傅立叶级数的前6项
f=sin(a*x);
mfourier(f,4)%求f(x)=sin(ax)的傅立叶级数的前4项
3、级数的符号求和函数symsum,调用格式为:
symsum(a,n,n0,nn)
举例:
求级数之和。
命令如下:
n=sym('n');
s1=symsum(1/n^2,n,1,inf)%求s1
s2=symsum((-1)^(n+1)/n,1,inf)%求s2。
未指定求和变量,缺省为n
s3=symsum(n*x^n,n,1,inf)%求s3。
此处的求和变量n不能省略。
s4=symsum(n^2,1,100)%求s4。
计算有限级数的和
2、
6.10傅立叶(Fourier)变换
在MATLAB中,进行傅立叶变换的函数是:
fourier(fx,x,t)求函数f(x)的傅立叶像函数F(t)。
ifourier(Fw,t,x)求傅立叶像函数F(t)的原函数f(x)。
举例:
求函数的傅立叶变换及其逆变换。
命令如下:
symsxt;
y=abs(x);
Ft=fourier(y,x,t)%求y的傅立叶变换
fx=ifourier(Ft,t,x)%求Ft的傅立叶逆变换
6.11拉普拉斯(Laplace)变换
在MATLAB中,进行拉普拉斯变换的函数是:
(1)laplace(fx,x,t)求函数f(x)的拉普拉斯像函数F(t)。
(2)ilaplace(Fw,t,x)求拉普拉斯像函数F(t)的原函数f(x)。
举例:
计算y=x2的拉普拉斯变换及其逆变换.
命令如下:
x=sym('x');y=x^2;
Ft=laplace(y,x,t)%对函数y进行拉普拉斯变换
fx=ilaplace(Ft,t,x)%对函数Ft进行拉普拉斯逆变换
6.12Z变换
对数列f(n)进行z变换的MATLAB函数是:
ztrans(fn,n,z)求fn的Z变换像函数F(z)
iztrans(Fz,z,n)求Fz的z变换原函数f(n)
举例:
求数列fn=e-n的Z变换及其逆变换。
命令如下:
symsnz
fn=exp(-n);
Fz=ztrans(fn,n,z)%求fn的Z变换
f=iztrans(Fz,z,n)%求Fz的逆Z变换
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 符号 运算 功能 jsp