当前位置:文档之家› MATLAB中的符号运算

MATLAB中的符号运算


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
提取分子和分母
如果表达式是一个有理分式(两个多项式之比), 或是可以展开为有理分式(包括哪些分母为1的 分式),可利用numden来提取分子或分母。例 如,给定如下的表达式:
m x2 f ax
2
b x
g
3 2
x2
2 3
x
3 5
h
x 3
2
2x 1

3x x 1
3 k2 4 2 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
MATLAB中的符号运算
2004.8.4
MATLAB所具有的符号数学工具箱与其 它所有工具不同,它适用于广泛的用 途,而不是针对一些特殊专业或专业 分支。另外,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
符号表达式
符号表达式是代表数字、函数、算子和变量
的MATLAB字符串,或字符串数组。不要求变
量有预先确定的值,符号方程式是含有等号 的符号表达式。符号算术是使用已知的规则 和给定符号恒等式求解这些符号方程的实践, 它与代数和微积分所学到的求解方法完全一 样。符号矩阵是数组,其元素是符号表达式。
符号表达式
符号数学工具箱(函数)集合,有复合、简化、
微分、积分以及求解代数方程和微分方程的
工具。另外还有一些用于线性代数的工具, 求解逆、行列式、正则型式的精确结果,找 出符号矩阵的特征值而无由数值计算引入的 误差。工具箱还支持可变精度运算,即支持 符号计算并能以指定的精度返回结果。
符号数学工具箱中的工具是建立在功 能强大的Maple之上。它最初是由加拿大的 滑铁卢(Waterloo)大学开发的。当要求 MATLAB进行符号运算时,它就请求Maple 去计算并将结果返回到MATLAB命令窗口。 因此,在MATLAB中的符号运算是MATLAB 处理数字的自然扩展。
ans=
x^n*log(x)
diff( ' sin(omega) ' )
% differentiate using the default variables (x)
ans= 0 diff( ' sin(omega) ' , ' omega ' )
% specify the independent variable
变量替换
假设有一个以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
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)
上面的第一个例子的符号表达式是用单引号 以隐含方式定义的。它告诉MATLAB ' cos(x) ' 是一个字符串并说明diff( ' cosx ' )是一个符 号表达式而不是数字表达式;而在第二个例 子中,用函数sym显式地告诉MATLAB M=sym( ' [a,b;c,d] ' )是一符号表达式。 在MATLAB可以自己确定变量类型的场合下, 通常不要求显式函数sym。
标准代数运算
很多标准的代数运算可以在符号表达式上 执行,函数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**
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
符号变量
当字符表达式中含有多于一个的变量时,只有一个变
量是独立变量。如果不告诉MATLAB哪一个变量是独
立变量,MATLAB将基于以下规则选择一个: 在符号表达式中缺省的独立变量是唯一的,除去i和j 的小写字母,不是单词的一部分。如果没有这种字 母,就选择x作为独立变量。如字符不是唯一的,就 选择在字母顺序中最接近x的字母。如果有相连的字 母,就选择在字母表中较后的那一个。
如果利用规则symvar不能找到一个缺省独立变量, 它便假定无独立变量并返回x。这一结论对含有由 多个字母组成的变量,如:alpha或s2的表达式,
相关主题