第3 章 matlab的符号运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章 MATLAB符号运算 符号运算
在科学研究和工程应用中,除了存在大量的 数值计算外,还有对符号对象进行的运算,即在 运算时无须事先对变量赋值,而将所得到结果以 标准的符号形式来表示。MATLAB符号计算是通过 集成在MATLAB中的符号运算工具箱(Symbolic Math Toolbox)来实现的。应用符号计算功能, 可以直接对抽象的符号对象进行各种计算,并获 得问题的解析结果。
§3.1 符号对象及其运算
应用sym函数还可以定义符号常量,使用符号常量进行 代数运算时和数值常量进行的运算不同。下面的命令用于 比较符号常量与数值常量在代数运算时的差别。 >> p1=sym('pi');a=sym('4'); >> p2=pi;x=4; >> sin(p1/3) >> sin(p2/3) >> cos((a+10)^2)-sin(pi/4) >> cos((x+10)^2)-sin(pi/4)
§3.1 符号对象及其运算
§3.1 符号对象及其运算
可用findsym(s,1)或symvar(s,1)查找表达式s的主变 量。例如: >> syms a b w y z >> findsym(a*z+b*w,1) ans = w >> findsym(a*y+b*w,1) ans = y
§3.1 符号对象及其运算
3.1.4 符号矩阵
函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。 【例3.1】化简矩阵 a − a+ 式分解。
2
syms a b x y m= [(a^2-x^2)/(a+x), sin(y)^2,(x-y)/(a+b);1,15,x^2+y^22*x*y]; simplify(m) %对符号矩阵化简处理 ans = [ a-x, 1-cos(y)^2, (x-y)/(a+b)] [ 1, 15, x^2+y^2-2*x*y] factor(m) %对符号矩阵因式分解 [ a-x, sin(y)^2, (x-y)/(a+b)] [ 1, 15, (x-y)^2]
§3.1 符号对象及其运算
例如: h=sym('[3/2,(2*x+1)/3;a/x+a/y,3*x+4]') ; [n,d]=numden(h) n = [ 3, 2*x + 1] [a*x + a*y, 3*x + 4] d = [ 2, 3] [ x*y, 1]
§3.1 符号对象及其运算
3.符号表达式的因式分解与展开 ● factor(s):对符号表达式s分解因式。 ● expand(s):对符号表达式s进行展开。 ● collect(s):对符号表达式s合并同类项。 ● collect(s,v):对符号表达式s按变量v合并同类项。
§3.1 符号对象及其运算
2.建立符号表达式
含有符号对象的表达式称为符号表达式。建立符号表达式有以下2 种方法。 (1)用sym函数建立符号表达式。例如: U=sym('3*x^2-5*y+2*x*y+6') U = 3*x^2-5*y+2*x*y+6 F=sym('cos(x^2)-sin(2*x)=0') F = cos(x^2)-sin(2*x)=0 M=sym('[a,b;c,d]') M = [ a, b] [ c, d]
x2 x
sin y 15
2
1
x− y a+b x 2 + y 2 − 2 xy
,并对其因
§3.1 符号对象及其运算
由于符号矩阵是一个矩阵,所以符号矩阵还能进行有 关矩阵的运算。前面介绍的应用于数值矩阵的运算符和函 数,如diag,triu,tril,inv,det,rank,eig等,也可直接 应用于符号矩阵。例如: >> A=sym('[sin(x),x^2;cos(x),log(x)]') A = [ sin(x), x^2]
§3.1 符号对象及其运算
3.1.1 建立符号对象 1.建立符号对象 (1)sym函数 sym函数用来建立单个符号量,一般调用格式为 符号量名 = sym('符号字符串') 该函数可以建立一个符号量,符号字符串可以是常量、 变量、函数或表达式。例如: a=sym('a') %建立符号变量a 符号变量参与运算前无须赋值,其结果是一个由参与 运算的变量名组成的表达式。
第三章 MATLAB符号运算 符号运算
本章学习目标
● ● ● ● 掌握符号对象的定义方法以及符号表达式的运算法则。 掌握微积分的符号计算方法。 掌握级数求和的方法以及将函数展开为泰勒级数的方 掌握代数方程和微分方程符号求解的方法。
法。
§3.1 符号对象及其运算
3.1 符号对象及其运算
MATLAB为用户提供了一种符号数据类型,相应的运算 对象称为符号对象。例如,符号常量、符号变量以及有它 们参与的数学表达式等。在进行符号运算前首先要建立符 号对象。
§3.1 符号对象及其运算
(2)使用已经定义的符号变量组成符号表达式。例如: syms x y; V=3*x^2-5*y+2*x*y+6 ans = 3*x^2 + 2*y*x - 5*y + 6
§3.1 符号对象及其运算
3.1.2符号表达式运算 3.1.2符号表达式运算 1.符号表达式的四则运算 符号表达式的四则运算与数值运算一样,用+、−、 *、/、^ 运算符实现,其运算结果依然是一个符号表达 式。例如: f= sym('2*x^2+3*x-5') %定义符号表达式 g= sym('x^2-x+7') f+g ans= 3*x^2 + 2*x + 2 f^g ans= (2*x^2 + 3*x - 5)^ (x^2 - x + 7)
§3.1 符号对象及其运算
s3=(x+y)*(x^2+y^2+1) collect(s3,y) ans = y^3 + x*y^2 + (x^2 + 1)*y + x*(x^2 + 1) factor(sym(630)) 因式 ans = 2*3^2*5*7 %对符号整数分解 %对s按变量y合并同类项
§3.1 符号对象及其运算
6.符号表达式与数值表达式之间的转换
利用函数sym可以将数值表达式变换成它的符号表达式。例如: sym('[3.14,1,5]') ans = [ 3.14, 1.5]
sym(3.14+1.5)
ans= 116/25
函数eval可以将符号表达式变换成数值表达式。例如:
phi=sym('(1+sqrt(5))/2') phi = (1+sqrt(5))/2 >> eval(phi) ans = 1.6180
Fra Baidu bibliotek
§3.1 符号对象及其运算
a=sym('a'); w=a^3+3*a+10 w= a^3 + 3*a + 10 x=5; w=x^3+3*x+10 w= 150 whos Name Size a 1x1 w 1x1 x 1x1 %定义符号变量a %符号运算
%定义数值变量x %数值运算
%查看内存变量 Bytes Class Attributes 126 sym 8 double 8 double
§3.1 符号对象及其运算
4.符号表达式系数的提取 c = coeffs(s [, x]) 该函数返回多项式中按指定变量升幂顺序排列的系 数,若没有指定变量,则返回所有项的常系数,且按离 字符“x”近原则确定主变量。例如: syms x y s = 5*x*y^3 + 3*x^2*y^2 + 2*y + 1; coeffs(s) [ 1, 2, 5, 3] coeffs(s,y) [ 1, 2, 3*x^2, 5*x] %求变量y的系数 %求所有项的常系数,按x的升幂排列
§3.1 符号对象及其运算
2.符号表达式的提取分子和分母运算 如果符号表达式是一个有理分式或可以展开为有理 分式,可利用numden函数来提取符号表达式中的分子或 分母。其一般调用格式为 [n,d]=numden(s) 该函数提取符号表达式s的分子和分母,分别将它 们存放在n与d中。numden函数在提取各部分之前,将符 号表达式有理化后返回所得的分子和分母。 如果符号表达式是一个符号数组,numden返回两个 新数组n和d,其中n是分子数组,d是分母数组。
§3.1 符号对象及其运算
5.符号表达式的化简 MATLAB提供的对符号表达式化简的函数如下。 ● simplify(s):应用MuPAD简化规则对s进行化简。 ● simple(s):调用MATLAB的其他函数对表达式进行综 合化简,并显示化简过程。 例如: s= sym('(x^2+5*x+6)/(x+2)'); simplify(s) ans= x + 3
§3.1 符号对象及其运算
3.1.3 符号表达式中变量的确定
findsym、sysvar函数可以帮助用户查找一个符号 表达式中的符号变量。该函数的调用格式为 findsym(s[,n]) symvar(s[,n]) 函数返回符号表达式s中的n个符号变量,若没有指 定n,则返回s中的全部符号变量。findsym以字符串形 式返回结果,symvar以向量形式返回结果。例如:
§3.1 符号对象及其运算
(2)syms函数 函数sym一次只能定义一个符号变量,使用不方便。 MATLAB提供了另一个函数syms,一次可以定义多个符号变量。 syms函数的一般调用格式为 syms符号变量名1符号变量名2…符号变量名n 用这种格式定义符号变量时不要在变量名上加字符串分 界符('),变量间用空格而不要用逗号分隔。例如,用 syms函数定义4个符号变量a、b、c、d,命令如下: syms a b c d
§3.1 符号对象及其运算
例如: syms x y; s1=x^3-y^3; factor(s1) ans = (x - y)*(x^2 + x*y + y^2) s2=(-7*x^2-8*y^2)*(-x^2+3*y^2); expand(s2) ans = 7*x^4 - 13*x^2*y^2 - 24*y^4 %对s展开 %对s分解因式
[ cos(x), log(x)]
§3.1 符号对象及其运算
>> B=A.' B= [ sin(x), cos(x)] [ x^2, log(x)] >> C=inv(A) C= [ -log(x)/(x^2*cos(x) - log(x)*sin(x)), x^2/(x^2*cos(x) - log(x)*sin(x))] [ cos(x)/(x^2*cos(x) - log(x)*sin(x)), sin(x)/(x^2*cos(x) - log(x)*sin(x))] >> E=triu(A) E= [ sin(x), x^2] [ 0, log(x)]
§3.1 符号对象及其运算
syms x a y z b; %定义5个符号变量 s1=3*x+y; s2=a*y+b; %定义2个符号表达式 findsym(s1) findsym(s2,2) ans = ans= x, y y,b symvar(s1+s2) ans = [ a, b, x, y] 在求函数的极限、导数和积分时,如果用户没有明确 指定自变量,MATLAB将按以下原则确定主变量并对其进行 相应微积分运算。 ● 找寻除i、j之外,在字母顺序上最接近x的小写字符。 ● 若表达式中有两个符号变量与x的距离相等,则ASCII大者 优先。
§3.1 符号对象及其运算
函数simple试用几种不同的化简工具,然后选择在结 果表达式中含有最少字符的那种形式。例如 s= sym('cos(3*acos(x))'); simple(s) 示每步结果 显示一系列化简过程后,最后显示化简结果: ans = %自动调用多种函数对s进行化简,并显
4*x^3 - 3*x
§3.1 符号对象及其运算
7.符号多项式与多项式系数向量之间的转换 利用函数sym2poly可以将符号多项式转换为多项式系 数向量,而函数poly2sym可以将多项式系数向量转换为符 号多项式。例如: >> u=sym2poly(sym('x^3-2*x-5')) u = 1 0 -2 -5 >> v=poly2sym(u,'Y') v = Y^3-2*Y-5
在科学研究和工程应用中,除了存在大量的 数值计算外,还有对符号对象进行的运算,即在 运算时无须事先对变量赋值,而将所得到结果以 标准的符号形式来表示。MATLAB符号计算是通过 集成在MATLAB中的符号运算工具箱(Symbolic Math Toolbox)来实现的。应用符号计算功能, 可以直接对抽象的符号对象进行各种计算,并获 得问题的解析结果。
§3.1 符号对象及其运算
应用sym函数还可以定义符号常量,使用符号常量进行 代数运算时和数值常量进行的运算不同。下面的命令用于 比较符号常量与数值常量在代数运算时的差别。 >> p1=sym('pi');a=sym('4'); >> p2=pi;x=4; >> sin(p1/3) >> sin(p2/3) >> cos((a+10)^2)-sin(pi/4) >> cos((x+10)^2)-sin(pi/4)
§3.1 符号对象及其运算
§3.1 符号对象及其运算
可用findsym(s,1)或symvar(s,1)查找表达式s的主变 量。例如: >> syms a b w y z >> findsym(a*z+b*w,1) ans = w >> findsym(a*y+b*w,1) ans = y
§3.1 符号对象及其运算
3.1.4 符号矩阵
函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。 【例3.1】化简矩阵 a − a+ 式分解。
2
syms a b x y m= [(a^2-x^2)/(a+x), sin(y)^2,(x-y)/(a+b);1,15,x^2+y^22*x*y]; simplify(m) %对符号矩阵化简处理 ans = [ a-x, 1-cos(y)^2, (x-y)/(a+b)] [ 1, 15, x^2+y^2-2*x*y] factor(m) %对符号矩阵因式分解 [ a-x, sin(y)^2, (x-y)/(a+b)] [ 1, 15, (x-y)^2]
§3.1 符号对象及其运算
例如: h=sym('[3/2,(2*x+1)/3;a/x+a/y,3*x+4]') ; [n,d]=numden(h) n = [ 3, 2*x + 1] [a*x + a*y, 3*x + 4] d = [ 2, 3] [ x*y, 1]
§3.1 符号对象及其运算
3.符号表达式的因式分解与展开 ● factor(s):对符号表达式s分解因式。 ● expand(s):对符号表达式s进行展开。 ● collect(s):对符号表达式s合并同类项。 ● collect(s,v):对符号表达式s按变量v合并同类项。
§3.1 符号对象及其运算
2.建立符号表达式
含有符号对象的表达式称为符号表达式。建立符号表达式有以下2 种方法。 (1)用sym函数建立符号表达式。例如: U=sym('3*x^2-5*y+2*x*y+6') U = 3*x^2-5*y+2*x*y+6 F=sym('cos(x^2)-sin(2*x)=0') F = cos(x^2)-sin(2*x)=0 M=sym('[a,b;c,d]') M = [ a, b] [ c, d]
x2 x
sin y 15
2
1
x− y a+b x 2 + y 2 − 2 xy
,并对其因
§3.1 符号对象及其运算
由于符号矩阵是一个矩阵,所以符号矩阵还能进行有 关矩阵的运算。前面介绍的应用于数值矩阵的运算符和函 数,如diag,triu,tril,inv,det,rank,eig等,也可直接 应用于符号矩阵。例如: >> A=sym('[sin(x),x^2;cos(x),log(x)]') A = [ sin(x), x^2]
§3.1 符号对象及其运算
3.1.1 建立符号对象 1.建立符号对象 (1)sym函数 sym函数用来建立单个符号量,一般调用格式为 符号量名 = sym('符号字符串') 该函数可以建立一个符号量,符号字符串可以是常量、 变量、函数或表达式。例如: a=sym('a') %建立符号变量a 符号变量参与运算前无须赋值,其结果是一个由参与 运算的变量名组成的表达式。
第三章 MATLAB符号运算 符号运算
本章学习目标
● ● ● ● 掌握符号对象的定义方法以及符号表达式的运算法则。 掌握微积分的符号计算方法。 掌握级数求和的方法以及将函数展开为泰勒级数的方 掌握代数方程和微分方程符号求解的方法。
法。
§3.1 符号对象及其运算
3.1 符号对象及其运算
MATLAB为用户提供了一种符号数据类型,相应的运算 对象称为符号对象。例如,符号常量、符号变量以及有它 们参与的数学表达式等。在进行符号运算前首先要建立符 号对象。
§3.1 符号对象及其运算
(2)使用已经定义的符号变量组成符号表达式。例如: syms x y; V=3*x^2-5*y+2*x*y+6 ans = 3*x^2 + 2*y*x - 5*y + 6
§3.1 符号对象及其运算
3.1.2符号表达式运算 3.1.2符号表达式运算 1.符号表达式的四则运算 符号表达式的四则运算与数值运算一样,用+、−、 *、/、^ 运算符实现,其运算结果依然是一个符号表达 式。例如: f= sym('2*x^2+3*x-5') %定义符号表达式 g= sym('x^2-x+7') f+g ans= 3*x^2 + 2*x + 2 f^g ans= (2*x^2 + 3*x - 5)^ (x^2 - x + 7)
§3.1 符号对象及其运算
s3=(x+y)*(x^2+y^2+1) collect(s3,y) ans = y^3 + x*y^2 + (x^2 + 1)*y + x*(x^2 + 1) factor(sym(630)) 因式 ans = 2*3^2*5*7 %对符号整数分解 %对s按变量y合并同类项
§3.1 符号对象及其运算
6.符号表达式与数值表达式之间的转换
利用函数sym可以将数值表达式变换成它的符号表达式。例如: sym('[3.14,1,5]') ans = [ 3.14, 1.5]
sym(3.14+1.5)
ans= 116/25
函数eval可以将符号表达式变换成数值表达式。例如:
phi=sym('(1+sqrt(5))/2') phi = (1+sqrt(5))/2 >> eval(phi) ans = 1.6180
Fra Baidu bibliotek
§3.1 符号对象及其运算
a=sym('a'); w=a^3+3*a+10 w= a^3 + 3*a + 10 x=5; w=x^3+3*x+10 w= 150 whos Name Size a 1x1 w 1x1 x 1x1 %定义符号变量a %符号运算
%定义数值变量x %数值运算
%查看内存变量 Bytes Class Attributes 126 sym 8 double 8 double
§3.1 符号对象及其运算
4.符号表达式系数的提取 c = coeffs(s [, x]) 该函数返回多项式中按指定变量升幂顺序排列的系 数,若没有指定变量,则返回所有项的常系数,且按离 字符“x”近原则确定主变量。例如: syms x y s = 5*x*y^3 + 3*x^2*y^2 + 2*y + 1; coeffs(s) [ 1, 2, 5, 3] coeffs(s,y) [ 1, 2, 3*x^2, 5*x] %求变量y的系数 %求所有项的常系数,按x的升幂排列
§3.1 符号对象及其运算
2.符号表达式的提取分子和分母运算 如果符号表达式是一个有理分式或可以展开为有理 分式,可利用numden函数来提取符号表达式中的分子或 分母。其一般调用格式为 [n,d]=numden(s) 该函数提取符号表达式s的分子和分母,分别将它 们存放在n与d中。numden函数在提取各部分之前,将符 号表达式有理化后返回所得的分子和分母。 如果符号表达式是一个符号数组,numden返回两个 新数组n和d,其中n是分子数组,d是分母数组。
§3.1 符号对象及其运算
5.符号表达式的化简 MATLAB提供的对符号表达式化简的函数如下。 ● simplify(s):应用MuPAD简化规则对s进行化简。 ● simple(s):调用MATLAB的其他函数对表达式进行综 合化简,并显示化简过程。 例如: s= sym('(x^2+5*x+6)/(x+2)'); simplify(s) ans= x + 3
§3.1 符号对象及其运算
3.1.3 符号表达式中变量的确定
findsym、sysvar函数可以帮助用户查找一个符号 表达式中的符号变量。该函数的调用格式为 findsym(s[,n]) symvar(s[,n]) 函数返回符号表达式s中的n个符号变量,若没有指 定n,则返回s中的全部符号变量。findsym以字符串形 式返回结果,symvar以向量形式返回结果。例如:
§3.1 符号对象及其运算
(2)syms函数 函数sym一次只能定义一个符号变量,使用不方便。 MATLAB提供了另一个函数syms,一次可以定义多个符号变量。 syms函数的一般调用格式为 syms符号变量名1符号变量名2…符号变量名n 用这种格式定义符号变量时不要在变量名上加字符串分 界符('),变量间用空格而不要用逗号分隔。例如,用 syms函数定义4个符号变量a、b、c、d,命令如下: syms a b c d
§3.1 符号对象及其运算
例如: syms x y; s1=x^3-y^3; factor(s1) ans = (x - y)*(x^2 + x*y + y^2) s2=(-7*x^2-8*y^2)*(-x^2+3*y^2); expand(s2) ans = 7*x^4 - 13*x^2*y^2 - 24*y^4 %对s展开 %对s分解因式
[ cos(x), log(x)]
§3.1 符号对象及其运算
>> B=A.' B= [ sin(x), cos(x)] [ x^2, log(x)] >> C=inv(A) C= [ -log(x)/(x^2*cos(x) - log(x)*sin(x)), x^2/(x^2*cos(x) - log(x)*sin(x))] [ cos(x)/(x^2*cos(x) - log(x)*sin(x)), sin(x)/(x^2*cos(x) - log(x)*sin(x))] >> E=triu(A) E= [ sin(x), x^2] [ 0, log(x)]
§3.1 符号对象及其运算
syms x a y z b; %定义5个符号变量 s1=3*x+y; s2=a*y+b; %定义2个符号表达式 findsym(s1) findsym(s2,2) ans = ans= x, y y,b symvar(s1+s2) ans = [ a, b, x, y] 在求函数的极限、导数和积分时,如果用户没有明确 指定自变量,MATLAB将按以下原则确定主变量并对其进行 相应微积分运算。 ● 找寻除i、j之外,在字母顺序上最接近x的小写字符。 ● 若表达式中有两个符号变量与x的距离相等,则ASCII大者 优先。
§3.1 符号对象及其运算
函数simple试用几种不同的化简工具,然后选择在结 果表达式中含有最少字符的那种形式。例如 s= sym('cos(3*acos(x))'); simple(s) 示每步结果 显示一系列化简过程后,最后显示化简结果: ans = %自动调用多种函数对s进行化简,并显
4*x^3 - 3*x
§3.1 符号对象及其运算
7.符号多项式与多项式系数向量之间的转换 利用函数sym2poly可以将符号多项式转换为多项式系 数向量,而函数poly2sym可以将多项式系数向量转换为符 号多项式。例如: >> u=sym2poly(sym('x^3-2*x-5')) u = 1 0 -2 -5 >> v=poly2sym(u,'Y') v = Y^3-2*Y-5