matlab符号微积分微分方程.docx
《matlab符号微积分微分方程.docx》由会员分享,可在线阅读,更多相关《matlab符号微积分微分方程.docx(12页珍藏版)》请在冰豆网上搜索。
![matlab符号微积分微分方程.docx](https://file1.bdocx.com/fileroot1/2022-11/16/bff35ed9-0d07-4244-b57a-af14a6a91efa/bff35ed9-0d07-4244-b57a-af14a6a91efa1.gif)
matlab符号微积分微分方程
符号极限、微积分和符号方程的求解
1.语法:
sym(‘表达式’)%创建符号表达式
f1=sym('a*x^2+b*x+c')
f1=
a*x^2+b*x+c
2.使用syms命令创建符号变量和符号表达式
语法:
symsarg1arg2…,参数 %把字符变量定义为符号变量的简洁形式
symsabcx%创建多个符号变量
f2=a*x^2+b*x+c%创建符号表达式
3.4.1符号极限
假定符号表达式的极限存在,SymbolicMathToolbox提供了直接求表达式极限的函数limit,函数limit的基本用法如表3.2所示。
表3.2limit函数的用法
表达式
函数格式
说明
limt(f)
对x求趋近于0的极限
limt(f,x,a)
对x求趋近于a的极限,当左右极限不相等时极限不存在。
limt(f,x,a,left)
对x求左趋近于a的极限
limt(f,x,a,right)
对x求右趋近于a的极限
【例3.14】分别求1/x在0处从两边趋近、从左边趋近和从右边趋近的三个极限值。
f=sym('1/x')
limit(f,'x',0)%对x求趋近于0的极限
ans=
NaN
limit(f,'x',0,'left')%左趋近于0
ans=
-inf
limit(f,'x',0,'right')%右趋近于0
ans=
inf
程序分析:
当左右极限不相等,表达式的极限不存在为NaN。
3.4.2符号微分
函数diff是用来求符号表达式的微分。
语法:
diff(f)%求f对自由变量的一阶微分
diff(f,t)%求f对符号变量t的一阶微分
diff(f,n)%求f对自由变量的n阶微分
diff(f,t,n)%求f对符号变量t的n阶微分
【例3.15】已知f(x)=ax2+bx+c,求f(x)的微分。
f=sym('a*x^2+b*x+c')
f=
a*x^2+b*x+c
diff(f)%对默认自由变量x求一阶微分
ans=
2*a*x+b
diff(f,'a')%对符号变量a求一阶微分
ans=
x^2
diff(f,'x',2)%对符号变量x求二阶微分
ans=
2*a
diff(f,3)%对默认自由变量x求三阶微分
ans=
0
微分函数diff也可以用于符号矩阵,其结果是对矩阵的每一个元素进行微分运算。
【例3.15续】对符号矩阵
求微分。
symstx
g=[2*xt^2;t*sin(x)exp(x)]%创建符号矩阵
g=
[2*x,t^2]
[t*sin(x),exp(x)]
diff(g)%对默认自由变量x求一阶微分
ans=
[2,0]
[t*cos(x),exp(x)]
diff(g,'t')%对符号变量t求一阶微分
ans=
[0,2*t]
[sin(x),0]
diff(g,2)%对默认自由变量x求二阶微分
ans=
[0,0]
[-t*sin(x),exp(x)]
diff还可以用于对数组中的元素进行逐项求差值。
【例3.15续】可以使用diff计算向量间元素的差值。
x1=0:
0.5:
2;
y1=sin(x1)
y1=
00.47940.84150.99750.9093
diff(y1)%计算元素差
ans=
0.47940.36200.1560-0.0882
程序分析:
计算出的差值比原来的向量少一列。
3.4.3符号积分
积分有定积分和不定积分,运用函数int可以求得符号表达式的积分。
语法:
int(f,’t’)%求符号变量t的不定积分
int(f,’t’,a,b)%求符号变量t的积分
int(f,’t’,’m’,’n’)%求符号变量t的积分
说明:
t为符号变量,当t省略则为默认自由变量;a和b为数值,[a,b]为积分区间;m和n为符号对象,[m,n]为积分区间;与符号微分相比,符号积分复杂得多。
因为函数的积分有时可能不存在,即使存在,也可能限于很多条件,MATLAB无法顺利得出。
当MATLAB不能找到积分时,它将给出警告提示并返回该函数的原表达式。
【例3.16】求积分
和
。
f=sym('cos(x)');
int(f)%求不定积分
ans=
sin(x)
int(f,0,pi/3)%求定积分
ans=
1/2*3^(1/2)
int(f,'a','b')%求定积分
ans=
sin(b)-sin(a)
int(int(f))%求多重积分
ans=
-cos(x)
diff和int命令,也可以直接对字符串f进行运算:
f='cos(x)';
【例3.16续】求符号矩阵
的积分。
symstx
g=[2*xt^2;t*sin(x)exp(x)]%创建符号矩阵
g=
[2*x,t^2]
[t*sin(x),exp(x)]
int(g)%对x求不定积分
ans=
[x^2,t^2*x]
[-t*cos(x),exp(x)]
int(g,'t')%对t求不定积分
ans=
[2*x*t,1/3*t^3]
[1/2*t^2*sin(x),exp(x)*t]
int(g,sym('a'),sym('b'))%对x求定积分
ans=
[b^2-a^2,t^2*(b-a)]
[-t*cos(b)+t*cos(a),exp(b)-exp(a)]
3.4.4符号级数
1.symsum函数
语法:
symsum(s,x,a,b)%计算表达式s的级数和
说明:
x为自变量,x省略则默认为对自由变量求和;s为符号表达式;[a,b]为参数x的取值范围。
【例3.17】求级数
和1+x+x2+…+xk+…的和。
symsxk
s1=symsum(1/k^2,1,10)%计算级数的前10项和
s1=
1968329/1270080
s2=symsum(1/k^2,1,inf)%计算级数和
s2=
1/6*pi^2
s3=symsum(x^k,'k',0,inf)%计算对k为自变量的级数和
s3=
-1/(x-1)
2.taylor函数
语法:
taylor(F,x,n)%求泰勒级数展开
说明:
x为自变量,F为符号表达式;对F进行泰勒级数展开至n项,参数n省略则默认展开前5项。
【例3.17续】求ex的泰勒展开式为:
。
symsx
s1=taylor(exp(x),8)%展开前8项
s1=
1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5+1/720*x^6+1/5040*x^7
s2=taylor(exp(x))%默认展开前5项
s2=
1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5
3.6符号方程的求解
3.6.1代数方程
当方程不存在解析解又无其他自由参数时,MATLAB可以用solve命令给出方程的数值解。
语法:
solve(‘eq’,’v’)%求方程关于指定变量的解
solve(‘eq1’,’eq2’,’v1’,’v2’,…)%求方程组关于指定变量的解
说明:
eq可以是含等号的符号表达式的方程,也可以是不含等号的符号表达式,但所指的仍是令eq=0的方程;当参数v省略时,默认为方程中的自由变量;其输出结果为结构数组类型。
【例3.21】求方程ax2+bx+c=0和sinx=0的解。
f1=sym('a*x^2+b*x+c')%无等号
f1=
a*x^2+b*x+c
solve(f1)%求方程的解x
ans=
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
f2=sym('sin(x)')
f2=
sin(x)
solve(f2,'x')
ans=
0
程序分析:
当sinx=0有多个解时,只能得出0附近的有限几个解。
【例3.22】求三元非线性方程组
的解。
eq1=sym('x^2+2*x+1');
eq2=sym('x+3*z=4');
eq3=sym('y*z=-1');
[x,y,z]=solve(eq1,eq2,eq3)%解方程组并赋值给x,y,z
x=
-1
y=
-3/5
z=
5/3
程序分析:
输出结果为“结构对象”,如果最后一句为“S=solve(eq1,eq2,eq3)”,则结果为:
S=
x:
[1x1sym]
y:
[1x1sym]
z:
[1x1sym]
3.6.2符号常微分方程
MATLAB提供了dsolve命令可以用于对符号常微分方程进行求解。
语法:
dsolve(‘eq’,’con’,’v’)%求解微分方程
dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v2…’)%求解微分方程组
说明:
’eq’为微分方程;’con’是微分初始条件,可省略;’v’为指定自由变量,省略时则默认为x或t为自由变量;输出结果为结构数组类型。
▪当y是因变量时,微分方程’eq’的表述规定为:
y的一阶导数
或
表示为Dy;
y的n阶导数
或
表示为Dny。
▪微分初始条件'con'应写成'y(a)=b,Dy(c)=d'的格式;当初始条件少于微分方程数时,在所得解中将出现任意常数符C1,C2……,解中任意常数符的数目等于所缺少的初始条件数。
【例3.23】求微分方程
,y
(1)=0,y(0)=0的解。
y=dsolve('x*D2y-3*Dy=x^2','x')%求微分方程的通解
y=
-1/3*x^3+C1+C2*x^4
y=dsolve('x*D2y-3*Dy=x^2','y
(1)=0,y(5)=0','x')%求微分方程的特解
y=
-1/3*x^3+125/468+31/468*x^4
【例3.24】求微分方程组
的解。
[x,y]=dsolve('Dx=y,Dy=-x')
x=
cos(t)*C1+sin(t)*C2
y=
-sin(t)*C1+cos(t)*C2
程序分析:
默认的自由变量是t,C1、C2为任意常数,程序也可指定自由变量,结果相同:
[x,y]=dsolve('Dx=y,Dy=-x','t')
3.7符号函数的可视化
3.7.1符号函数的绘图命令
1.ezplot和ezplot3命令
ezplot命令是绘制符号表达式的自变量和对应各函数值的二维曲线,ezplot3命令用于绘制三维