matlab电子教案doc 4.docx
- 文档编号:25107386
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:24
- 大小:130.27KB
matlab电子教案doc 4.docx
《matlab电子教案doc 4.docx》由会员分享,可在线阅读,更多相关《matlab电子教案doc 4.docx(24页珍藏版)》请在冰豆网上搜索。
matlab电子教案doc4
VII符号计算(4课时)
一、符号对象:
1.建立符号变量和符号常数
(1)sym函数
sym函数用来建立单个符号量,例如,a=sym('a')建立符号变量a,此后,用户可以在表达式中使用变量a进行各种运算。
例考察符号变量和数值变量的差别。
在MATLAB命令窗口,输入命令:
a=sym('a');b=sym('b');c=sym('c');d=sym('d');%定义4个符号变量
w=10;x=5;y=-8;z=11;%定义4个数值变量
A=[a,b;c,d]%建立符号矩阵A
B=[w,x;y,z]%建立数值矩阵B
det(A)%计算符号矩阵A的行列式
det(B)%计算数值矩阵B的行列式
例比较符号常数与数值在代数运算时的差别。
在MATLAB命令窗口,输入命令:
pi1=sym('pi');k1=sym('8');k2=sym('2');k3=sym('3');%定义符号变量
pi2=pi;r1=8;r2=2;r3=3;%定义数值变量
sin(pi1/3)%计算符号表达式值
sin(pi2/3)%计算数值表达式值
sqrt(k1)%计算符号表达式值
sqrt(r1)%计算数值表达式值
sqrt(k3+sqrt(k2))%计算符号表达式值
sqrt(r3+sqrt(r2))%计算数值表达式值
(2)syms函数
syms函数的一般调用格式为:
symsvar1var2…varn
函数定义符号变量var1,var2,…,varn等。
用这种格式定义符号变量时不要在变量名上加字符分界符('),变量间用空格而不要用逗号分隔。
2.建立符号表达式
例用两种方法建立符号表达式。
在MATLAB窗口,输入命令:
(1)直接用sym函数建立符号表达式
U=sym('3*x^2+5*y+2*x*y+6')%定义符号表达式U
(2)先用syms函数定义符号变量,然后再建立符号表达式
symsxy;%建立符号变量x、y
V=3*x^2+5*y+2*x*y+6%定义符号表达式V
(3)符号表达式的值
2*U-V+6%求符号表达式的值
例计算3阶范得蒙矩阵行列式的值。
设A是一个由符号变量a,b,c确定的范得蒙矩阵。
命令如下:
symsabc;
U=[a,b,c];
A=[[1,1,1];U;U.^2]%建立范得蒙符号矩阵
det(A)%计算A的行列式值
二、基本的符号运算:
1.符号表达式运算
(1)符号表达式的四则运算
例符号表达式的四则运算示例。
在MATLAB命令窗口,输入命令:
symsxyz;
f=2*x+x^2*x-5*x+x^3%符号表达式的结果为最简形式
f=2*x/(5*x)%符号表达式的结果为最简形式
f=(x+y)*(x-y)%符号表达式的结果不是x^2-y^2,而是(x+y)*(x-y)
simple(f)
(2)因式分解与展开
factor(S)对S分解因式,S是符号表达式或符号矩阵。
expand(S)对S进行展开,S是符号表达式或符号矩阵。
collect(S)对S合并同类项,S是符号表达式或符号矩阵。
collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。
例对符号矩阵A的每个元素分解因式。
命令如下:
symsabxy;
A=[2*a^2*b^3*x^2-4*a*b^4*x^3+10*a*b^6*x^4,3*x*y-5*x^2;4,a^3-b^3];
factor(A)%对A的每个元素分解因式
例计算表达式S的值。
命令如下:
symsxy;
s=(-7*x^2-8*y^2)*(-x^2+3*y^2);
expand(s)%对s展开
collect(s,x)%对s按变量x合并同类项(无同类项)
factor(ans)%对ans分解因式
(3)表达式化简
MATLAB提供的对符号表达式化简的函数有:
simplify(S)应用函数规则对S进行化简。
simple(S)调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。
例化简
命令如下:
symsxy;
s=(x^2+y^2)^2+(x^2-y^2)^2;
simple(s)%MATLAB自动调用多种函数对s进行化简,并显示每步结果
2.符号矩阵运算
S’返回S矩阵的转置矩阵。
det(S)返回S矩阵的行列式值。
colspace(S)返回S矩阵列空间的基。
[Q,D]=eig(S)Q返回S矩阵的特征向量,D返回S矩阵的特征值。
三、符号表达式中变量的确定:
MATLAB中的符号可以表示符号变量和符号常数。
findsym可以帮助用户查找一个符号表达式中的符号变量。
该函数的调用格式为:
findsym(S,n)
函数返回符号表达式S中的n个符号变量,若没有指定n,则返回S中的全部符号变量。
在求函数的极限、导数和积分时,如果用户没有明确指定自变量,MATLAB将按缺省原则确定主变量并对其进行相应微积分运算。
可用findsym(S,1)查找系统的缺省变量,事实上,MATLAB按离字符'x'最近原则确定缺省变量。
四、函数的极限:
limit函数的调用格式为:
limit(f,x,a)
limit函数的另一种功能是求单边极限,其调用格式为:
limit(f,x,a,'right')或limit(f,x,a,'left')
例求极限:
在MATLAB命令窗口,输入命令:
symsamx;
f=(x^(1/m)-a^(1/m))/(x-a);
limit(f,x,a)%求极限
(1)
f=(sin(a+x)-sin(a-x))/x;
limit(f)%求极限
(2)
limit(f,inf)%求极限(3)
f=(sqrt(x)-sqrt(a)-sqrt(x-a))/sqrt(x*x-a*a);
limit(f,x,a,'right')%求极限(4)
五、符号函数求导及其应用:
MATLAB中的求导的函数为:
diff(f,x,n)
diff函数求函数f对变量x的n阶导数。
参数x的用法同求极限函数limit,可以缺省,缺省值与limit相同,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的偏导数
例在曲线y=x3+3x-2上哪一点的切线与直线y=4x-1平行。
命令如下:
x=sym('x');
y=x^3+3*x-2;%定义曲线函数
f=diff(y);%对曲线求导数
g=f-4;
x=solve(g)%求方程f-4=0的根,即求曲线何处的导数为4
%图形描述
a=-2:
0.1:
2;
b=a.^3+3.*a-2;
yy=subs(y,x)
c=yy-4*x
c1=4.*a+c
(1)
c2=4.*a+c
(2)
plot(a,b,a,double(c1),'r-',a,double(c2),'r-')
六、不定积分:
在MATLAB中,求不定积分的函数是int,其调用格式为:
int(f,x)
int函数求函数f对变量x的不定积分。
参数x可以缺省,缺省原则与diff函数相同。
例求不定积分:
(1)
(2)
命令如下:
x=sym('x');
f=(3-x^2)^3;
int(f)%求不定积分
(1)
%%%%%%%%%%%%%%%%
f=sqrt(x^3+x^4);
int(f)%求不定积分
(2)
g=simple(ans)%调用simple函数对结果化简
七、符号函数的定积分:
定积分在实际工作中有广泛的应用。
在MATLAB中,定积分的计算使用函数:
int(f,x,a,b)
例求定积分:
命令如下:
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)%将上述符号结果转换为数值
例求椭球的体积:
命令如下:
symsabcx;
f=pi*b*c*(1-x^2/a^2);
V=int(f,x,-a,a)
例轴的长度为10米,若该轴的线性密度计算公式是f(x)=6+0.3x千克/米(其中x为距轴的端点距离),求轴的质量。
(1)符号函数积分。
在MATLAB命令窗口,输入命令:
symsx;
f=6+0.3*x;
m=int(f,0,10)
(2)数值积分。
先建立一个函数文件fx.m:
functionfx=fx(x)
fx=6+0.3*x;
再在MATLAB命令窗口,输入命令:
m=quad('fx',0,10,1e-6)
例求空间曲线c:
从点(0,0,0)到点(3,3,2)的长度。
第一类曲线积分的计算:
设函数
在光滑曲线
上有定义且连续,
的方程为
则
。
命令如下:
symst;
x=3*t;y=3*t^2;z=2*t^3;%t的取值范围为(0,1)
f=diff([x,y,z],t)%求x,y,z对参数t的导数
g=sqrt(f*f')%计算一型积分公式中的根式部分
l=int(g,t,0,1)%计算曲线c的长度
八、积分变换:
1.傅立叶(Fourier)变换
在MATLAB中,进行傅立叶变换的函数是:
fourier(fx,x,t)求函数f(x)的傅立叶像函数F(t)。
ifourier(Fw,t,x)求傅立叶像函数F(t)的原函数f(x)。
例求函数y=|x|的傅立叶变换及其逆变换。
命令如下:
symsxt;
y=abs(x);
Ft=fourier(y,x,t)%求y的傅立叶变换
fx=ifourier(Ft,t,x)%求Ft的傅立叶逆变换
2.拉普拉斯(Laplace)变换
在MATLAB中,进行拉普拉斯变换的函数是:
laplace(fx,x,t)求函数f(x)的拉普拉斯像函数F(t)。
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进行拉普拉斯逆变换
3.Z变换
对数列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变换
实习:
1)计算矩阵
的行列式值、逆,并用simple函数化简;
2)求微分
3)通过符号计算求y=|sin(t)|的导数,然后,求导函数y'(0-)和y'(0+),以及y'(pi/2)。
它们与理论值相符吗?
4)求多重积分
九、级数的符号求和:
级数符号求和函数symsum,调用格式为:
symsum(a,n,n0,nn)
例求级数之和:
命令如下:
n=sym('n');
s1=symsum(1/n^2,n,1,inf)%求
(1),常数项级数
s2=symsum((-1)^(n+1)/n,1,inf)%求
(2),交错级数,未指定求和变量,缺省为n
s3=symsum(n*x^n,n,1,inf)%求(3),函数项级数,此处的求和变量n不能省略。
s4=symsum(n^2,1,100)%求(4),计算有限级数的和
十、函数的泰勒级数:
MATLAB中提供了将函数展开为幂级数的函数taylor,其调用格式为:
taylor(f,n,v,a)
f为待展开函数表达式,v为自变量,n为展开阶数(正整数),a则指定对f在v=a处进行泰勒展开。
例求函数的泰勒展开式:
命令如下:
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,5,x)%求
(1)。
展开到x的4次幂时应选择n=5
taylor(f2,6)%求
(2)。
例将多项式1+3x+5x2-2x3表示成x+1的幂的多项式。
命令如下:
x=sym('x');
p=1+3*x+5*x^2-2*x^3;
f=taylor(p,4,x,-1)
例应用泰勒公式近似计算:
命令如下:
x=sym('x');
f=(1-x)^(1/12);%定义函数,4000^(1/12)=2f(96/2^12)
g=taylor(f,4)%求f的泰勒展开式g
v=subs(g,'x','96/2^12')%计算g(96/2^12),P135
v1=simple(v)%化简计算结果
2*vpa(v1,8)%求4000^(1/12)的近似值,小数点后保
%留8位有效数字,4000^(1/12)≈2*g(96/2^12)
%P136
4000^(1/12)%用MATLAB的乘方运算直接计算
十一、函数的傅立叶级数:
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项
十二、线性方程组的符号求解:
MATLAB中提供了一个求解线性代数方程组的函数linsolve,其调用格式为:
linsolve(A,b)
例求线性方程组AX=b的解:
解方程组
(1)的命令如下:
A=[34,8,4;3,34,3;3,6,8];
b=[4;6;2];
X=linsolve(A,b)%调用linsolve函数求
(1)的解
sym(A)\sym(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)的解
十三、非线性方程组的符号求解:
求解非线性方程组的函数是solve,调用格式为:
solve('eqn1','eqn2',…,'eqnN','var1,var2,…,varN')
例解方程:
命令如下:
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),方程为符号型,自变量缺省
symsx;
x=solve(2*sin(3*x-pi/4)-1)
%解方程(3),这一用法不允许“=”号
x=solve('x+x*exp(x)-10','x')
%解方程(4),无符号解时,给出数值解
例求方程组的解:
命令如下:
[xy]=solve('1/x^3+1/y^3=28','1/x+1/y=4','x','y')%解方程组
(1)
[xv]=solve('x^2+y^2-5','2*x^2-3*x*y-2*y^2')%解方程组
(2)
十四、常微分方程的符号求解
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给出求解变量。
例求微分方程的通解:
命令如下:
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)
例求微分方程的特解:
命令如下:
y=dsolve('Dy=2*x*y^2','y(0)=1','x')%解
(1)
y=dsolve('Dy-x^2/(1+y^2)','y
(2)=1','x')%解
(2)
例用微分方程的数值解法和符号解法解方程,并对结果进行比较:
在MATLAB命令窗口,输入命令:
(1)用符号运算求方程的解析解(即符号解):
y=dsolve('Dy+2*y/x-4*x','y
(1)=2','x')
%用符号方法得到方程的解析解
(2)用数值运算求方程的数值解:
为了求方程的数值解,需要按要求建立一个函数文件fxyy.m:
functionf=fxyy(x,y)
f=(4*x^2-2*y)/x;
%只能是y'=f(x,y)的形式,当不是这种形式时,要变形。
return
输入命令:
[t,w]=ode45('fxyy',[1,2],2);
%得到区间[1,2]中的数值解,以向量t、w存储。
(3)作出两种结果的图形,对它们进行比较:
x=linspace(1,2,100);
y=eval(vectorize(char(y)))%为作图把符号解的结果向量化;vectorize函数见P344,213
plot(x,y,'b.',t,w,'r-');
十五、常微分方程组求解:
dsolve在求微分方程组时的调用格式为:
dsolve('eqn1','eqn2',…,'eqnN','condition1',…,'conditionN','var1',…,'varN')
函数求解微分方程组eqn1、…、eqnN在初值条件conditoion1,…conditionN下的解,若不给出初值条件,则求方程组的通解,var1、…、varN给出求解变量。
例求微分方程组的解:
命令如下:
[x,y]=dsolve('Dx=4*x-2*y','Dy=2*x-y','t')%解方程组
(1)
[x,y]=dsolve('D2x-y','D2y+x','t')%解方程组
(2)
例32.级数求和
symskta;
f1=[tk^3];
f2=[1/(2*k-1)^2,(-1)^k/k];
s1=simple(symsum(f1,t,0,a-1))%观察结果,注意学习求和函数的使用
s2=simple(symsum(f2,k,1,inf))
例33.求微分
symsatx;
f=[a,t^3;t*cos(x),log(x)];%定义矩阵
df=diff(f,x)%对x求微分
dfdt2=diff(f,t,2)%对t求2阶微分
dfdxdt=diff(diff(f,x),t)%求混合微分
例34.求积分
symsAttaow;
yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);
Yf=simple(yf)
以下积分能算么?
symsAttaow;
yf=int(A*exp(-w*t^2),t,-tao/2,tao/2);
Yf=simple(yf)
例35.求积分
symstx;
f=1/log(t);
F=int(f,t,0,x)%解释计算结果
F=
-Ei(1,-log(x))%Ei是什么?
查maple帮助mhelpEi
x=0.5:
0.1:
0.9
F1=-mfun('Ei',1,-log(x))%用函数mfun取x的积分值
例36.求积分
symsabx;
f=[a*x,b*x^2;1/x,sin(x)];
F=int(f,x);
disp('Theintegraloffis');pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab电子教案doc matlab 电子 教案 doc