实验五 MATLAB符号计算.docx
《实验五 MATLAB符号计算.docx》由会员分享,可在线阅读,更多相关《实验五 MATLAB符号计算.docx(20页珍藏版)》请在冰点文库上搜索。
![实验五 MATLAB符号计算.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/00795f36-87b6-40e3-96c7-ca9ebcdb95d6/00795f36-87b6-40e3-96c7-ca9ebcdb95d61.gif)
实验五MATLAB符号计算
实验5MATLAB符号计算
一、目的和要求
(1)熟练掌握MATLAB符号表达式的创建。
(2)熟练掌握符号表达式的代数运算。
(3)掌握符号表达式的化简和替换。
(4)熟练掌握符号微积分。
(5)掌握符号积分变换。
(6)熟悉符号方程的求解。
(7)熟悉拉氏变换和z变换。
二、内容和步骤
1、符号常量、符号变量、符号表达式的创建
(1)使用sym()创建
输入以下命令,观察Workspace中A、B、f是什么类型的数据,占用多少字节的内存空间。
>>A=sym('1')%符号常量
>>B=sym('x')%符号变量
>>f=sym('2*x^2+3y-1')%符号表达式
>>clear
>>f1=sym('1+2')%有单引号,表示字符串
>>f2=sym(1+2)%无单引号
>>f3=sym('2*x+3')
>>f4=sym(2*x+3)%为什么会出错
>>x=1
>>f4=sym(2*x+3)
通过看MATLAB的帮助可知,sym()的参数可以是字符串或数值类型,无论是哪种类型都会生成符号类型数据。
(2)使用syms创建
>>clear
>>symsxyz%注意观察x,y,z都是什么类型的,它们的内容是什么
>>x,y,z
>>f1=x^2+2*x+1
>>f2=exp(y)+exp(z)^2
>>f3=f1+f2
通过以上实验,知道生成符号表达式的第二种方法:
由符号类型的变量经过运算(加减乘除等)得到。
又如:
>>f1=sym('x^2+y+sin
(2)')
>>symsxy
>>f2=x^2+y+sin
(2)
>>x=sym('2'),y=sym('1')
>>f3=x^2+y+sin
(2)
>>y=sym('w')
>>f4=x^2+y+sin
(2)
2、符号矩阵创建
>>symsa1a2a3a4
>>A=[a1a2;a3a4]
>>A
(1),A(3)
或者
>>B=sym('[b1b2;b3b4]')
>>c1=sym('sin(x)')
>>c2=sym('x^2')
>>c3=sym('3*y+z')
>>c4=sym('3')
>>C=[c1c2;c3c4]
3、自由变量的确定。
使用findsym确定符号表达式
的自由变量。
4、用常数替换符号变量。
用行向量替换
,使符号对象
转变为行向量。
都为双精度型数值。
5、符号算术运算
(1)符号表达式加和减
(2)符号量相乘、相除
符号量相乘运算和数值量相乘一样,分成矩阵乘和数组乘。
>>a=sym(5);b=sym(7);
>>c1=a*b
>>c2=a/b
>>a=sym(5);B=sym([345]);
>>C1=a*B,C2=a\B
>>symsab
>>A=[5a;b3];B=[2*ab;2*ba];
>>C1=A*B,C2=A.*B
>>C3=A\B,C4=A./B
(3)符号数值任意精度控制和运算
任意精度的VPA运算可以使用命令digits(设定默认的精度)和vpa(对指定对象以新的精度进行计算)来实现。
>>a=sym('2*sqrt(5)+pi')
>>b=sym(2*sqrt(5)+pi)
>>digits
>>vpa(a)
>>digits(15)
>>vpa(a)
>>c1=vpa(a,56)
>>c2=vpa(b,56)
注意:
观察c1和c2的数据类型,c1和c2是否相等。
6、符号表达式的操作和转换
1)求反函数和复合函数。
①用finverse函数求
、
的反函数。
②用compose函数求解
、
的复合函数。
2)符号表达式与多项式的转换。
用函数sym2poly和poly2sym实现符号表达式
与多项式的转换。
>>clear
>>symsx
>>f=x^2+3*x+2
3)符号表达式化简
符号表达式化简主要包括表达式美化(pretty)、合并同类项(collect)、多项式展开(expand)、因式分解(factor)、化简(simple或simplify)等函数。
1合并同类项(collect)。
分别按x的同幂项和e指数同幂项合并表达式:
>>symsxt;f=(x^2+x*exp(-t)+1)*(x+exp(-t));
>>f1=collect(f)
>>f2=collect(f,’exp(-t)’)
②对显示格式加以美化(pretty)。
针对上例,用格式美化函数可以使显示出的格式更符合数学书写习惯。
>>pretty(f1)
>>pretty(f2)
注意:
与直接输出的f1和f2对比。
③多项式展开(expand)。
展开(x-1)12成x不同幂次的多项式。
>>clearall
>>symsx;
>>f=(x-1)^12;
>>pretty(expand(f))
④因式分解(factor)。
将表达式x12–1作因式分解。
>>clearall
>>symsx;f=x^12-1;
>>pretty(factor(f))
⑤化简(simple或simplify)。
将函数
化简。
>>clearall,symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);
>>g1=simple(f)
>>g2=simplify(f)
⑥horner函数,给出符号表达式的嵌套形式。
horner(f)
>>clearall
>>symsx;
>>f=(x-1)^3+3*x-1;
>>horner(f)
7、符号极限、符号积分与微分
(1)求极限函数的调用格式
limit(F,x,a)%返回符号对象F当x→a时的极限
limit(F,a)%返回符号对象F当独立变量*→a时的极限
limit(F)%返回符号对象F当独立变量→0(a=0)时的极限
limit(F,x,a,’right’)%返回符号对象F当x→a时的右极限
limit(F,x,a,’left’)%返回符号对象F当x→a时的左极限
limit(F,x,inf)%返回符号表达式F当x趋于无穷大时的极限
例:
>>clear;
>>symsx; %说明x为符号变量
>>limit(sin(1/x),x,0)
>>clear;
>>symsn;
>>limit((1+1/n)^n,n,inf)
(2)求积分函数的调用格式
int(F)%求符号对象F关于默认变量的不定积分
int(F,v)%求符号对象F关于指定变量v的不定积分
int(F,a,b)%求符号对象F关于默认变量的从a到b的定积分
int(F,v,a,b)%求符号对象F关于指定变量v的从a到b的定积分
(3)求微分函数的调用格式
diff(F)%求符号对象F关于默认变量的微分
diff(F,v)%求符号对象F关于指定变量v的微分
diff(F,n)%求符号对象F关于默认变量的n次微分,n为自然数1、2、3…
diff(F,v,n)%求符号对象F关于指定变量v的n次微分
例:
已知
求
的微分.
>>f=sym('a*x^2+b*x+c')%定义函数表达式
f=a*x^2+b*x+c
>>diff(f)%对默认变量
求一阶微分
ans=2*a*x+b
>>diff(f,'a')%对符号变量
求一阶微分
ans=x^2
>>diff(f,'x',2)%对符号变量
求二阶微分
ans=2*a
>>diff(f,3)%对默认变量
求三阶微分
ans=0
8、符号级数
a)symsum函数
语法:
symsum(s,x,a,b)%计算表达式s的级数和
说明:
x为自变量,x省略则默认为对自由变量求和;s为符号表达式;[a,b]为参数x的取值范围。
【例】求级数
和1+x+x2+…+xk+…的和。
symsxk
s1=symsum(1/x^2,1,10)%计算级数的前10项和
s2=symsum(1/k^2,1,inf)%计算级数和
s3=symsum(x^k,'k',0,inf)%计算对k为自变量的级数和
b)taylor函数
语法:
taylor(F,x,n)%求泰勒级数展开
说明:
x为自变量,F为符号表达式;对F进行泰勒级数展开至n项,参数n省略则默认展开前5项。
【例】求ex的泰勒展开式为:
。
symsx
s1=taylor(exp(x),8)%展开前8项
s2=taylor(exp(x))%默认展开前5项
9、符号积分变换
a)傅里叶(Fourier)变换及其反变换
fourier变换和反变换可以利用积分函数int来实现,也可以直接使用fourier或ifourier函数实现。
1.fourier变换
语法:
F=fourier(f,t,w)%求时域函数f(t)的fourier变换F
说明:
返回结果F是符号变量w的函数,当参数w省略,默认返回结果为w的函数;f为t的函数,当参数t省略,默认自由变量为x。
2.fourier反变换
语法:
f=ifourier(F)%求频域函数F的fourier反变换f(t)
f=ifourier(F,w,t)
说明:
ifourier函数的用法与fourier函数相同。
【例】计算f(t)=
的fourier变换F以及F的fourier反变换。
symstw
F=fourier(1/t,t,w)%fourier变换
f=ifourier(F,t)%fourier反变换
f=ifourier(F)%fourier反变换默认x为自变量
b)拉普拉斯(Laplace)变换及其反变换
1.Laplace变换
语法:
F=laplace(f,t,s)%求时域函数f的Laplace变换F
说明:
返回结果F为s的函数,当参数s省略,返回结果F默认为's'的函数;f为t的函数,当参数t省略,默认自由变量为't'。
【例】求sin(at)和阶跃函数的Laplace变换。
symsats
F1=laplace(sin(a*t),t,s)%求sinat的Laplace变换
F1=
a/(s^2+a^2)
F2=laplace(sym('Heaviside(t)'))%求阶跃函数的Laplace变换
F2=
1/s
2.Laplace反变换
语法:
f=ilaplace(F,s,t)%求F的Laplace反变换f
【例】求
和1的Laplace反变换。
symssat
f1=ilaplace(1/(s+a),s,t)%求1/s+a的Laplace反变换
f1=
exp(-a*t)
f2=ilaplace(1,s,t)%求1的Laplace反变换是脉冲函数
f2=
Dirac(t)
10、符号方程的求解
(1)常规方程求解函数的调用格式
g=solve(eq)%求方程(或表达式或字串)eq关于默认变量的解
g=solve(eq,var)%求方程(或表达式或字串)eq关于指定变量var的解
g=solve(eq1,eq2,...,eqn,var1,var2,...,varn)%求方程(或表达式或字串)组
eq1,eq2,...,eqn关于指定变量组var1,var2,...,varn的解
(2)常微分方程求解
求解常微分方程的函数是dsolve。
应用此函数可以求得常微分方程(组)的通解,以及给定边界条件(或初始条件)后的特解。
常微分方程求解函数的调用格式:
r=dsolve('eq1,eq2,...','cond1,cond2,...','v')
r=dsolve('eq1','eq2',...,'cond1','cond2',...,'v')
说明:
①以上两式均可给出方程eq1、eq2...对应初始条件cond1、cond2...之下的以v作为
解变量的各微分方程的解。
2常微分方程解的默认变量为t。
3第二式中最多可接受的输入式是12个。
④微分方程的表达方法。
在用MATLAB求解常微分方程时,用大写字母Dy表示微分符号
,用D2y表示
,依次类推。
边界条件以类似于y(a)=b或Dy(a)=b的等式给出。
其中y为因变量,a、b为常数。
如果初始条件给得不够,求出的解则为含有C1、C2等待定常数的通解。
例:
对方程组
进行求解。
例:
解方程组
当
时,求微分方程组的解。
11、符号函数的图形绘制
ezplot(F,[xmin,xmax],fig)%画符号表达式的图形
说明:
F是将要画的符号函数;[xmin,xmax]是绘图的自变量范围,省略时默认值为[-2л,2л];fig是指定的图形窗口,省略时默认为当前图形窗口。
【例】画出y(x)特解的图形,如图3.2所示。
y=sym('-1/3*x^3+1/3*x^4')
ezplot(y)
ezplot(y,[0,100])%绘制符号函数y在[0,100]中的图形
【例】用ezplot3绘制三维符号表达式曲线。
x=sym('sin(t)');
z=sym('t');
y=sym('cos(t)');
ezplot3(x,y,z,[0,10*pi],'animate')%绘制t在[0,10*pi]范围的三维曲线
三、练习:
1.创建符号表达式:
。
(用三种方式分别创建)
2.创建符号矩阵。
3.已知表达式
,计算当
时
的值;计算
与
的复合函数,
、
的逆函数。
4.符号函数
,分别对
、
、
、
进行微分,对
趋向于1求极限,并计算对
的二次、三次微分,用findsym得出符号变量。
5.求极限
。
6.求定积分
和不定积分
。
7.求微分方程
在满足
,
的解,并画出图形。
8.求解微分方程组
,其中
9.解微分方程
的通解。
10.利用符号绘图函数绘制图形
,范围为
。