第22章符号数学工具 MATLAB所具有的符号数学工具箱与其它所有工具不同,它适用于广泛的用途,而不是 针对一些特殊专业或专业分支。另外, MATLA B符号数学工具箱与其它的工具箱区别还因为 它使用字符串来进行符号分析,而不是基于数组的数值分析。为此,本章包含了该工具箱的教 学辅导材料 22.1引言 符号数学工具箱是操作和解决符号表达式的符号数学工具箱(函数)集合,有复合、简化、 微分、积分以及求解代数方程和微分方程的工具。另外还有一些用于线性代数的工具,求解 逆、行列式、正则型式的精确结果,找出符号矩阵的特征值而无由数值计算引入的误差。工具 箱还支持可变精度运算,即支持符号计算并能以指定的精度返回结果 符号数学工具箱中的工具是建立在功能强大的称作Mapl软件的基础上。它最初是由加拿 大的滑铁卢( Waterloo)大学开发的。当要求 MATLAB进行符号运算时,它就请求 Maple去计 算并将结果返回到 MATLAB命令窗口。因此,在 MATLAB中的符号运算是 MATLAB处理数字 的自然扩展 22.2符号表达式 符号表达式是代表数字、函数、算子和变量的 MATLAB字符串,或字符串数组。不要求 变量有预先确定的值,符号方程式是含有等号的符号表达式。符号算术是使用已知的规则和给 定符号恒等式求解这些符号方程的实践,它与代数和微积分所学到的求解方法完全一样。符号 矩阵是数组,其元素是符号表达式 MATLAB在内部把符号表达式表示成字符串,以与数字变量或运算相区别:否则,这些 符号表达式几乎完全象基本的 MATLA B命令。表22.1列有几则符号表达式例子以及 MATLA B 等效表达式 表22.1 符号表达式 MATLAB表达式 y=1/sqrt(2 x) cos(x )-sin(2x) b M=sym('la, b: c, d]')
第22章 符号数学工具 MATLAB所具有的符号数学工具箱与其它所有工具不同,它适用于广泛的用途,而不是 针对一些特殊专业或专业分支。另外,MATLAB符号数学工具箱与其它的工具箱区别还因为 它使用字符串来进行符号分析,而不是基于数组的数值分析。为此,本章包含了该工具箱的教 学辅导材料。 22.1 引言 符号数学工具箱是操作和解决符号表达式的符号数学工具箱(函数)集合,有复合、简化、 微分、积分以及求解代数方程和微分方程的工具。另外还有一些用于线性代数的工具,求解 逆、行列式、正则型式的精确结果,找出符号矩阵的特征值而无由数值计算引入的误差。工具 箱还支持可变精度运算,即支持符号计算并能以指定的精度返回结果。 符号数学工具箱中的工具是建立在功能强大的称作Maple软件的基础上。它最初是由加拿 大的滑铁卢(Waterloo)大学开发的。当要求MATLAB进行符号运算时,它就请求Maple去计 算并将结果返回到MATLAB命令窗口。因此,在MATLAB中的符号运算是MATLAB处理数字 的自然扩展。 22.2 符号表达式 符号表达式是代表数字、函数、算子和变量的MATLAB字符串,或字符串数组。不要求 变量有预先确定的值,符号方程式是含有等号的符号表达式。符号算术是使用已知的规则和给 定符号恒等式求解这些符号方程的实践,它与代数和微积分所学到的求解方法完全一样。符号 矩阵是数组,其元素是符号表达式。 MATLAB在内部把符号表达式表示成字符串,以与数字变量或运算相区别;否则,这些 符号表达式几乎完全象基本的MATLAB命令。表22.1列有几则符号表达式例子以及MATLAB 等效表达式。 表22.1 符号表达式 MATLAB表达式 1 2x n ' 1/(2*x^n) ' 1 y = 2x y= ' 1/sqrt(2*x) ' cos(x ) sin( x) 2 − 2 ' cos(x^2)-sin(2*x) ' M a b c d = M=sym( ' [a,b;c,d] ' )
f=nt(x^3/sqrt(1-x)’,"a',"b') - dx 值 ATLAB符号函数可让用户用多种方法来操作这些表达式,比如 >>diff( cos(x))% differentiate cos(x)with respect tox > M=sym('la, b: c, d])% create a symbolic matrix M >>determ(M)% find the determinant of the symbolic matrix M ans- 请注意,上面的第一个例子的符号表达式是用单引号以隐含方式定义的。它告诉 MATLAB cos(x)是一个字符串并说明df’cosx’)是一个符号表达式而不是数字表达式;然而在第二个 例子中,用函数sm显式地告诉 MATLAB M=sym('Ia,b;c,d’)是一符号表达式。在 MATLAB可以自己确定变量类型的场合下,通常不要求显式函数sms 正如在第八章所阐述, MATLAB中函数 function argument形式是与 function(' argument') 等价的。其中, function是一个函数, argument是一字符串。例如, MATLAB可以构造dfr cos(x)和dif('’cos(x)’)两者都意味dir(sym’cosx)’)。但第一种形式显然更便于输入。然而, 很多时候sm是必要的。在上述的第二个例子中, >>M=a, b: c, d]% M is a numeric matrix using value of a through d o??Undefine function or variable a >>M=a, b: c, d'% M is a character string, but not a symbolic matrix > M=sym('a, b: c, d]')% M is a symbolic matrix
x x dx a b 3 1− f=int( ' x^3/sqrt(1-x) ' , ' a ' , ' b ' ) MATLAB符号函数可让用户用多种方法来操作这些表达式,比如, >> diff( ' cos(x) ' ) % differentiate cos(x) with respect to x ans= -sin(x) >> M=sym( ' [a,b;c,d] ' ) % create a symbolic matrix M M= [a,b] [c,d] >> determ(M) % find the determinant of the symbolic matrix M ans= a*d-b*c 请注意,上面的第一个例子的符号表达式是用单引号以隐含方式定义的。它告诉MATLAB ' cos(x) ' 是一个字符串并说明diff( ' cosx ' )是一个符号表达式而不是数字表达式;然而在第二个 例子中,用函数sym显式地告诉MATLAB M=sym( ' [a,b;c,d] ' )是一符号表达式。在 MATLAB可以自己确定变量类型的场合下,通常不要求显式函数sym。 正如在第八章所阐述,MATLAB中函数function argument形式是与function( ' argument ' ) 等价的。其中,function是一个函数,argument是一字符串。例如,MATLAB可以构造diff cos(x)和diff( ' cos(x) ' )两者都意味diff (sym ' cos(x) ' )。但第一种形式显然更便于输入。然而, 很多时候sym是必要的。在上述的第二个例子中, >> M=[a,b;c,d] % M is a numeric matrix using value of a through d ???Uundefine function or variable a. >> M= ' [a,b;c,d] ' % M is a character string, but not a symbolic matrix M= [a,b;c,d] >> M=sym( ' [a,b;c,d] ' ) % M is a symbolic matrix M= [a,b] [c,d]
M以三种方式定义:数字型(如果a、b、c、d已预先确定)、字符串型或符号矩阵型。许多符号 函数非常巧妙能够自动将字符转变为符号表达式。但在某些情况下,尤其是建立符号数组时 必须用函数sym,特别地将字符串变为符号表达式。隐含形式,例如 diff cos(x),对于那些不需 要参考先前结果的简单任务,最有用。但是最简单形式(无引号)要求一个参量,它是一个单字 符的字符串、不包含插入的空格 >> diffx^2+3*x+5% ent to ' x2+3*x+5' >>diff x2+3 x+5 spaces break the argument into separate strings ??Error using==>diff Too manyinput arguments 无变量的符号表达式称作符号常量。符号常量常常与整数很难区别,例如 > f-symop((3 4-2)/5+1)% reduce a symbolic constant to its simplest form 3 > isstr(f)% is f a string?(I=yes, 0=no) 在这个例子中,代表符号常数3:而不是数字3。正如第六章所阐述的, MATLAB是以 字符ASCI码形式来存储字符串的。所以,如果对字符串进行数字运算,则在运算中,采用各 字符串的ASCI码值。因为数字51是字符3的ASCI表示,所以f加1在数值上不能得到期望的 结果 >>f+1 ans- 符号变量 当字符表达式中含有多于一个的变量时,只有一个变量是独立变量。如果不告诉 MATLAB哪一个变量是独立变量, MATLA将基于以下规则选择一个 在符号表达式中缺省的独立变量是唯一的,除去和j的小写字母,不是单词的一部分。如 果没有这种字母,就选择x作为独立变量。如字符不是唯一的,就选择在字母顺序中最接 近x的字母。如果有相连的字母,就选择在字母表中较后的那一个
M以三种方式定义: 数字型(如果a、b、c、d已预先确定)、字符串型或符号矩阵型。许多符号 函数非常巧妙能够自动将字符转变为符号表达式。但在某些情况下,尤其是建立符号数组时, 必须用函数sym,特别地将字符串变为符号表达式。隐含形式,例如diff cos(x),对于那些不需 要参考先前结果的简单任务,最有用。但是最简单形式(无引号)要求一个参量,它是一个单字 符的字符串、不包含插入的空格。 >> diff x^2+3*x+5 % the argument is equivalent to ' x^2+3*x+5 ' ans= 2*x+3 >> diff x^2 + 3*x + 5 % spaces break the argument into separate strings ???Error using==>diff Too manyinput arguments 无变量的符号表达式称作符号常量。符号常量常常与整数很难区别,例如 >> f=symop( ' (3*4-2)/5+1 ' ) % reduce a symbolic constant to its simplest form f = 3 >> isstr(f) % is f a string? (1=yes, 0=no) ans= 1 在这个例子中,f代表符号常数 ' 3 ' ;而不是数字3。正如第六章所阐述的,MATLAB是以 字符ASCII码形式来存储字符串的。所以,如果对字符串进行数字运算,则在运算中,采用各 字符串的ASCII码值。因为数字51是字符 ' 3 ' 的ASCII表示,所以f加1在数值上不能得到期望的 结果 >> f+1 ans= 52 符号变量 当字符表达式中含有多于一个的变量时,只有一个变量是独立变量。如果不告诉 MATLAB哪一个变量是独立变量,MATLAB将基于以下规则选择一个: 在符号表达式中缺省的独立变量是唯一的,除去i和j的小写字母,不是单词的一部分。如 果没有这种字母,就选择x作为独立变量。如字符不是唯一的,就选择在字母顺序中最接 近x的字母。如果有相连的字母,就选择在字母表中较后的那一个
缺省的独立变量,有时称作自由变量,在表达式’1(5+cos(x)中是'x;在’3y+z中 是’y';在'a+sin(0’是’t'。在表式'sin(pi/4)-cos(3/5)'中自由符号变量是'x’,因为此式 是一个符号常数无符号变量。可利用函数 symvar询问 MATLA B在符号表达式中哪一个变量它 认为是独立变量 >>symvar(a*x+y*)% find the default symbolic variable > symvar(at+s/(u+3))% u is the closest tox > symvar( 'sin(omega))%omega is not a singlee character >>symvar(3*1+4*j)% i and j are equel to sqrt(-1) >>symvar(y+3*s,'t)% find the variable closest to t rather than x 如果利用规则 svmvar不能找到一个缺省独立变量,它便假定无独立变量并返回x。这一结 论对含有由多个字母组成的变量,如: alpha或s2的表达式,或不含变量的符号常数均成立。如 果需要,绝大多数命令都使用用户选项以指定独立变量。 >>diff(xn)% differentiate with respect to the default variable 'x Xn*n/x >diff('xn,'n)% differentiate x n with respect to'n >>diff( ' sin(omega))% differentiate using the default variables(x)
缺省的独立变量,有时称作自由变量,在表达式 ' 1/(5+cos(x)) ' 中是 ' x ' ;在 ' 3*y+z ' 中 是 ' y ' ;在 ' a+sin(t) ' 是 ' t ' 。在表式 ' sin(pi/4)-cos(3/5) ' 中自由符号变量是 ' x ' ,因为此式 是一个符号常数无符号变量。可利用函数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 >> 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 ' ) % find the variable closest to t rather than x ans= s 如果利用规则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 ' ans= x^n*log(x) >> diff( ' sin(omega) ' ) % differentiate using the default variables (x) ans= 0
meg omega’)% fy the independent variable 22.3符号表达式运算 旦创建了一个符号表达式,或许想以某些方式改变它:也许希望提取表达式的一部分, 合并两个表达式或求得表达的数值。有许多符号工具可以帮助完成这些任务 所有符号函数(很少特殊例外的情况,讨论于后)作用到符号表达式和符号数组,并返回符 号表达式或数组。其结果有时可能看起来象一个数字,但事实上它是一个内部用字符串表示的 个符号表达式。正如我们前面所讨论的,可以运用 MATLAB函数istr来找出像似数字的表达 式是否真是一个整数或是一个字符串。 提取分子和分母 如果表达式是一个有理分式(两个多项式之比),或是可以展开为有理分式(包括哪些分母为 1的分式),可利用 numden来提取分子或分母。例如,给定如下的表达式: ,在必要时,mmn将表达式合并、有理化并返回所得的分子和分母。进行这项运算的 LAB语句是 >>m=x2 %create a simple expression >>n, d]=numden(m)% extract the numerator and denominator >>f='a*x2/(b-x'% create a rational expression a*x^2/(b-x)
>> diff( ' sin(omega) ' , ' omega ' ) % specify the independent variable ans= cos(omega) 22.3 符号表达式运算 一旦创建了一个符号表达式,或许想以某些方式改变它;也许希望提取表达式的一部分, 合并两个表达式或求得表达的数值。有许多符号工具可以帮助完成这些任务。 所有符号函数(很少特殊例外的情况,讨论于后)作用到符号表达式和符号数组,并返回符 号表达式或数组。其结果有时可能看起来象一个数字,但事实上它是一个内部用字符串表示的 一个符号表达式。正如我们前面所讨论的,可以运用MATLAB函数isstr来找出像似数字的表达 式是否真是一个整数或是一个字符串。 提取分子和分母 如果表达式是一个有理分式(两个多项式之比),或是可以展开为有理分式(包括哪些分母为 1的分式),可利用numden来提取分子或分母。例如,给定如下的表达式: m x f ax b x g x x h x x x x k x x x = = − = + − = + − + − = + + 2 2 2 2 2 3 2 2 3 3 5 3 2 1 3 1 3 2 2 1 3 4 3 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 前二个表达式得到期望结果 >>g=3/2 x2+2/3 x-3/5% rationalize and extract the parts 3/2*x^2+2/3*x-3/5 >>[n, d]=numden(g 45*x^2+20*x-18 >>h='(x2+3)(2*x-1)+3*X/(x-1)% the sum of rational polynomials (x^2+3)/(2*x-1)+3*x/(x-1) >>n, d]=numden(h)% rationalize and extract x^3+5*x^2-3 在提取各部分之前,这二个表达式g和h被有理化,并变换成具有分子和分母的一个简单表 达式 >>k=sym( '3/2,(2*x+1)/3: 4/x2, 3*x+4])% try a symbolic array 3/2,(2*x+1)/3] [4Xx^2,3*x+4]
>> [n,d]=numden(f) % extract the numerator and denominator n= a*x^2 d= b-x 前二个表达式得到期望结果。 >> 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) 在提取各部分之前,这二个表达式g和h被有理化,并变换成具有分子和分母的一个简单表 达式。 >> k=sym( ' [3/2,(2*x+1)/3;4/x^2,3*x+4] ' ) % try a symbolic array k= [ 3/2,(2*x+1)/3] [4/x^2, 3*x+4] >> [n,d]=numden(k) n= [3, 2*x+1] [4, 3*x+4] d=
这个表达式k是符号数组, numden返回两个新数组n和d,其中n是分子数组,d是分母数 组。如果采用s= numden(n形式, numden仅把分子返回到变量s中 标准代数运算 很多标准的代数运算可以在符号表达式上执行,函数 symadd、 svmsub、 symlnul和 sy mdiv 为加、减、乘、除两个表达式, sympow将一个表达式上升为另一个表达式的幂次。例如:给 定两个函数 >>f2*x2+3*x-5% define the symbolic expression >>symadd(f, g)% find an expression for f+g 3*x^2+2*x+2 >> symsub(f, g)% find an expression for f-g ans- >> sammul(f, g)% find an expression for fg ans- (2*x^2+3*x-5)(x^2-x+7) ans- (2*x^2+3*x-5)^3*
[ 2,3] [x^2,1] 这个表达式k是符号数组,numden返回两个新数组n和d,其中n是分子数组,d是分母数 组。如果采用s=numden(f)形式,numden仅把分子返回到变量s中。 标准代数运算 很多标准的代数运算可以在符号表达式上执行,函数symadd、symsub、symlnul和symdiv 为加、减、乘、除两个表达式,sympow将一个表达式上升为另一个表达式的幂次。例如: 给 定两个函数 f = 2x + 3x −5 g = x − x + 7 2 2 >> 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 f 3* ans= (2*x^2+3*x-5)^3**
另一个通用函数可让用户用其它的符号变量、表达式和算子创建新的表达式。 symp取由 逗号隔开的、多至16个参量。各个参量可为符号表达式、数值或算子(+、'-∵、/、 (或)),然后 symon可将参量联接起来,返回最后所得的表达式 >>f=cos(x)' %create an expression >>g=sin(2*x)% create another expression sin(2*x) >> symp(, /,g,'',3)%combine them ans- cos(x)/sin(2*x)+3 所有这些运算也同样用数组参量进行 高级运算 MATLAB具有对符号表达式执行更高级运算的功能。函数 compose把fx)和g(x)复合成 fgxy)。函数 inverse求表达式的函数逆,而函数 symsum求表达式的符号和 给定表达式 g=sin(x) h k=sin(v) >>f1/(1+x2):% create the four expression >>gsin(x); >>h='1/(1+u^2)'; >>k sin(v)': compose(f, g)% find for f(g(x)) 1/(1+sin(x)2) compose(g, f)% find an expression for g(f(x))
另一个通用函数可让用户用其它的符号变量、表达式和算子创建新的表达式。symop取由 逗号隔开的、多至16个参量。各个参量可为符号表达式、数值或算子(' + '、' - '、'*'、' / '、' ^ '、' ( '或' ) '),然后symop可将参量联接起来,返回最后所得的表达式. >> f= ' cos(x) ' % create an expression f= cos(x) >> g= ' sin(2*x) ' % create another expression g= sin(2*x) >> symop(f,'/ ',g,'+',3) % combine them ans= cos(x)/sin(2*x)+3 所有这些运算也同样用数组参量进行。 高级运算 MATLAB具有对符号表达式执行更高级运算的功能。函数compose把f(x)和g(x)复合成 f(g(x))。函数finverse求表达式的函数逆,而函数symsum求表达式的符号和。 给定表达式 f x g x h u = + = = + 1 1 1 1 2 2 sin( ) k = sin(v) >> f= ' 1/(1+x^2) ' ; % create the four expression >> g= ' sin(x) ' ; >> h= ' 1/(1+u^2) ' ; >> k=' sin(v) ' ; >> compose(f,g) % find an expression for f(g(x)) ans= 1/(1+sin(x)^2) >> compose(g,f) % find an expression for g(f(x)) ans=
compose也可用于含有不同独立变量的函数表达式。 >>compose(h, k,'u',v,)% given h(u),k(v), find(k(v)) ans- l/(1+sin(v)^2) 表达式譬如x)的函数逆g(x),满足g((x)=x。例如,ex的函数逆是lmxy,因为hm(ex Sm(y的函数逆是arsn(y,图数、1 的函数逆是 arcsin(-)。函数fncr回表达式的函数 逆。如果解不是唯一就给出警告。 > inverse(1/x)% the inverse of 1/x is 1/x since ' 1/(1/x=x ans- > inverse( x2 ) g(x2)=x has more than one solution ans- x^(1/2) > inverse(a*x+b)% find the solution to 'g(f(x)=x >>inverse(a*b+c*d-az),a)% find the solution to 'g(f(a))=a ans- -(*d-a)/(b-z) smm函数求表达式的符号和有四种形式:smun(返回∑f(x):smm(,'s')返l ∑f(s), samsun,a,b返回∑∫(x):最普通的形式 samsun(r,s',a,b返回 让我们试一试∑x2,它应返回:xxx >>symsum(,)
sin(1/(1+x^2)) compose也可用于含有不同独立变量的函数表达式。 >> compose(h,k,'u','v') % given h(u),k(v),find(k(v)) ans= 1/(1+sin(v)^2) 表达式譬如f(x)的函数逆g(x),满足g(f(x))=x。例如, e x 的函数逆是ln(x),因为ln( e x )=x。 sin(x)的函数逆是arcsin(x),函数 1 tan(x) 的函数逆是arcsin ( ) 1 x 。函数fincerse返回表达式的函数 逆。如果解不是唯一就给出警告。 >> finverse( ' 1/x) % the inverse of 1/x is 1/x since ' 1/(1/x)=x ' ans= 1/x >> finverse( ' x^2 ' ) % g(x^2)=x has more than one solution Warning: finverse(x^2) is not unique ans= x^(1/2) >> finverse( ' a*x+b ' ) % find the solution to ' g(f(x))=x ' ans= -(b-x)/a >> finverse( ' a*b+c*d-a*z ' ), ' a ' ) % find the solution to ' g(f(a))=a ' ans= -(c*d-a)/(b-z) symsun函数求表达式的符号和有四种形式:symsun(f)返回 f x x ( ) 0 −1 ;symsum(f, ' s ' )返回 f s s ( ) 0 −1 ,symsun(f, a,b) 返回 f x a b ( ) ;最普通的形式symsun(f, ' s ' ,a,b)返回 f s a b ( ) 。 让我们试一试 x x 2 0 −1 ,它应返回: x x x 3 2 3 2 6 − + 。 >> symsum('x^2')
1/3*x^3-1/2*x^2+1/6*x ∑(2n-12又怎么样呢它应返回m2n-(2n+1。 3 11/3°n+8/3-4*(n+1)^2+4/3°(n+1)^3 > factor(ans)% change the form( we will revisit factor later on) ans- 1/3*n*(2帝n-1)*(2*n+1) 最后让我们试一试∑1 其返回应是。 >> systm(1/2*n-1)^2",1,inf 变换函数 本节提出许多工具,将符号表达式变换成数值或反之。有极少数的符号函数可返回数值。 然而请注意,某些符号函数能自动地将一个数字变换成它的符号表达式,如果该数字是函数许 多参量中的一个。 函数sym可获取一个数字参量并将其转换为符号表达式。函数 numeric的功能正好相反, 它把一个符号常数(无变量符号表达式)变换为一个数值 > phi=(1+sqrt(5))/2% the ' goldenratio phi- (1+sqrt(5))/2% convert to a numeric value > numeric(phi) 1.6180 正如第六章所介绍,函数eva将字符串传给 MATLAB以便计算。所以eva是另一个可用于 把符号常数变换为数字或计算表达式的函数
ans= 1/3*x^3-1/2* x^2+1/6*x (2 1) 2 1 n n − 又怎么样呢?它应返回 n(2n 1)(2n 1) 3 − + 。 >> sym('(2*n-1)^2',1,'n') ans= 11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3 >> factor(ans) % change the form ( we will revisit 'factor' later on) ans= 1/3*n*(2*n-1)*(2*n+1) 最后让我们试一试 1 2 1 2 1 ( n − ) ,其返回应是 2 8 。 >> symsum( ' 1/(2*n-1)^2 ' ,1,inf) ans= 1/8*pi^2 变换函数 本节提出许多工具,将符号表达式变换成数值或反之。有极少数的符号函数可返回数值。 然而请注意,某些符号函数能自动地将一个数字变换成它的符号表达式,如果该数字是函数许 多参量中的一个。 函数sym可获取一个数字参量并将其转换为符号表达式。函数numneric的功能正好相反, 它把一个符号常数(无变量符号表达式)变换为一个数值。 >> phi=' (1+sqrt(5))/2 ' % the ' golden ' ratio phi= (1+sqrt(5))/2 % convert to a numeric value >> numeric(phi) ans= 1.6180 正如第六章所介绍,函数eval将字符串传给MATLAB以便计算。所以eval是另一个可用于 把符号常数变换为数字或计算表达式的函数