第三讲 MATLAB的符号运算
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2)运用simple简化
2019/7/19
g1=simple(f), g2=simple(g1)
28
例4. 简化 ff cosx sin2 x
ff=cos(x)+sqrt(-sin(x)^2);
ssfy1=simplify(ff), ssfy2=simplify(ssfy1)
gg1=simple(ff), gg2=simple(gg1)
2019/7/19
15
例:创建符号矩阵 syms a b c d e f g h A=[a b;c d],B=[e f;g h],C=A*B D=sym('[1/(x+t),sin(x);1,exp(x)]')
A= [ a, b] [ c, d]
B= [ e, f] [ g, h]
用matlab函数sym创建矩阵(symbolic 的缩写)
命令格式:A=sym('[
]')
※ 符号矩阵内容同数值矩阵
※ 需用sym指令定义
※ 需用'
'标识
2019/7/19
13
例如:A = sym('[a , 2*b ; 3*a , 0]') A= [ a, 2*b] [3*a, 0]
ans =
cos(x)/sin(2*x)+cos(x)*sin(2*x)
2019/7/19
23
例1:f= 2*x^2+3*x-5; g= x^2+x-7;
>> syms x
>> f=2*x^2+3*x-5; g= x^2+x-7;
>> h=f+g
h = 3*x^2+4*x-12
例2:f=cos(x);g= sin(2*x);
例3.
简化
f
3
1 6 12 x3 x2 x 8
(1)运用simplify简化
syms x;
f=(1/x^3+6/x^2+12/x+8)^(1/3);
对符号表达式S进行化简
说明:simple给出的 简化式比simplify给 出的更短
sfy1=simplify(f), sfy1=simplify(sfy1)
2019/7/19
3
在数值计算中,包括输入、输出及中间过 程,变量都是数值变量,而在符号运算中, 变量都以字符形式保存和运算,即使是数字 也被当作变量来处理。
符号表达式包括符号函数和符号方程,他 们创建的方式是一样的,最简单易用的创建 方法和MATLAB字符串变量的生成方法相同。
2019/7/19
reshape:符号矩阵的变形; expm:符号矩阵的幂运算; sum:符号矩阵按列求和
2019/7/19
25
2 符号矩阵其它运算:
1. r=collect(S,v) 合并同类项,S是符号表达式,v是变 量或表达式,r是合并同 类项后的结果, 将符号表达 式中的各元素的v的同幂项系数合并。 r=collect(S) 对由findsym函数返回的默认变量进行 同类项合并。
>> syms x
>> f=cos(x);g=sin(2*x);
>> f/g+f*g
ans =
201c9/7o/19s(x)/sin(x)+cos(x)*sin(x)
24
例3.71 符号矩阵的基本操作和运算
x=reshape(sym(0:3),2,2); syms t; y=x.^2,z=x*x,w=inv(z), w([2 4])=0,wt=expm(w*t) syms a b c;t=[a b*2 c+3;4 5 6;c b a],sum(t)
'
'—— 符号标识
符号表达式一定要用' ' 单引号括起来
matlab才能识别。
equation=‘a*x^2+b*x+c=0’
创建符号微分方程
Diffeq=‘Dy-y=x’
注:由这种方法创建的符号表达式对空格是很敏感 的,因此不要在字符间乱加空格符.
符号表达式在MATLAB被看作是1ⅹ1阶的符号矩
A=[1/3,2.5;1/0.7,2/5] A=
0.3333 2.5000 1.4286 0.4000 sym(A)
ans =
[ 1/3, 5/2]
[10/7, 2019/7/19 2/5]
19
将符号矩阵转化为数值矩阵
函数调用格式:double(A)、int8(A)、 int16(A)
A=
[ 1/3, 5/2]
符号运算也是采用与数值运算相同的运 算符。
2019/7/19
21
符号矩阵的基本运算
符号矩阵的基本运算与数值矩阵的基本运算相类似。
1) 基本运算符:+、-、*、\、/、 ^2)、三.*角、函.\、数./与、反.^三、角’函、数.’:sin、cos、tan、… …
3) 指数、对数函数:sqrt、exp、log、… … 4) 复数函数:real、imag、conj、 abs 5) 矩阵函数:det、inv、rank、转 … … (没有norm)
(5)数值数组置换之一
f1=subs(f,‘sin(x)’,sym(‘y’)) f4=subs(subs(f,a,2), x,0: pi/6:pi)
2019/7/19 (3) 符号常数置换
(6)数值数组置换之二
29
f2=subs(f,{a,x},{2,sym(pi/3)}) f5=subs(f,{a,x},{0:6,0: pi/6:pi})
6) 矩阵元素的抽取:diag、tril、triu
2019/7/19
22
例1:f= sym(‘2*x^2+3*x-5’);
g= sym(‘x^2+x-7’);
h= f + g
h=
3*x^2+4*x-12
例2:f=sym('cos(x)');g=sym('sin(2*x)');
f/g+f*g
2019/7/19
9
解析解(精确解)进行数值转化的两个函 数. digits(n) —— 函数设置有效个数为 n的近似解精度.
vpa(x,n) —— 符号表达式在digits(n) 精度下的数值解.
digits(25)
vpa(1/2+源自文库/3)
ans =
.8333333333333333333333333
这就完成了一个符号矩阵的创建。 注意:符号矩阵的每一行的两端都有方
括号,这是与 matlab数值矩阵的 一个重要区别。
2019/7/19
14
用字符串直接创建矩阵
模仿matlab数值矩阵的创建方法 需保证同一列中各元素字符串有相
同的长度。
例:A =['[ a,2*b]'; '[3*a, 0]'] A= [ a, 2*b] [3*a, 0]
ans=[2+y,4+y,6+y]
>> subs(f,x,[1:3])
2019/7/19
10
numeric(s): 将不含自由变量的符号表达式转换 为数值形式,其效果double(sym(s))相同.(旧版 中的数值转化函数).
2019/7/19
11
vpa(5/6,40)
ans =
.8333333333333333333333333333333333333333
a=sym('[1/4,exp(1);log(3),3/7]')
有时符号运算的目的是为了得到精确的数值 解,这样就需要对得到的解析解进行数值转 换。在symbolic中有三种不同的算术运算:
数值类型 matlab的浮点算术运算 有理数类型 maple的精确符号运算 vpa类型 maple的任意精度算术运算
2019/7/19
8
浮点算术运算 1/2+1/3 --(定义输出格式format long) ans = 0.83333333333333 符号运算 sym(1/2)+(1/3) ans = 5/6 --精确解
[10/7, 2/5]
double(A)
int8(A)
ans =
ans =
0.3333 2.5000
03
1.4286 0.4000
10
2019/7/19
20
二、符号运算
1、符号矩阵基本运算 数值运算中,所有矩阵运算操作指
令都比较直观、简单。例如:a=b+c; a=a*b ;A=2*a^2+3*a-5等。
f (x) 2x y
例:>> syms x y
>> f=2*x+y; >> x=3,y=4; >> subs(f) >> subs(f,x,’a’)
ans=10 ans=2*a+y
>> syms x y a b
>> f=2*x+y;
ans=10
>> subs(f,[x,y],[3,4]) >> subs(f,{x,y},{3,4})
2019/7/19
1
第三讲 MATLAB的符号运算
——Matlab 不仅具有数值运算功能,还开发 了在Matlab环境下实现符号计算的工具包 Symbolic
Math Toolbox 。符号工具箱在Matlab中引入 新的数据类型——符号对象sym。
2019/7/19
2
符号运算的功能
符号表达式、符号矩阵的创建 因式分解、展开和化简 符号代数方程求解 符号微积分 符号微分方程
4
与数值运算的区别
※ 数值运算中必须先对变量赋值,然
后才能参与运算。
※ 符号运算无须事先对独立变量赋值, 运算结果以标准的符号形式表达。
2019/7/19
5
3.1 符号表达式的生成
创建符号函数
f —— 符号变量名 log(x)—— 符号表达式
f= ‘log(x)’ 创建符号方程
5. subs(S,old,new) 把符号变量中的变量old用new代替,new可以
是一个符号,也可以是具体的数
例5. 用简单的算例演示subs的置换规则
(1)产生符号函数
(4) 双精度数值置换
syms a x;
f3=subs(f,{a,x},{2, pi/3})
f=a*sin(x)+5; (2) 符号变量置换
2019/7/19
17
例如:A =[ a, 2*b] [3*a, 0]
A(2,2)='4*b' A = [ a, 2*b]
[3*a, 4*b]
A1=subs(A, 'c', 'b') A2 =[ a, 2*c] [3*a, 4*c]
2019/7/19
18
符号矩阵与数值矩阵的转换
将数值矩阵转化为符号矩阵 函数调用格式:sym(A)
2019/f7a/1c9tor(1025), factor(sym(‘12345678901234567890’),
27
3. expand(S) 对符号多项式或函数S进行展开
例:syms x y;
expand((x+1)^3)
expand(sin(x+y))
4. r=simple(S) 或 r=simplify(S)
例2. factor指令的使用
(1)除x外不含其他自由变量的情况 (2) 含其他自由变量的情况之一
syms a x;
f2=x^2-a^2;
f1=x^4-5*x^3+5*x^2+5*x-6;
factor(f2)
factor(f1)
(3)对正整数的质数分解,若正整数数大于252,则用 factor(sym (‘N’))
2019/7/19
26
例1. 按不同的方式合并同幂项
EXPR= sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
expr1=collect(EXPR)
expr2=collect(EXPR,'exp(-t)')
2. factor(S) 符号计算的因式分解,S是待分解的符号多项式
阵,因此可用sym命令来创建.
2019/7/19
6
f=sym(‘sin(x)’) f f=sym(‘sin(x)^2=0’) 另外一种符号函数的创建方法为syms 命令 Sym x F=sin(x)+cos(x) syms a b c %syms可同时定义多个变量
2019/7/19
7
3.2 符号和数值之间的转化
a=
[ 1/4,exp(1)]
[log(3), 3/7]
vpa(a,10)
ans =
[.2500000000, 2.718281828]
[1.098612289, .4285714286]
2019/7/19
12
3.2 符号矩阵的创建
数值矩阵A=[1,2;3,4]
A=[a,b;c,d] —— 不识别
D= [ 1/(x+t), sin(x)] [ 1, exp(x)]
C=
[ a*e+b*g, a*f+b*h]
[ c*e+d*g, c*f+d*h]
2019/7/19
16
符号矩阵的修改
a.直接修改 可用、 键找到所要修改的矩阵,
直接修改 b.指令修改
①A(行标,列标)=符号表达式 ②A1=subs(S, ‘new' ,‘old')