Matlab讲义5
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
性)。
3
符号常数与数值常数的转换
数值计算受计算机字长的限制,每次数值操作都带 截断误差,故无任采用何种算法均会产生积累误差。 但符号计算的结果是绝对准确的,因此在输出最终 结果时,再根据需要转换为指定精度的数值将减少 误差。 Symbolic Toolbox中与数值精度计算有关的指令有: double(x) 将符号常数x转为16位相对精度浮点数。 digits(n) 设置今后的数值计算以n位相对精度进行。 xs=vpa(x) 在digits指定精度下,给出x的数值型符号结果xs。 xs=vpa(x,n) 在n位相对精度下,给出x的数值型符号结果xs。
数学软件 —— MATLAB
电子教案(五)
——符号运算与基本微积分
1
符号对象的定义
MATLAB中的Symbolic Math Toolbox工具箱对符号 对象支持数学解析式似的推演。故进行公式演算前应 将推演对象先指定为符号对象类型(sym)的数据。 定义基本符号对象的指令有sym、syms两个。它们的 基本使用方式为: f=sym(arg) 把数字/字符串/表达式转换为符号对象f。 f=sym(argn,flagn) 把数值表达式argn转换为flagn格式的符号对象f。 argv=sym(„argv‟,flagv) 按flagv要求把字符串argv定义为符号对象argv。 syms(„argv1‟,‟argv2‟,...) 把字符arg1,arg2等定义为基本符号对象。 syms argv1 argv2 ... 为syms( ... )的简洁形式。
10
符号对象的置换操作
一.子表达式置换操作 为了使表达式简洁易读,MATLAB提供指令 subexpr,用符号变量替换子表达式: [RS,ssub]=subexpr(S,ssub) %用符号变量ssub置换相同的表达式,重写S为RS。 二.通用置换指令 RES=sub(ES,old,new) % 用new置换ES中old后产生RES。 RES=subs(ES,new) % 用new置换ES中自由变量产生RES。
f1 vm
jacobian(f)或jacobian(f,v) 注:当f是向量函数时,求得雅可比矩阵;当f是标 量函数时,求得函数梯度,等价于gradient(f)。 例: syms x1 x2; f=[x1*exp(x2);x2;cos(x1)*sin(x2)]; v=[x1 x2];fjac=jacobian(f,v)
19
一元函数泰勒展开
1. taylor(f) k 0 2. taylor(f,n) n 1 f ( k ) (a) 3. taylor(f,v) ( x a) k k! 4. taylor(f,a) k 0 5. taylor(f,n,a) n 1 f v( n ) (u , a ) 6. taylor(f,n,v,a) (v a ) k k! k 0 例 syms x y a b u v f=a*sin(x)*y^x+u*cos(v); g=exp(v)+b*v^u; Mf=taylor(f),Tf=taylor(f,3,b) Mg=taylor(g,v),Tg=taylor(g,4,v,a)
2
b
a
b
f ( x)dx
f (u, v)dv
a
解: syms a b x; f=[a*x,b*x^2;1/x,sin(x)]; pretty(int(f)) syms x y F2=int(int(x^2+y^2,y,sqrt(x),x^2),x,1,2) 18 VF2=vpa(F2)
D:1 x 2, x y x 2
16
d f ( x) dx n
雅可比矩阵
f v1 1 Jocbian f (v)) ( f n v1 其中 : f (v) [ f1 (v),...,
... ... ...
f n vm T f n (v)] , v (v1 ,..., vm )
12
基本符号微积分
求极限: limit 求导数(偏导数): diff 求雅可比矩阵: jacobian 求积分: int 级数求和: symsum 一元函数泰勒展开:taylor
13
符号微积分(续)
一般符号代数方程(组)的解: solove 符号微分方程(组)求解: dsolove 多元函数完全泰勒展开: mtaylor 求Hess矩阵: hessian Fourier变换及其反变换: fourier,ifourier Laplace变换及其反变换: laplace,ilaplace Z变换及其反变换: ztrans,iztrance
15
求导数与偏导数
(1).
1. diff(f) d (2). f ( x) n 2. diff(f,n) dx dn 3. diff(f,v,n) (3). f (u, v, w) n dv 例: clear all; syms x y z; f=x^2*sin(exp(y^(1/2)))/z; dfdx2=diff(f);pretty(dfdx2) dfdy=diff(f,y);pretty(dfdy)
11
置换操作示例
clear all syms a b c d W [V,D]=eig([a b;c d]); [RVD,W]=subexpr([V;D],W clear all syms a x;f=a*sin(x)+5; f1Hale Waihona Puke Baidusubs(f,'sin(x)',sym('y')) f2=subs(f,{a,x},{2,sym(pi/3)}) f3=subs(f,{a,x},{2,pi/3}) f4=subs(subs(f,a,2),x,0:pi/6:pi) f5=subs(f,{a,x},{0:6,0:pi/6:pi})
7
符号表达式中自由变量的确定
MATLAB指令findsym能帮助用户了解系统对符号 表达式中的独立自变量是如何自动认定的。具体方 法如下: findsym(EXPR) 确认表达式EXPR中所有自由符号变量。 findsym(EXPR,N) 从EXPR中确认出靠x最近的N个独立自变量。 说明: EXPR可以是符号矩阵。此时指令对自由变量的确 认是对整个矩阵进行,而非元素。 按照自然科学习惯,MATLAB总是默认将x以及最 靠近x的字母表示的变量优先确认为独立的自由变 量。(小写字母总是比大写字母更靠近x)
5
符号计算的运算符和基本函数
由于采用了重载技术,符号表达式中的运算符以 及内建函数与数值计算形式几乎一致。下面进行 简要归纳。 基本运算符: “+”,“-”,“*”,“\”,“/”,“^”; “.*”,“./”,“.\”,“.^”;“ .΄ ”,“ ΄ ” 。 关系运算符: “==”,“~=” (符号对象间比较时,无大小概念) 。 三角函数、双曲函数及其反函数。 指数函数、对数函数等(exp、log、sqrt)。 复数函数(conj,real,imag,abs;但无求辐角指令)。 矩阵代数指令 (diag,triu,tril,inv,det,rank) (rref,null,colspace,poly,expm,eig,svd)。
9
符号表达式的操作
符号表达式常用的一些基本操作指令有: collect(EXPR [,v]) 合并同类项。 expand(EXPR) 对指定项展开。 factor(EXPR) 因式/因子分解。 horner(EXPR) 转换成嵌套形式。 [N,D]=numden(EXPR) 通分。 simplify(EXPR) 恒等式简化。 pretty(EXPR) 习惯方式显示。 simple(EXPR) 转换成最简短形式。
6
符号对象的识别
数值对象、符号对象、字符串对象各自遵 循不同的运算法则,但外形常常很相似。 MATLAB提供class,isa,whos等指令对它们 进行识别。另外,观察基本工作空间浏览 器也可知道已有对象的类型。 例如: vs=sym('f=x+y'),vc='f=x+y',vf=5.2+1.8 class(vs),class(vc),class(vf) isa(vs,'sym'),isa(vc,'char'),isa(vf,'double') whos
8
确定自由变量示例
syms a b x X Y; k=sym('3'); z=sym('c*sqrt(delta)+y*sin(theta)'); EXPR=a*z*X+(b*x^2+k)*Y; % k为常量,z不自由 findsym(EXPR) % ans=X,Y,a,b,c,delta,theta,x,y findsym(EXPR,1) % ans=x findsym(EXPR,2) % ans=x,y findsym(EXPR,3) % ans=x,y,theta syms a b t u v x y; A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v ] findsym(A,1) % ans=x 对整个矩阵的元素判断。
17
求积分(无穷限广义积分)
(1). f ( x )dx (3). int(f) int(f,v) (2). f (u , v)dv (4). int(f,a,b) a,b可取inf,-inf int(f,v,a,b) 2 x 2 2 ( x y )dxdy dx ( x 2 y 2 )dy 例 1 x
14
求函数极限
(1). lim f ( x ) 1. limit(f) x 0 ( 2). lim f (u , v ) 2. limit(f,v) v 0 (3). lim f (u , v ) 3. limit(f,v,a) v a 注意:a可以为inf或-inf。 例: clear all; syms x y c; f=sin(c+2*y/x); limit(f,y),limit(f,x,inf),limit(f,c)
4
字符表达式转符号对象示例
y=sym(„2*sin(x)*cos(x)‟) %字符表达式化为符号变量。 y=simple(y) %把y表示的符号表达式化为最简形式。 syms fai1 fail2; y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) syms a11 a12 a21 a22; A=[a11,a12;a21,a22] DA=det(A),IA=inv(A),EA=eig(A) 注意:进行符号计算前,首先定义基本符号对象(可 以是常数、变量、表达式),然后利用这些基本符号 对象去构成新的符号表达式,进行所需的符号运算。 由符号对象构成表达式生成的衍生对象通常仍为符 号对象。
2
sym、syms的选项简要说明
f=sym(argn,flagn)中的选项flagn可取: ‘d‟ 最接近的十进制浮点数精确表示。 ‘r‟ 最接近的有理表示(缺省设置)。 所谓“有理”表示,是指用两个正整数p,q构成的: p/q,p*pi/q,sqrt(p),2^q,10^q形式之一表示。 argv=sym(„argv‟,flagv)中选项flagv可取: ‘positive‟ 限定argv为“正实数型”符号变量。 ‘real‟ 限定argv为“实数型”符号变量。 ‘unreal‟ 指定argv为“非实数型”变量(清除argv的实数属
级数求和
(1).
f ( x)
x 0 b
x 1
symsum(f) ( 2). f ( x ) symsum(f,a,b) xa v 1 symsum(f,v) (3). f (u, v) v 0 symsum(f,v,a,b) b 例 (4). f (u, v) va syms k t; f1=[t k^3]; f2=[1/(2*k-1)^2,(-1)^k/k]; s1=simple(symsum(f1)) s2=simple(symsum(f2,1,inf))
3
符号常数与数值常数的转换
数值计算受计算机字长的限制,每次数值操作都带 截断误差,故无任采用何种算法均会产生积累误差。 但符号计算的结果是绝对准确的,因此在输出最终 结果时,再根据需要转换为指定精度的数值将减少 误差。 Symbolic Toolbox中与数值精度计算有关的指令有: double(x) 将符号常数x转为16位相对精度浮点数。 digits(n) 设置今后的数值计算以n位相对精度进行。 xs=vpa(x) 在digits指定精度下,给出x的数值型符号结果xs。 xs=vpa(x,n) 在n位相对精度下,给出x的数值型符号结果xs。
数学软件 —— MATLAB
电子教案(五)
——符号运算与基本微积分
1
符号对象的定义
MATLAB中的Symbolic Math Toolbox工具箱对符号 对象支持数学解析式似的推演。故进行公式演算前应 将推演对象先指定为符号对象类型(sym)的数据。 定义基本符号对象的指令有sym、syms两个。它们的 基本使用方式为: f=sym(arg) 把数字/字符串/表达式转换为符号对象f。 f=sym(argn,flagn) 把数值表达式argn转换为flagn格式的符号对象f。 argv=sym(„argv‟,flagv) 按flagv要求把字符串argv定义为符号对象argv。 syms(„argv1‟,‟argv2‟,...) 把字符arg1,arg2等定义为基本符号对象。 syms argv1 argv2 ... 为syms( ... )的简洁形式。
10
符号对象的置换操作
一.子表达式置换操作 为了使表达式简洁易读,MATLAB提供指令 subexpr,用符号变量替换子表达式: [RS,ssub]=subexpr(S,ssub) %用符号变量ssub置换相同的表达式,重写S为RS。 二.通用置换指令 RES=sub(ES,old,new) % 用new置换ES中old后产生RES。 RES=subs(ES,new) % 用new置换ES中自由变量产生RES。
f1 vm
jacobian(f)或jacobian(f,v) 注:当f是向量函数时,求得雅可比矩阵;当f是标 量函数时,求得函数梯度,等价于gradient(f)。 例: syms x1 x2; f=[x1*exp(x2);x2;cos(x1)*sin(x2)]; v=[x1 x2];fjac=jacobian(f,v)
19
一元函数泰勒展开
1. taylor(f) k 0 2. taylor(f,n) n 1 f ( k ) (a) 3. taylor(f,v) ( x a) k k! 4. taylor(f,a) k 0 5. taylor(f,n,a) n 1 f v( n ) (u , a ) 6. taylor(f,n,v,a) (v a ) k k! k 0 例 syms x y a b u v f=a*sin(x)*y^x+u*cos(v); g=exp(v)+b*v^u; Mf=taylor(f),Tf=taylor(f,3,b) Mg=taylor(g,v),Tg=taylor(g,4,v,a)
2
b
a
b
f ( x)dx
f (u, v)dv
a
解: syms a b x; f=[a*x,b*x^2;1/x,sin(x)]; pretty(int(f)) syms x y F2=int(int(x^2+y^2,y,sqrt(x),x^2),x,1,2) 18 VF2=vpa(F2)
D:1 x 2, x y x 2
16
d f ( x) dx n
雅可比矩阵
f v1 1 Jocbian f (v)) ( f n v1 其中 : f (v) [ f1 (v),...,
... ... ...
f n vm T f n (v)] , v (v1 ,..., vm )
12
基本符号微积分
求极限: limit 求导数(偏导数): diff 求雅可比矩阵: jacobian 求积分: int 级数求和: symsum 一元函数泰勒展开:taylor
13
符号微积分(续)
一般符号代数方程(组)的解: solove 符号微分方程(组)求解: dsolove 多元函数完全泰勒展开: mtaylor 求Hess矩阵: hessian Fourier变换及其反变换: fourier,ifourier Laplace变换及其反变换: laplace,ilaplace Z变换及其反变换: ztrans,iztrance
15
求导数与偏导数
(1).
1. diff(f) d (2). f ( x) n 2. diff(f,n) dx dn 3. diff(f,v,n) (3). f (u, v, w) n dv 例: clear all; syms x y z; f=x^2*sin(exp(y^(1/2)))/z; dfdx2=diff(f);pretty(dfdx2) dfdy=diff(f,y);pretty(dfdy)
11
置换操作示例
clear all syms a b c d W [V,D]=eig([a b;c d]); [RVD,W]=subexpr([V;D],W clear all syms a x;f=a*sin(x)+5; f1Hale Waihona Puke Baidusubs(f,'sin(x)',sym('y')) f2=subs(f,{a,x},{2,sym(pi/3)}) f3=subs(f,{a,x},{2,pi/3}) f4=subs(subs(f,a,2),x,0:pi/6:pi) f5=subs(f,{a,x},{0:6,0:pi/6:pi})
7
符号表达式中自由变量的确定
MATLAB指令findsym能帮助用户了解系统对符号 表达式中的独立自变量是如何自动认定的。具体方 法如下: findsym(EXPR) 确认表达式EXPR中所有自由符号变量。 findsym(EXPR,N) 从EXPR中确认出靠x最近的N个独立自变量。 说明: EXPR可以是符号矩阵。此时指令对自由变量的确 认是对整个矩阵进行,而非元素。 按照自然科学习惯,MATLAB总是默认将x以及最 靠近x的字母表示的变量优先确认为独立的自由变 量。(小写字母总是比大写字母更靠近x)
5
符号计算的运算符和基本函数
由于采用了重载技术,符号表达式中的运算符以 及内建函数与数值计算形式几乎一致。下面进行 简要归纳。 基本运算符: “+”,“-”,“*”,“\”,“/”,“^”; “.*”,“./”,“.\”,“.^”;“ .΄ ”,“ ΄ ” 。 关系运算符: “==”,“~=” (符号对象间比较时,无大小概念) 。 三角函数、双曲函数及其反函数。 指数函数、对数函数等(exp、log、sqrt)。 复数函数(conj,real,imag,abs;但无求辐角指令)。 矩阵代数指令 (diag,triu,tril,inv,det,rank) (rref,null,colspace,poly,expm,eig,svd)。
9
符号表达式的操作
符号表达式常用的一些基本操作指令有: collect(EXPR [,v]) 合并同类项。 expand(EXPR) 对指定项展开。 factor(EXPR) 因式/因子分解。 horner(EXPR) 转换成嵌套形式。 [N,D]=numden(EXPR) 通分。 simplify(EXPR) 恒等式简化。 pretty(EXPR) 习惯方式显示。 simple(EXPR) 转换成最简短形式。
6
符号对象的识别
数值对象、符号对象、字符串对象各自遵 循不同的运算法则,但外形常常很相似。 MATLAB提供class,isa,whos等指令对它们 进行识别。另外,观察基本工作空间浏览 器也可知道已有对象的类型。 例如: vs=sym('f=x+y'),vc='f=x+y',vf=5.2+1.8 class(vs),class(vc),class(vf) isa(vs,'sym'),isa(vc,'char'),isa(vf,'double') whos
8
确定自由变量示例
syms a b x X Y; k=sym('3'); z=sym('c*sqrt(delta)+y*sin(theta)'); EXPR=a*z*X+(b*x^2+k)*Y; % k为常量,z不自由 findsym(EXPR) % ans=X,Y,a,b,c,delta,theta,x,y findsym(EXPR,1) % ans=x findsym(EXPR,2) % ans=x,y findsym(EXPR,3) % ans=x,y,theta syms a b t u v x y; A=[a+b*x,sin(t)+u;x*exp(-t),log(y)+v ] findsym(A,1) % ans=x 对整个矩阵的元素判断。
17
求积分(无穷限广义积分)
(1). f ( x )dx (3). int(f) int(f,v) (2). f (u , v)dv (4). int(f,a,b) a,b可取inf,-inf int(f,v,a,b) 2 x 2 2 ( x y )dxdy dx ( x 2 y 2 )dy 例 1 x
14
求函数极限
(1). lim f ( x ) 1. limit(f) x 0 ( 2). lim f (u , v ) 2. limit(f,v) v 0 (3). lim f (u , v ) 3. limit(f,v,a) v a 注意:a可以为inf或-inf。 例: clear all; syms x y c; f=sin(c+2*y/x); limit(f,y),limit(f,x,inf),limit(f,c)
4
字符表达式转符号对象示例
y=sym(„2*sin(x)*cos(x)‟) %字符表达式化为符号变量。 y=simple(y) %把y表示的符号表达式化为最简形式。 syms fai1 fail2; y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2)) syms a11 a12 a21 a22; A=[a11,a12;a21,a22] DA=det(A),IA=inv(A),EA=eig(A) 注意:进行符号计算前,首先定义基本符号对象(可 以是常数、变量、表达式),然后利用这些基本符号 对象去构成新的符号表达式,进行所需的符号运算。 由符号对象构成表达式生成的衍生对象通常仍为符 号对象。
2
sym、syms的选项简要说明
f=sym(argn,flagn)中的选项flagn可取: ‘d‟ 最接近的十进制浮点数精确表示。 ‘r‟ 最接近的有理表示(缺省设置)。 所谓“有理”表示,是指用两个正整数p,q构成的: p/q,p*pi/q,sqrt(p),2^q,10^q形式之一表示。 argv=sym(„argv‟,flagv)中选项flagv可取: ‘positive‟ 限定argv为“正实数型”符号变量。 ‘real‟ 限定argv为“实数型”符号变量。 ‘unreal‟ 指定argv为“非实数型”变量(清除argv的实数属
级数求和
(1).
f ( x)
x 0 b
x 1
symsum(f) ( 2). f ( x ) symsum(f,a,b) xa v 1 symsum(f,v) (3). f (u, v) v 0 symsum(f,v,a,b) b 例 (4). f (u, v) va syms k t; f1=[t k^3]; f2=[1/(2*k-1)^2,(-1)^k/k]; s1=simple(symsum(f1)) s2=simple(symsum(f2,1,inf))