MATLAB中的符号运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB中的符号运算
2004.8.4
MATLAB所具有的符号数学工具箱与其 它所有工具不同,它适用于广泛的用 途,而不是针对一些特殊专业或专业 分支。另外,MATLAB符号数学工具 箱与其它的工具箱区别还因为它使用 字符串来进行符号分析,而不是基于
数组的数值分析。
符号数学工具箱是操作和解决符号表达式的
符号变量
当字符表达式中含有多于一个的变量时,只有一个变
量是独立变量。如果不告诉MATLAB哪一个变量是独
立变量,MATLAB将基于以下规则选择一个: 在符号表达式中缺省的独立变量是唯一的,除去i和j 的小写字母,不是单词的一部分。如果没有这种字 母,就选择x作为独立变量。如字符不是唯一的,就 选择在字母顺序中最接近x的字母。如果有相连的字 母,就选择在字母表中较后的那一个。
提取分子和分母
如果表达式是一个有理分式(两个多项式之比), 或是可以展开为有理分式(包括哪些分母为1的 分式),可利用numden来提取分子或分母。例 如,给定如下的表达式:
m x2 f ax b x
2
g
3 2 2 3 x x 2 3 5
h
x 3 3x 2x 1 x 1
符号表达式
符号表达式是代表数字、函数、算子和变量
的MATLAB字符串,或字符串数组。不要求变
量有预先确定的值,符号方程式是含有等号 的符号表达式。符号算术是使用已知的规则 和给定符号恒等式求解这些符号方程的实践, 它与代数和微积分所学到的求解方法完全一 样。符号矩阵是数组,其元素是符号表达式。
符号表达式
MATLAB符号函数可用多种方法来操作这些表达式 diff( ' cos(x) ' ) ans= -sin(x) % differentiate cos(x) with respect to x M=sym( ' [a,b;c,d] ' ) M= [a,b] [c,d] % create a symbolic matrix M determ(M) ans= a*d-b*c % find the determinant of the symbolic matrix
用函数symvar询问MATLAB在符号表达式中 哪一个变量它认为是独立变量。
symvar( ' a*x+y*) % find the default symbolic variable ans= x symvar( ' a*t+s/(u+3) ' ) % u is the closest to ' x ' ans= u
变量替换
假设有一个以x为变量的符号表达式,并希望将变 量转换为y。MATLAB提供一个工具称作subs,以便 在符号表达式中进行变量替换。其格式为subs(f, new,old),其中f是符号表达式,new和old是字符、 字符串或其它符号表达式。‘新’字符串将代替表 达式f中各个‘旧’字符串。 f= ' a*x^2+b*x+c ' % create a function f(x) f= a*x^2+b*x+c subs(f,' s ',' x ') % substitute ' s ' for ' x ' in the expression f ans= a*s^2+b*s+c
2
3 k2 4 2 x
2 x 1 3 3x 4
在必要时,numden将表达式合并、有理化并返回所得的分 子和分母。进行这项运算的MATLAB语句是:
m= ' x^2 ' % create a simple expression m= x^2 [n,d]=numden(m) % extract the numerator and denominator n= x^2 d= 1 f= ' a*x^2/(b-x) ' % create a rational expression f= a*x^2/(b-x) [n,d]=numden(f) % extract the numerator and denominator n= a*x^2 d= b-x
subs(f,' alpha ',' a ') % substitute ' alpha ' for ' a ' in f ans= alpha*x^2+b*x+c g=' 3*x^2+5*x-4 ' g= 3*x^2+5*x-4 % create another function
h=subs(g,' 2 ',' x ') % substitute ' 2 ' for ' x ' in g h=18 isstr(h) % show that the result is a symbolic expression ans= 1
如果利用规则symvar不能找到一个缺省独立变量, 它便假定无独立变量并返回x。这一结论对含有由 多个字母组成的变量,如:alpha或s2的表达式,
或不含变量的符号常数均成立。如果需要,绝大多
数命令都使用用户选项以指定独立变量。
diff( ' x^n ' ) % differentiate with respect to the default variable ' x ans= x^n*n/x diff( ' x^n ' , ' n ' ) % differentiate x^n with respect to ' n '
numeric(phi) ans= 1.6180
符号函数sym2poly将符号多项式变换成它的MATLAB等价系 数向量。函数poly2syrn功能正好相反,并让用户指定用于 所得结果表达式中的变量。
f=' 2*x^2+x^3-3*x+5 ' % f is the symbolic polynomials f= 2*x^2+x^3-3*x+5 n=sym2poly(f) % extract eht numeric coefficient vector n= 1 2 -3 5 poly2sym(n) % recreate the polynomials in x (the default) ans= 2*x^2+x^3-3*x+5 poly2sym(n,' s ') % recreate the polynomials in s ans= s^3+2*s^2-3*s+5
标准代数运算
很多标准的代数运算可以在符号表达式上 执行,函数symadd、symsub、symlnul和 symdiv为加、减、乘、除两个表达式, sympow将一个表达式上升为另一个表达 式的幂次。
例如: 给定两个函数
f 2 x 2 3x 5
g x2 x 7
f= ' 2*x^2+3*x-5 ' % define the symbolic expression f= 2*x^2+3*x-5 g= ' x^2-x+7 ' g= x^2-x+7 symadd(f,g) % find an expression for f+g ans= 3*x^2+2*x+2 symsub(f,g) % find an expression for f-g ans= x^2+4*x-12 symmul(f,g) % find an expression for f*g ans= (2*x^2+3*x-5)*(x^2-x+7) symdiv(f,g) % find an expression for f/g ans= (2*x^2+3*x-5)/(x^2-x+7) sympow(f, ' 3*x ' ) % find an expression for ans= (2*x^2+3*x-5)^3**
上面的第一个例子的符号表达式是用单引号 以隐含方式定义的。它告诉MATLAB ' cos(x) ' 是一个字符串并说明diff( ' cosx ' )是一个符 号表达式而不是数字表达式;而在第二个例 子中,用函数sym显式地告诉MATLAB M=sym( ' [a,b;c,d] ' )是一符号表达式。 在MATLAB可以自己确定变量类型的场合下, 通常不要求显式函数sym。
ans=
x^n*log(x)
diff( ' sin(omega) ' )
% differentiate using the default variables (x)
ans= 0 diff( ' sin(omega) ' , ' omega ' )
% specify the independent variable
缺Βιβλιοθήκη Baidu的独立变量,有时称作自由变量,在表
达式 ' 1/(5+cos(x)) ' 中是 ' x ' ;在 ' 3*y+z '
中是 ' y ' ;在 ' a+sin(t) ' 是 ' t ' 。在表式 '
sin(pi/4)-cos(3/5) ' 中自由符号变量是 ' x ' ,
因为此式是一个符号常数无符号变量。可利
symvar( ' sin(omega) ' ) % ' omega ' is not a singlee character。 ans= x
symvar( ' 3*i+4*j ' ) % i and j are equel to sqrt(-1) ans= x symvar( ' y+3*s ' , ' t ' ) ans= s % find the variable closest to t rather than x
ans= cos(omega)
符号表达式运算
一旦创建了一个符号表达式,或许想以某些方式改变它; 也许希望提取表达式的一部分,合并两个表达式或求得表
达的数值。有许多符号工具可以帮助完成这些任务。
所有符号函数(很少特殊例外的情况)作用到符号表达式和 符号数组,并返回符号表达式或数组。其结果有时可能看 起来象一个数字,但事实上它是一个内部用字符串表示的 一个符号表达式。可以运用MATLAB函数isstr来找出像似 数字的表达式是否真是一个整数或是一个字符串。
g= ' 3/2*x^2+2/3*x-3/5 ' % rationalize and extract the parts g= 3/2*x^2+2/3*x-3/5 [n,d]=numden(g) n= 45*x^2+20*x-18 d= 30 h= ' (x^2+3)/(2*x-1)+3*x/(x-1) ' % the sum of rational polynomials h= (x^2+3)/(2*x-1)+3*x/(x-1) [n,d]=numden(h) % rationalize and extract n= x^3+5*x^2-3 d= (2*x-1)*(x-1)
1 2x n
1 y 2x
MATLAB表达式
' 1/(2*x^n) ' y= ' 1/sqrt(2*x) ' ' cos(x^2)-sin(2*x) ' M=sym( ' [a,b;c,d] ' )
cos( x 2 ) sin(2 x)
a b M c d

a
b
x3 dx f=int( ' x^3/sqrt(1-x) ' , ' a ' , ' b ' ) 1 x
变换函数
函数sym可获取一个数字参量并将其转换为符号表达式。 函数numneric的功能正好相反,它把一个符号常数(无 变量符号表达式)变换为一个数值。 phi=' (1+sqrt(5))/2 ' % the ' golden ' ratio
phi= (1+sqrt(5))/2 % convert to a numeric value
符号数学工具箱(函数)集合,有复合、简化、
微分、积分以及求解代数方程和微分方程的
工具。另外还有一些用于线性代数的工具, 求解逆、行列式、正则型式的精确结果,找 出符号矩阵的特征值而无由数值计算引入的 误差。工具箱还支持可变精度运算,即支持 符号计算并能以指定的精度返回结果。
符号数学工具箱中的工具是建立在功 能强大的Maple之上。它最初是由加拿大的 滑铁卢(Waterloo)大学开发的。当要求 MATLAB进行符号运算时,它就请求Maple 去计算并将结果返回到MATLAB命令窗口。 因此,在MATLAB中的符号运算是MATLAB 处理数字的自然扩展。
相关文档
最新文档