matlab 符号运算介绍
DESCRIPTION
Matlab 符号运算介绍. Matlab 符号运算(二). Matlab 符号运算是通过符号数学工具箱( Symbolic Math Toolbox ) 来实现的。. 符号对象的建立: sym 和 syms. 例:. . >> x=sym( ‘ x ’ ) ; >> y=sym( ‘ y ’ ) ; >> z=sym( ‘ z ’ ) ;. >> syms x y z. 符号对象建立时可以附加属性: real 、 positive 和 unreal. Matlab 符号运算(二). 表明 x 是实的. - PowerPoint PPT PresentationTRANSCRIPT
Matlab 符号运算介绍 Matlab 符 号 运 算 是 通 过 符 号 数 学 工 具 箱( Symbolic Math Toolbox )来实现的。
Matlab 符号运算(二)
符号对象的建立: sym 和 syms例: >> syms x y z >> x=sym(‘x’);>> y=sym(‘y’);>> z=sym(‘z’);
<==>
符号对象建立时可以附加属性: real 、 positive 和 unreal
>> k=sym('k','positive')
>> x=sym('x','real')
>> x=sym('x','unreal')
表明 x 是实的
Matlab 符号运算(二)
表明 k 是正的去掉 x 的附加属性
符号表达式的建立
>> f2=sym(’sin(x)+cos(x)’)
>> syms x>> f1=sin(x)+cos(x)
>> f3=’sin(x)+cos(x)’ 用这种方法创建的符号表达式对空格很敏感,不要在字符间随意添加空格!
Matlab 符号运算(二)
推荐!
符号变量与符号常量>> a=sym(‘a’);>> b=sym(‘5’);
>> c=sym(5); b 、 c 有区别吗?hint : help sym
相关函数 findsym: 查找符号表达式中的符号变量
findsym(f)按字母顺序列出符号表达式 f 中的所有自由变量findsym(f,N)列出 f 中距离 x 最近的 N 个自由变量( i , j 除外)
默认自变量= findsym(f,1)
Matlab 符号运算(二)
>> a=sym('a');x=sym('x');k=sym('3');>> f=k*x+a;>> findsym(f)
例:ans=a ,x
相关函数 subs :符号替换
Matlab 符号运算(二)
subs(f): 用当前工作空间中存在的变量值,替换 f中所有出现的相同的变量,并进行简化计算。subs(f,x,a) :用 a 替换 f 中的 x ; a 是可以是 数 / 数值变量 / 表达式 或 符号变量 / 表达式。 若 x 与 a 为相同大小的向量或矩阵,则用 a 中相应的元素替换 x 中的元素; 若 f , x 为标量,而 a 是向量或矩阵,则 f 与 x 将扩展为与 a 相同形状的向量或矩阵。
例:>> syms x y>> f=2*x+y;>> x=3,y=4;>> subs(f)>> subs(f,x,’a’)
Matlab 符号运算(二)
>> syms x y a b>> f=2*x+y;>> subs(f,[x,y],[3,4])>> subs(f,{x,y},{3,4})>> subs(f,x,[1:3])>> subs(f,{x,y},{[1:3],[5:7]})>> subs(f,{x,y},{a+b,a-b})>> subs(f,{x,y},{x+y,x-y})
ans=10ans=2*x+y
ans=10
ans=[2+y,4+y,6+y]ans=[7 10 13]
yxxf 2)(
ans=3*a+b?
符号矩阵 使用 sym 函数直接生成
Matlab 符号运算(二)
>> A=sym(’[1+x, sin(x); 5, exp(x)]’) 将数值矩阵转化成符号矩阵
>> 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)’)
能否用 sym(‘B’)?
符号矩阵的基本运算符号矩阵的基本运算与数值矩阵的基本运算相类似。1) 基本运算符: + 、 - 、 * 、 \ 、 / 、 ^ 、 .* 、 .\ 、 ./ 、 .^ 、’ 、 .’2) 三角函数与反三角函数: sin 、 cos 、 tan 、… … 3) 指数、对数函数: sqrt 、 exp 、 log … … 、
4) 复数函数: real 、 imag 、 conj 、 abs
5) 矩阵函数: det 、 inv 、 rank … … 、 (没有norm )
Matlab 符号运算(二)
6) 矩阵元素的抽取: diag 、 tril 、 triu
六大常见符号运算 因式分解、展开、合并、简化及通分等
Matlab 符号运算(二)
因式分解: factor>> syms x>> f=x^6 +1>> s=factor(f)
s =(1+x^2)*(x^4-x^2+1)
factor 也可用于正整数的分解
大整数的分解
Matlab 符号运算(二)
展开函数: expand 多项式展开
Matlab 符号运算(二)
三角函数展开该函数经常用于多项式展开,也常用于三角函数、指数函数和对数函数的展开中。
合并同类项: collect collect(f,v): 按指定变量 v 的次数合并系数; collect(f): 合并 f 中的默认自变量的各项系数。
Matlab 符号运算(二)
findsym(f,1)
简化函数 : simple 和 simplify simple(f): 对 f 尝试多种不同的算法简化,
返回其中最短的简化形式; [R,HOW]=simple(f): R 为 f 的最短简化形式,
HOW 中记录的为简化过程中使用的主要方法。
Matlab 符号运算(二)
f R HOW2*cos(x)^2-sin(x)^2
3*cos(x)^2-1 simplify
(x+1)*x*(x-1) x^3-x combine(trig)
x^3+3*x^2+3*x+1
(x+1)^3 factor
cos(3*acos(x)) 4*x^3-3*x expand
simple 函数示例
simplify(f): 简化函数
Matlab 符号运算(二)
注:多次 使用 simple 可以达到最简表达。
例:化简
Matlab 符号运算(二)3
23 81261)( xxxxf
分式通分: numden[N,D]=numden(f): N 为通分后的分子, D 为通分后的分母
Matlab 符号运算(二)
horner 多项式:嵌套形式的多项式
Matlab 符号运算(二)
1))1)1((( 1)( 1
xxxx
xxxxf nn例:
六大常见符号运算 因式分解、展开、合并、简化及通分等
Matlab 符号运算(二)
计算极限 limit(f,x,a): 计算 )(lim xf
ax
limit(f,a): 计算默认自变量趋向于 a 时 f 的极限 limit(f): 计算 a=0 时的极限 limit(f,x,a,’right’) :右极限
limit(f,x,a,’left’) :左极限
例:求极限
>> syms h n x>> L=limit((log(x+h)-log(x))/h,h,0)>> M=limit((1-x/n)^n,n,inf)
Matlab 符号运算(二)
L=1/x
M=exp(-x)
>> syms x>> L=limit(abs(x)/x,x,0,’left')>> R=limit(abs(x)/x,x,0,’right')
L=-1
M=1
hxhxL
h
)ln()ln(lim0
n
n nxM
1lim
六大常见符号运算 因式分解、展开、合并、简化及通分等
Matlab 符号运算(二)
计算极限 计算导数
diff(f): 计算 f 关于默认自变量的导数 diff(f,’v’): 计算 f 关于变量 v 的导数
diff(f,n),diff(f,’v’,n),diff(f,n,’v’): n 次求导
例:设 y=sin(ax),求>> syms a x>> y=sin(a*x)>> A=diff(y,x)>> B=diff(y,a)>> C=diff(y,x,2)>> D=diff(y,a,2)
Matlab 符号运算(二)
A=cos(a*x)*a
B=cos(a*x)*x
C=-sin(a*x)*a^2
D=-sin(a*x)*x^2
2
2
2
2
, , ,daydD
dxydC
dadyB
dxdyA
六大常见符号运算 因式分解、展开、合并、简化及通分等
Matlab 符号运算(二)
计算极限 计算导数 计算积分
int(f,v,a,b): 计算定积分 int(f,a,b): 计算 f 关于默认自变量 的定积分 int(f,v) :计算不定积分 int(f) :计算 f 关于默认自变量 的不定积分
b
advvf )(
dvvf )(
例:求积分
>> syms x>> f=(x^2+1)/(x^2-2*x+2)^2;>> I=int(f)>> g=cos(x)/(sin(x)+cos(x));>> J=int(g,x,0,pi/2)>> h=exp(-x^2);>> K=int(h,x,0,inf)
Matlab 符号运算(二)
,)22(
122
2
dxxx
xI
2/
0,
cossincos
dxxx
xJ dxeK x
0
2
I=3/2*atan(x-1)+1/4*(2*x-6)/(x^2-2*x+2)
J=1/4*pi
K=1/2*pi^(1/2)
六大常见符号运算 因式分解、展开、合并、简化及通分等
Matlab 符号运算(二)
计算极限 计算导数 计算积分 符号求和
symsum(f,v,a,b): 求和 symsum(f,a,b): 关于默认自变量 求
和。
b
av
vf )(
例:求级数 ,以及其前 10 项的部分和。 >> syms n>> S=symsum(1/n^2,n,1,inf)>> S10=symsum(1/n^2,n,1,10)
Matlab 符号运算(二)
S=1/6*pi^2
S10=1968329/1270080
1
2
1n n
S
例:求函数级数
1
2n nxS
>> syms n x>> S=symsum(x/n^2,n,1,inf)
S=1/6*x*pi^2
六大常见符号运算 因式分解、展开、合并、简化及通分等
Matlab 符号运算(二)
计算极限 计算导数 计算积分 符号求和 解代数方程和微分方程(见实验三、六)
其它运算 复合函数计算: compose
Matlab 符号运算(二)
compose(f,g): 返回 f(g(y)), 其中f=f(x),g=g(y), x,y 分别是 f 和 g 的默认自变量。 compose(f,g,z): 返回 f(g(z)), 其中 x,y 分别是 f,g 的默认自变量,最后用符号变量 z 代替 y 。 compose(f,g,v,z): 返回 f(g(z)),v 为 f 中指定的自变量, 令 v=g(z), 代入 f=f(v) 。 compose(f,g,v,w,z): 返回 f(g(z)), 其中 v,w 分别为 f,g 的指定自变量,即将 v=g(w) 代入 f(v), 最后用 z代替 w 。
例:>> syms x y z u t>> f=cos(x/t); y=sin(y/u);>> compose(f,g)>> compose(g,f)>> compose(f,g,z)>> compose(f,g,x,z)>> compose(f,g,t,z)>> compose(f,g,t,y,z)>> compose(f,g,t,u)>> compose(f,g,t,u,z)
Matlab 符号运算(二)sin(y/u)g ),/cos( txf
ans=cos(sin(y/u)/t)
ans=sin(cos(x/t)/u)
ans=cos(sin(z/u)/t)
ans=cos(x/sin(z/u))ans=cos(x/sin(y/u))ans=cos(x/sin(y/z))
其它运算 复合函数计算: compose
Matlab 符号运算(二)
计算反函数: finverse
finverse(f): 返回 f 关于默认自变量的反函数, 若 f 的反函数 g 存在,则有 g(f(x))=x 。
finverse(f,v): 返回 f 关于自变量 v 的反函数g , 即 g(f(v))=v 。
例:>> syms x t>> f=x^2+2*t;>> finverse(f)>> finverse(f,y)
Matlab 符号运算(二)txf 22
ans=(-2*t+x)^(1/2)
ans=-1/2*x^2+1/2*t
Warning: finverse(x^2+2*t) is not unique
作业:
Matlab 符号运算(二)1. 化简 xxxf 2sincos)( exp(i*x) ?
2. >> syms a b x X Y>> k=sym(’3’);>> z=sym('c*sqrt(delta)+y*sin(theta)');>> f=a*z*X+(b*x^2+k)*Y;
试写出下面命令的结果 , 上机验证,并说明理由 :>> findsym(f)>> findsym(f,1)>> findsym(f,2) >> findsym(f,3)
Matlab 符号运算(二)3. 设 A 是一个符号矩阵(定义如下),试指出findsym(A,1) 的输出结果,并由此得出结论:findsym 确定自由变量时,是对整个矩阵进行的,还是对各个矩阵元素分别进行?
>>syms a b t u v x y;>>A=[a+b*x,sin(t)+u; x*exp(-t),log(y)+v];
作业:
4.(1)设 ),2cos()( ,1)(2
tyyguxxf 求复合函数 f(g(z));
(2)设 ),2cos()( ,1)(2
tytguxuf 求复合函数
f(g(z)) 。思考:本题除了用 compose 函数外,是否有其它方法?
作业:
Matlab 符号运算(二)5. 设 a 、 b 定义如下,试上机输出 factor(a) 和factor(b) 的结果,并指出那个结果才是 12345678901234567890 的因式分解,为什么?
>> a=sym(‘12345678901234567890’);>> b=sym(12345678901234567890);
作业:
Matlab 符号运算(二)6. 替换函数 subs 的使用。 (1)试指出下面程序中的 f1 、 f2 、 f3 、 f4 、 f5的值。syms a x;
f=a*sin(x)+5;f1=subs(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})
>> syms x y; f=2*x+y;>> subs(f,{x,y},{x+y,x-y})
(2)试指出下面替换的结果,并说明理由。