1、数学软件数学软件 Matlab Matlab 符号运算1第1页主要内容主要内容n Matlab 符号运算介绍符号运算介绍n 符号对象与基本符号运算符号对象与基本符号运算n symvar、subs 和和 vpan 常见符号计算常见符号计算(重点内容)(重点内容)2第2页符号运算符号运算l 计算以计算以推理方式推理方式进行,不受计算误差累积所带来困扰进行,不受计算误差累积所带来困扰 l 符号计算指令调用比较简单,与教科书上公式相近符号计算指令调用比较简单,与教科书上公式相近 l 符号计算能够给出完全正确封闭解,或任意精度数值解符号计算能够给出完全正确封闭解,或任意精度数值解(封闭解不存在时(封闭解
2、不存在时)l 符号计算所需符号计算所需运行时间相对较长运行时间相对较长l 符号运算特点符号运算特点 3第3页Matlab 符号运算符号运算l Matlab 符号运算是经过符号运算是经过符号数学工具箱符号数学工具箱(Symbolic Math Toolbox)来实现。来实现。l Matlab 符号数学工具箱能够完成几乎全部得符号运算功符号数学工具箱能够完成几乎全部得符号运算功效,如:效,如:符号表示式运算符号表示式运算,符号矩阵运算符号矩阵运算,符号微积分符号微积分,符号作图符号作图,符号代数方程求解符号代数方程求解,符号微分方程求解符号微分方程求解等。等。l 另外,该工具箱还支持另外,该工具箱
3、还支持可变精度运算可变精度运算,即支持以指定精,即支持以指定精度返回结果。度返回结果。l Matlab 符号运算符号运算 4第4页符号运算举例符号运算举例l 求一元二次方程求一元二次方程 ax2+bx+c=0 根根 solve(a*x2+b*x+c=0)l 求根求根 f(x)=(cos x)2 一次导数一次导数x=sym(x);diff(cos(x)2)l 计算计算 f(x)=x2 在区间在区间 a,b 上定积分上定积分syms a b x;int(x2,a,b)5第5页内容提要内容提要n Matlab 符号运算介绍符号运算介绍n 符号对象与基本符号运算符号对象与基本符号运算n symvar、
4、subs 和和 vpan 常见符号计算常见符号计算6第6页l 在进行符号运算时,必须先定义基本在进行符号运算时,必须先定义基本符号对象符号对象,能够是,能够是 符号变量符号变量、符号表示式符号表示式等等 l 符号对象是一个数据结构符号对象是一个数据结构 符号对象符号对象l 符号表示式符号表示式:含有符号对象表示式称含有符号对象表示式称l 符号矩阵符号矩阵/数组数组:元素为符号表示式矩阵:元素为符号表示式矩阵/数组数组 l Matlab 符号对象符号对象 7第7页l sym 用来建立用来建立单个单个符号对象,普通调用格式为:符号对象,普通调用格式为:l 符号对象符号对象定义定义/申明申明:sym
5、、syms符号对象符号对象建立建立例:例:a=sym(a)符号变量符号变量=sym(x)参数参数 x 能够是一个数或数值矩阵,也能够是字符串能够是一个数或数值矩阵,也能够是字符串a 是符号变量是符号变量b 是符号常量是符号常量b=sym(1/3)C 是符号矩阵是符号矩阵C=sym(1 ab;c d)8第8页符号对象符号对象建立建立syms 符号变量符号变量1 符号变量符号变量2.符号变量符号变量n 例:例:syms a b c;a=sym(a);b=sym(b);c=sym(c);l syms 用来申明用来申明多个多个符号变量,普通调用格式为:符号变量,普通调用格式为:l 符号对象符号对象定义
6、定义/申明申明:sym、syms9第9页例:例:l 建立符号表示式通常有以下建立符号表示式通常有以下 2 种方法:种方法:(1)用用 sym 函数直接建立符号表示式函数直接建立符号表示式 (2)使用已经定义符号变量组成符号表示式使用已经定义符号变量组成符号表示式 y=sym(sin(x)+cos(x)x=sym(x);y=sin(x)+cos(x)符号符号表示式表示式syms x;y=sin(x)+cos(x)l 符号表示式:符号表示式:含符号对象表示式含符号对象表示式10第10页Matlab 符号运算采取运算符和基本函数,在形状、名称和符号运算采取运算符和基本函数,在形状、名称和使用上,都与
7、数值计算中运算符和基本函数完全相同使用上,都与数值计算中运算符和基本函数完全相同基本符号基本符号运算运算l 普通运算:普通运算:l 数组运算:数组运算:l 矩阵转置:矩阵转置:l 基本运算基本运算l 基本数学函数基本数学函数三角函数与反三角函数、三角函数与反三角函数、指数函数、对数函数等指数函数、对数函数等sin,cos,asin,acos,exp,log,abs,diag,tril,triu,.+-*/.*./.11第11页符号符号矩阵矩阵A=sym(1+x,sin(x);5,exp(x)l 使用使用 sym 函数直接生成函数直接生成l 将数值矩阵转化成符号矩阵将数值矩阵转化成符号矩阵l 符
8、号矩阵中元素引用和修改符号矩阵中元素引用和修改B=2/3,sqrt(2);5.2,log(3);C=sym(B)A=sym(1+x,sin(x);5,exp(x);A(1,2)%引用引用A(2,2)=sym(cos(x)%重新赋值重新赋值l 符号矩阵符号矩阵生成生成12第12页内容提要内容提要n Matlab 符号运算介绍符号运算介绍n 符号对象与基本符号运算符号对象与基本符号运算n symvar、subs 和和 vpan 常见符号计算常见符号计算13第13页symvarsymvar(s)symvar(s,N)l 列出符号表示式中符号变量列出符号表示式中符号变量l 按字母次序列出按字母次序列出
9、符号表示式符号表示式 s 中全部符号变量中全部符号变量l 列出列出符号表示式符号表示式 s 中离中离 x 最近最近 N 个符号变量个符号变量l 若有两个符号变量与若有两个符号变量与 x 距离相等,则距离相等,则ASCII 码大者优先码大者优先l 常量常量 pi,i,j 不作为符号变量不作为符号变量f=sym(2*v-3*y+z2+5*a)symvar(f)symvar(f,2)例:例:14第14页subsl 用用 a 替换替换符号表示式符号表示式 s 中符号变量中符号变量 xl 这里这里 a 能够是能够是 数数/变量变量/表示式表示式 或或 符号变量符号变量/表示式表示式l 符号替换符号替换l
10、 用给定用给定数据数据替换符号表示式中替换符号表示式中指定符号变量指定符号变量subs(s,x,a)syms x y u v;f1=2*x+y-1;f2=subs(f1,x,u)f3=subs(f1,y,2+3)f3=subs(f1,x,y,u,v)例:例:15第15页subs 举例举例f=sym(2*u);f1=subs(f,u,2)f2=subs(f,u,u+2)f3=subs(f,u,1,2)a=3;f4=subs(f2,u,a+2)f5=subs(f2,u,a+2)syms x y;f6=subs(f,u,x+y)f7=subs(f6,x,y,1,2)f8=subs(f6,x,y,x+
11、y,x+y)例:例:指出下面各条语句输出结果指出下面各条语句输出结果符号变量若没有申明,则需要加上单引号!符号变量若没有申明,则需要加上单引号!f=2*uf1=4f2=2*u+4f3=2,4f4=14f5=2*a+8f6=2*x+2*yf7=6f8=4*x+4*y16第16页vpal 计算表示式计算表示式 s 值,保留值,保留 n 位有效数字位有效数字l 返回值是符号对象返回值是符号对象l 可变精度可变精度vpa(s,n)x1=vpa(sin(pi/2),10)x2=vpa(pi3,3)x3=vpa(pi,100)例:例:17第17页内容提要内容提要n Matlab 符号运算介绍符号运算介绍n
12、 符号对象与基本符号运算符号对象与基本符号运算n symvar、subs 和和 vpan 常见符号计算常见符号计算(六类运算)(六类运算)l 因式分解、展开、合并、简化因式分解、展开、合并、简化、通分通分和反函数和反函数等等l 计算极限计算极限l 计算导数计算导数l 计算积分计算积分l 符号符号级数级数求和求和l 代数方程和微分方程代数方程和微分方程求解求解(重点与难点)(重点与难点)18第18页因式分解因式分解factor(f)syms x;f=x6+1;factor(f)l factor 也可用于正整数分解也可用于正整数分解s=factor(100)factor(1234567890123
13、4567890)%ERRORfactor(sym(12345678901234567890)对大整数进行因式分解时能够先将其转化成符号常量对大整数进行因式分解时能够先将其转化成符号常量例:例:例:例:l 因式分解因式分解19第19页函数展开函数展开expand(f)syms x;f=(x+1)6;expand(f)l 多项式展开多项式展开l 三角函数展开三角函数展开syms x y;f=sin(x+y);expand(f)l 函数展开函数展开例:例:例:例:20第20页合并同类项合并同类项syms x y;f=x2*y+y*x+y2+2*x;collect(f)collect(f,y)例:例:
14、collect(f,v)%按指定变量按指定变量 v v 进行进行合并合并collect(f)%按按默认默认变量变量进行进行合并合并l 合并同类项合并同类项l 默认变量默认变量:symvar(f)返回结果返回结果syms u v;g=u2*v+u*v3-u2+v;collect(g)21第21页函数简化函数简化y=simplify(f)l 函数简化函数简化l 对对符号符号表示式表示式 f 进行简化进行简化syms x;f=sin(x)2+cos(x)2;y=simplify(f)例:例:22第22页函数简化函数简化y=simple(f)l 函数简化函数简化l 对对 f 尝试各种不一样尝试各种不一
15、样方法(包含方法(包含 simplify)进行简化)进行简化,以寻求其以寻求其最简短形式最简短形式例:例:化简化简syms x;f=(cos(x)2-sin(x)2)*sin(2*x)*(exp(2*x).-2*exp(x)+1)/(exp(2*x)-1);y1=simplify(f)y2=simple(f)23第23页函数简化函数简化N,D=numden(f)l 通分通分l N 为通分后分子,为通分后分子,D 为通分后分母为通分后分母syms x y;f=x/y+y/x;N,D=numden(f)n,d=numden(sym(112/1024)例:例:24第24页horner 多项式多项式l
16、 horner 多项式:嵌套形式多项式多项式:嵌套形式多项式syms x;f=x4+2*x3+4*x2+x+1;g=horner(f)例:例:25第25页求反函数求反函数l 反函数反函数finverse(f,v)%求求 f 关于指定变量关于指定变量 v 反函数反函数finverse(f)%求求 f 关于关于默认变量默认变量反函数反函数syms x t;f=x2+2*t;g1=finverse(f,x)g2=finverse(f,t)例:例:计算函数计算函数 反函数反函数26第26页计算极限计算极限limit(f,x,a)%计算计算limit(f,a)%当当默认变量默认变量趋向于趋向于 a 时极
17、限时极限limit(f)%计算计算 a=0 时极限时极限limit(f,x,a,right)%计算右极限计算右极限limit(f,x,a,left)%计算左极限计算左极限例:例:计算计算 ,syms x h n;L=limit(log(x+h)-log(x)/h,h,0)M=limit(1-x/n)n,n,inf)l 计算极限计算极限27第27页计算计算导数导数g=diff(f,v)%求符号表示式求符号表示式 f 关于变量关于变量 v 导数导数g=diff(f)%计算关于计算关于默认变量默认变量导数导数g=diff(f,v,n)%求求 f 关于关于 v n 阶导数阶导数l 计算导数计算导数sy
18、ms x;f=sin(x)+3*x2;g1=diff(f,x)g2=diff(f,x,3)例:例:28第28页计算计算积分积分int(f,v,a,b)%计算定积分计算定积分int(f,a,b)%计算关于计算关于默认变量默认变量定积分定积分int(f,v)%计算不定积分计算不定积分int(f)%计算关于计算关于默认变量默认变量不定积分不定积分syms x;f=(x2+1)/(x2-2*x+2)2;I=int(f,x)K=int(exp(-x2),x,0,inf)例:例:计算计算 和和l 计算积分计算积分29第29页符号符号级数求和级数求和syms n;f=1/n2;S=symsum(f,n,1,
19、inf)S100=symsum(f,n,1,100)symsum(f,v,a,b)%级数求和级数求和symsum(f,a,b)%关于关于默认变量默认变量求和求和例:例:计算级数计算级数 及其前及其前100项部分和项部分和 S100例:例:计算函数级数计算函数级数syms n x;f=x/n2;S=symsum(f,n,1,inf)l 符号级数求和符号级数求和30第30页代数方程代数方程求解求解solve(f,v)%求方程关于指定自变量解求方程关于指定自变量解详细使用方法见详细使用方法见Matlab08:多项式运算与代数方程求:多项式运算与代数方程求解器解器l 代数方程求解代数方程求解l 这里这
20、里 f 能够能够用字符串表示用字符串表示或或符号表示式符号表示式l solve 也可解方程组(通常是非线性)也可解方程组(通常是非线性)l 得不到解析解时,给出数值解得不到解析解时,给出数值解例:例:solve(2*x-3)%或或 solve(2*x-3=0)syms x;solve(2*x-3)%不能写成不能写成 solve(2*x-3=0)syms x;solve(2*x-sin(x)+1)31第31页微分方程微分方程求解求解q 用用 Maltab自带函数自带函数 解初值问题解初值问题u 求微分方程解析解:求微分方程解析解:dsolveu 求微分方程数值解求微分方程数值解*(自学,选学)(
21、自学,选学):ode45、ode23、ode113、ode23t、ode15s、ode23s、ode23tb32第32页dsolve 求解析解求解析解q dsolve 使用使用y=dsolve(eq1,eq2,.,cond1,cond2,.,v)其中其中 y 为输出,为输出,eq1、eq2、.为微分方程,为微分方程,cond1、cond2、.为初值条件,为初值条件,v 为自变量。为自变量。例例 1:求微分方程求微分方程 通解,并验证。通解,并验证。y=dsolve(Dy+2*x*y=x*exp(-x2),x)syms x;diff(y)+2*x*y-x*exp(-x2)33第33页dsolve
22、 使用使用q 几点说明几点说明l 假如省略初值条件,则表示求通解;假如省略初值条件,则表示求通解;l 假如省略自变量,则默认自变量为假如省略自变量,则默认自变量为 t dsolve(Dy=2*x,x);dy/dx=2xdsolve(Dy=2*x);dy/dt=2xl 若找不到解析解,则返回其积分形式。若找不到解析解,则返回其积分形式。l 微分方程中用微分方程中用 D 表示对表示对 自变量自变量 导数,如:导数,如:Dy y;D2y y;D3y y34第34页例例 2:求微分方程求微分方程 在初值条件在初值条件 下特解,并画出解函数图形。下特解,并画出解函数图形。y=dsolve(x*Dy+y-
23、exp(x)=0,y(1)=2*exp(1),x)ezplot(y);dsolve 使用使用35第35页例例3:求微分方程组求微分方程组 在初值条件在初值条件 下特解,并画出解函数图形。下特解,并画出解函数图形。x,y=dsolve(Dx+5*x+y=exp(t),Dy-x-3*y=0,.x(0)=1,y(0)=0,t)ezplot(x,y,0,1.3);注:解微分方程组时,假如所给输出个数与方程个数相同,注:解微分方程组时,假如所给输出个数与方程个数相同,则方程组解则方程组解按词典次序按词典次序输出;假如只给一个输出,则输出是输出;假如只给一个输出,则输出是一个包含解一个包含解结构结构(st
24、ructure)类型数据。类型数据。dsolve 使用使用36第36页例:例:x,y=dsolve(Dx+5*x=0,Dy-3*y=0,.x(0)=1,y(0)=1,t)r=dsolve(Dx+5*x=0,Dy-3*y=0,.x(0)=1,y(0)=1,t)这里返回这里返回 r 是一个是一个 结构类型结构类型 数据数据r.x%查看解函数查看解函数 x(t)r.y%查看解函数查看解函数 y(t)只有极少一部分微分方程(组)能求出解析解。只有极少一部分微分方程(组)能求出解析解。大部分微分方程(组)只能利用大部分微分方程(组)只能利用数值方法数值方法求数值解。求数值解。dsolve输出个数只能为一
25、个输出个数只能为一个 或或 与方程个数相等与方程个数相等dsolve 使用使用37第37页上机作业上机作业1.教材教材P33习题习题610,写入文件,写入文件m04_1.m;2.教材教材P32习题习题4,写入文件,写入文件m04_2.m;3.求解以下微分方程(组),写入文件求解以下微分方程(组),写入文件m04_3.m,而且,而且对于初值问题还要求画出解函数图形;对于初值问题还要求画出解函数图形;(5)(6)选做。选做。38第38页上机要求上机要求l将完成每小题所用命令写入一个要求文件名文件中将完成每小题所用命令写入一个要求文件名文件中l然后将这些文件作为附件,经过然后将这些文件作为附件,经过
26、 foxmail 以邮件形式发给以邮件形式发给 adminsystem.maill邮件主题为:邮件主题为:机号机号-学号学号-姓名姓名l其中机号为其中机号为 两位数两位数l三个字段之间用英文状态下减号链接三个字段之间用英文状态下减号链接q 上机要求上机要求强调强调39第39页求微分方程数值解求微分方程数值解*(自学,选学)(自学,选学)T,Y=solver(odefun,tspan,y0)其中其中 y0 为初值条件,为初值条件,tspan为求解区间;为求解区间;Matlab在数值求解在数值求解时时自动对求解区间进行分割自动对求解区间进行分割,T(列向量列向量)中返回是分割点值中返回是分割点值(
27、自变量自变量),Y(数组数组)中返回是这些分割点上近似解,其列数等中返回是这些分割点上近似解,其列数等于因变量个数。于因变量个数。solver 为为MatlabODE求解器求解器(能够是(能够是 ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb)没有一个算法能够有效地处理全部没有一个算法能够有效地处理全部 ODE 问题,所以问题,所以MATLAB 提供了各种提供了各种ODE求解器求解器,对于不一样对于不一样ODE,能够调用不一样能够调用不一样求解器求解器。40第40页MatlabODE求解器求解器*(自学,选学)(自学,选学)求解器求解器ODE类型
28、类型特点特点说明说明ode45非刚性非刚性单步法;单步法;4 4,5 5 阶阶 R-K R-K 方法;累计方法;累计截断误差为截断误差为 (x)3n大部分场所首选方法大部分场所首选方法ode23非刚性非刚性单步法;单步法;2 2,3 3 阶阶 R-K R-K 方法;累计方法;累计截断误差为截断误差为 (x)3n使用于精度较低情形使用于精度较低情形ode113非刚性非刚性多步法;多步法;Adams算法;高低精度均算法;高低精度均可到可到 10-310-6计算时间比计算时间比 ode45 短短ode23t适度刚性适度刚性n采取梯形算法采取梯形算法适度刚性情形适度刚性情形ode15s刚性刚性多步法;
29、多步法;Gears Gears 反向数值微分;反向数值微分;精度中等精度中等若若 ode45 失效时,可尝失效时,可尝试使用试使用ode23s刚性刚性单步法;单步法;2 2 阶阶Rosebrock Rosebrock 算法;低算法;低精度精度当精度较低时,计算时间当精度较低时,计算时间比比 ode15s 短短ode23tb刚性刚性梯形算法;低精度梯形算法;低精度当精度较低时,计算时间当精度较低时,计算时间比比ode15s短短41第41页参数说明参数说明*(自学,选学)(自学,选学)odefun 为为显式常微分方程显式常微分方程,能够用命令,能够用命令 inline 定义,或定义,或在在函数文件
30、函数文件中定义,然后经过函数句柄调用。中定义,然后经过函数句柄调用。fun=inline(-2*y+2*x2+2*x,x,y);x,y=ode23(fun,0,0.5,1);注:注:也能够在也能够在 tspan 中指定对求解区间分割,如:中指定对求解区间分割,如:x,y=ode23(fun,0:0.1:0.5,1);%此时此时 x=0:0.1:0.5T,Y=solver(odefun,tspan,y0)求初值问题求初值问题 数值解,求解范围为数值解,求解范围为 0,0.5例例:42第42页数值求解举例数值求解举例*(自学,选学)(自学,选学)假如需求解问题是假如需求解问题是高阶高阶常微分方程,
31、则需将其化为常微分方程,则需将其化为一阶常微一阶常微分方程组分方程组,此时必须用,此时必须用函数文件函数文件来定义该常微分方程组。来定义该常微分方程组。令令 ,则原方程可化为,则原方程可化为 求解求解 Ver der Pol 初值问题初值问题例例:43第43页数值求解举例数值求解举例*(自学,选学)(自学,选学)l 先编写函数文件先编写函数文件 verderpol.mfunction xprime=verderpol(t,x)global mu;xprime=x(2);mu*(1-x(1)2)*x(2)-x(1);l 再编写脚本文件再编写脚本文件 vdpl.m,在命令窗口直接运行该文件。,在命令窗口直接运行该文件。clear;global mu;mu=7;y0=1;0;t,x=ode45(verderpol,0,40,y0);plot(t,x(:,1),r-,t,x(:,2),b-);44第44页
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100