[理学]第二讲 年数学建模竞赛培训matlab符号计算课件.ppt
《[理学]第二讲 年数学建模竞赛培训matlab符号计算课件.ppt》由会员分享,可在线阅读,更多相关《[理学]第二讲 年数学建模竞赛培训matlab符号计算课件.ppt(72页珍藏版)》请在三一办公上搜索。
1、第二讲 符号推演与计算,2022/12/6,Matlab与科学计算,2,引言,我们已经知道数值计算是MATLAB最强大的功能之一,但自从Mathworks公司买下了Maple的使用权以后,MATLAB将数值计算与符号计算熔为一体,成了全功能的计算软件。有关符号计算的所有功能都在符号工具箱(Symbolic Math Toolbox)中。我们可以在帮助窗口中打开该工具箱获得更详细的资料。本章将介绍如何定义一个符号数学公式,以及如何推演一个数学公式,如对一个多项式提取公因子,对一个复杂的数学表达式进行化简,以及诸如符号矩阵代数运算、符号积分运算等一系列符号的推演过程。符号运算的一个最关键的命令是s
2、yms符号定义,利用该命令我们可以定义任何一个符号公式,符号积分公式、符号矩阵公式、符号线性方程和符号微分方程等数学公式等。我们可以利用MATLAB 命令对它进行通常意义下的解析推导。,2022/12/6,Matlab与科学计算,3,有关符号推演的知识点见下图,2022/12/6,Matlab与科学计算,4,符号表达式的定义和数据转换,在MATLAB中为进行符号推演就必须区别数值表达式和符号表达式的区别。MATLAB提供了一系列按照符号推演规则下的符号命令,如定义符号、定义一个多元函数所有参数中那些是自变量那些是参数等等。当我们在符号推演的过程或结束后,希望计算函数在某些点处的值,我们有一些有
3、关的辅助命令如vpa和subst,2022/12/6,Matlab与科学计算,5,定义符号对象的指令,一个符号表达式中,所有的参数都是符号变量或符号常量,因此必须和在计算机语言中的那些表达式有所区别。我们可以用命令sym和syms来定义符号变量和符号表达式。sym 和 syms 常用的格式如下:f = sym(expr) 把表达式expr 转换为符号对象。syms(arg1, arg2, arg3) 将他们定义为符号变量。syms arg1 arg2 arg3 为上面命令的简写形式,2022/12/6,Matlab与科学计算,6,【例1】用符号计算验证三角等式。,syms a1 a2; % 定
4、义符号变量y=sin(a1)*cos(a2)+cos(a1)*sin(a2) % 定义符号表达式ysimple(y) % 化简,ans =sin(a1+a2),【例2】把字符表达式转换为符号变量,y=sym(2*sin(x)*cos(x) %符号变量y=simple(y) %按规则把已有的y符号表达式化成最简形式,y =2*sin(x)*cos(x)y =sin(2*x),2022/12/6,Matlab与科学计算,7,【例 3】求矩阵的行列式值、逆和特征根,syms a11 a12 a21 a22;A=a11,a12;a21,a22DA=det(A) % 计算矩阵A的行列式的值IA=inv(
5、A) % 计算矩阵A的逆矩阵EA=eig(A) % 求矩阵的特征根系统,2022/12/6,Matlab与科学计算,8,A = a11, a12 a21, a22DA = a11*a22-a12*a21IA = a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21) -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)EA = 1/2*a11+1/2*a22+1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2) 1/2*a11+1/2*a22-1/2*(a112-2*a11*a22+a222+
6、4*a12*a21)(1/2),【例 5】验证积分,syms A t tao w;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);Yf=simple(yf),Yf = 2*A*sin(1/2*tao*w)/w,2022/12/6,Matlab与科学计算,9,符号表达式中自由变量的确定,在一个符号表达式中可能有多个符号变量,那么哪一个是自变量,哪些是符号常量则对某种运算是非常重要的. MATLAB 提供了一个 findsym 命令,可以对所有符号变量指定一定数量的自变量进行自动认定。基本语法:findsym(expr) 确定表达式 expr 中所有自由符号变量finds
7、ym(expr,n)确定expr 靠 x 最近的n个独立变量,2022/12/6,Matlab与科学计算,10,【例6】一个简单的例子,syms a x y z t % 定义符号变量 a,x,y,z,t findsym(sin(pi*t) % 确定表达式中所有符号为自由变量findsym(x+i*y-j*z,1) % 确定达式中最靠近x的变量findsym(x+i*y-j*z,2) % 式中最靠近x的两个变量findsym(x+i*y-j*z,3) % 式中最靠近x的三个变量(包括x),结果为:ans = t ans = xans = x,y ans = x,y,z,syms a b t u
8、v x y;A=a+b*x,sin(t)+u;x*exp(-t),log(y)+v findsym(A,1) % 在矩阵A中确定x为自变量,A = a+b*x, sin(t)+u x*exp(-t), log(y)+vans = x,【例7】findsym确定自由变量是对整个矩阵进行的。,2022/12/6,Matlab与科学计算,11,符号的数值化和替代,在进行公式推导的过程中,有时我们需要将公式按某些实际参数来进行数值化表示,或在自变量取某些值时求符号公式的值,这时我们可以使用符号数值化和替换等命令。对符号求值的命令为vpa,即(Variable precision arithmetic)
9、。语法为:R = vpa(A)R = vpa(A,d)这里A:对符号表达式A求给定精度的值。d:输出数值的有效位数,2022/12/6,Matlab与科学计算,12,【例8】求以下符号的有效位数值digits(25) % 设置vpa输出的有效数q = vpa(sin(sym(pi)/6) % 输出sin在给定点的值,这里有效位为25p = vpa(pi)w = vpa(1+sqrt(5)/2,4) % 输出函数的值,这里有效位为4q = 0.5000000000000000000000000p = 3.141592653589793238462643w = 1.618,二、符号表达式值的替换函
10、数 对于符号表达式中的某些变量,我们可以通过使用替换命令将这些变量变成单个数据或数组,从而让整个符号表达式变成具体的数字,这样我们就可以先推导再计算了。符号替换命令为:,2022/12/6,Matlab与科学计算,13,R = subs(S) R = subs(S,old,new) 其中subs(S):式中所有的变量均用内存中工作数组相应的变量替换。subs(S,old,new): 将符号表达式S中的某些“老的符号变量”替换成“新变量或数值数组。,【例9】求解常微分方程 的通解, 并用C1=3,a=50替换解的变量,y = dsolve(Dy = -a*y) % 求微分方程的通解a =50;C
11、1=3;y = C1*exp(-a*t),subs(y) % 进行参数的替换ans = 3*exp(-50*t),2022/12/6,Matlab与科学计算,14,【例10】以“新”替换“老”, 将表达式中的a替换为4subs(a+b,a,4)ans = 4+b,(4)将符号乘用矩阵乘替换subs(x*y,x,y,0 1;-1 0,1 -1;-2 1) ans = 0 -1 2 0,(2) 将表达式中的老符号用新符号替换。subs(cos(a)+sin(b),a,b,sym(alpha),2)ans = cos(alpha)+sin(2),(3)将符号表达式中的参数进行大量的数据替换subs(
12、exp(a*t),a,-magic(2) % 将参数用22的魔方数组替换ans = exp(-t), exp(-3*t) exp(-4*t), exp(-2*t),2022/12/6,Matlab与科学计算,15,微积分中的符号运算,微积分中可以进行极限、导数、微分、积分、级数展开等解析运算,也可以进行多元函数的微积分运算,结合图形的显示可以更好地帮助我们理解空间微积分的概念和计算。,2022/12/6,Matlab与科学计算,16,求极限,求极限即对表达式进行求极限,首先是定义符号表达式,然后对表达式进行极限运算。极限运算的命令语法为:,2022/12/6,Matlab与科学计算,17,【例
13、11】求极限的简单例子,syms x a t h; limit(sin(x)/x) % 当x趋于0(系统内定极限点为0)limit(1/x,x,0,right) % 1/x趋于0的右极限limit(1/x,x,0,left) % 1/x趋于0的左极限limit(sin(x+h)-sin(x)/h,h,0) v = (1 + a/x)x, exp(-x);limit(v,x,inf,left) % 函数v自变量x趋于无穷大时的左极限,ans =1 ans =infans =-infans =cos(x)ans = exp(a), 0,2022/12/6,Matlab与科学计算,18,syms x
14、 yf=(exp(x)+exp(y)/(cos(x)-sin(y);limit(limit(f,x,0),y,0)limit(limit(f,y,0),x,0),ans=2,2022/12/6,Matlab与科学计算,19,导数,diff(S) 求函数 S的导数diff(S,v) 对函数 S中的符号v进行求导运算diff(S,n) 求函数 S的n阶导数diff(S,v,n) 对函数 S中的符号v求n阶导数,2022/12/6,Matlab与科学计算,20,syms x tdiff(sin(x2)+x*t,x)diff(sin(x2)+x*t,t)ans = 2*cos(x2)*x+tans =
15、 x,2022/12/6,Matlab与科学计算,21,clearsyms x yf=log(exp(2*(x+y2)+(x2+y)+sin(1+x2);fx=diff(f,x)fy=diff(f,y)fxy=diff(fx,y)fyx=diff(fy,x)fxx=diff(fx,x)fyy=diff(fy,y)fxx=diff(f,x,2) fyy=diff(f,y,2),2022/12/6,Matlab与科学计算,22,fx =(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)/(exp(2*x+2*y2)+x2+y+sin(1+x2)fy =(4*y*exp(2*x+
16、2*y2)+1)/(exp(2*x+2*y2)+x2+y+sin(1+x2)fxy =8*y*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)/(exp(2*x+2*y2)+x2+y+sin(1+x2)2*(4*y*exp(2*x+2*y2)+1)fyx =8*y*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)/(exp(2*x+2*y2)+x2+y+sin(1+x2)2*(
17、4*y*exp(2*x+2*y2)+1),2022/12/6,Matlab与科学计算,23,fxx=(4*exp(2*x+2*y2)+2-4*sin(1+x2)*x2+2*cos(1+x2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2fyy=(4*exp(2*x+2*y2)+16*y2*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(4*y*exp(2*x+2*y2)+1)2/(exp(2*x+2*y2
18、)+x2+y+sin(1+x2)2fxx=(4*exp(2*x+2*y2)+2-4*sin(1+x2)*x2+2*cos(1+x2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2fyy=(4*exp(2*x+2*y2)+16*y2*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(4*y*exp(2*x+2*y2)+1)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2,2022/12/6,M
19、atlab与科学计算,24,【例15】求,syms a t x;f=a,t3;t*cos(x), log(x);df=diff(f) %求矩阵f对x的导数dfdt2=diff(f,t,2) %求矩阵f对t的二阶导数dfdxdt=diff(diff(f,x),t) %求二阶混合导数,2022/12/6,Matlab与科学计算,25,df = 0, 0 -t*sin(x), 1/x,dfdt2 = 0, 6*t 0, 0,dfdxdt = 0, 0 -sin(x), 0,二、求偏导数的jacobian命令 设列向量每一个分量w,v为自变量x,y的函数,即则jacobian命令计算矩阵Jacobia
20、n命令的一般形式为: J = jacobian(w;v,x,y),2022/12/6,Matlab与科学计算,26,【例16】直角坐标系转化为球形坐标,即, 这里,为编程方便两个角度分别用l和f来表示syms r l f % 定义符号变量x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l);J = jacobian(x; y; z, r l f) % 注意列向量和行向量,2022/12/6,Matlab与科学计算,27,J = cos(l)*cos(f), -r*sin(l)*cos(f), -r*cos(l)*sin(f) cos(l)
21、*sin(f), -r*sin(l)*sin(f), r*cos(l)*cos(f) sin(l), r*cos(l), 0,对矩阵进行简化: Det_J = simple(det(J) % 利用simple变命令进行简化 Det_J = -cos(l)*r2,2022/12/6,Matlab与科学计算,28,符号积分,符号积分包括不定积分和定积分,其语法分别为:R = int(S)R = int(S,v)R = int(S,a,b)R = int(S,v,a,b),其中:S: 为符号表达式,可有多个参数v: 以S中对v进行求积分运算a: 为定积分下限b: 为定积分上限,2022/12/6,M
22、atlab与科学计算,29,【例18】几个简单的例子syms x t alpha zint(-2*x/(1+x2)2) % 计算不定积分int(x/(1+z2), z) % 以z为自变量计算不定积分int(x*log(1+x), 0, 1) % 计算积分限为0,1的定积分int(2*x, sin(t), 1) % 计算积分限为sin(t),1 的定积分int(exp(t), exp(alpha*t),ans = 1/(1+x2)ans = x*atan(z)ans = 1/4ans = 1-sin(t)2ans = exp(t), 1/alpha*exp(alpha*t),2022/12/6,
23、Matlab与科学计算,30,int函数可以求广义积分,方法是将相应的积分限改为正(负)无穷。,sym x;int(1/x,1,inf) sym x;v= int(1/(1+x2),1,inf) vpa(v),ans =Infv =1/4*pians =.78539816339744830961566084581988,2022/12/6,Matlab与科学计算,31,【例19】 对符号矩阵进行积分,即对矩阵的每一个元素进行积分。syms xn=4A = x.(0:n)*(0:n) % 产生符号矩阵AD = diff(log(A) % 对符号矩阵A进行函数log运算并求导Int_A=int(A
24、) % 对矩阵进行积分,A = 1, 1, 1, 1, 1 1, x, x2, x3, x4 1, x2, x4, x6, x8 1, x3, x6, x9, x12 1, x4, x8, x12, x16,D = 0, 0, 0, 0, 0 0, 1/x, 2/x, 3/x, 4/x 0, 2/x, 4/x, 6/x, 8/x 0, 3/x, 6/x, 9/x, 12/x 0, 4/x, 8/x, 12/x, 16/x,2022/12/6,Matlab与科学计算,32,Int_A = x, x, x, x, x x, 1/2*x2, 1/3*x3, 1/4*x4, 1/5*x5 x, 1/3
25、*x3, 1/5*x5, 1/7*x7, 1/9*x9 x, 1/4*x4, 1/7*x7, 1/10*x10, 1/13*x13 x, 1/5*x5, 1/9*x9, 1/13*x13, 1/17*x17,【例20】求积分,syms x y zF2=int(int(int(x2+y2+z2,z,sqrt(x*y),x2*y),y,sqrt(x),x2),x,1,2)VF2=vpa(F2) % 积分结果用32位数字表示,F2 =1610027357/6563700-6072064/348075*2(1/2)+14912/4641*2(1/4)+64/225*2(3/4)VF2 = 224.92
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 理学 理学第二讲 年数学建模竞赛培训matlab符号计算课件 第二 数学 建模 竞赛 培训 matlab 符号 计算 课件
链接地址:https://www.31ppt.com/p-1566614.html