2.1 符号对象的创建
2.1.1 创建符号变量和表达式
符号对象是符号工具箱中的一种数据类型。符号对象是符号的字符串表示。在符号工具箱中,符号对象表示符号变量、表达式和方程。符号运算仍然需要首先创建符号对象,如符号常数、符号变量、符号表达式等。
符号对象可以通过sym和syms函数来定义。下面介绍这两个函数的调用格式。
一、sym函数
sym函数可以用于生成单个的符号变量,其调用格式主要有以下几种。
var=sym('var'); 产生符号变量var。
var=sym('var',set); 产生符号变量var,并且声明变量var属于集合set。
sym('var','clear'); 清除之前已经设置的符号变量。
Num=sym(Num); 将数字变量或数字矩阵Num转换成符号形式。
Num=sym(Num,flag); 将数字变量或数字矩阵Num转换成符号形式,第二个参数表示转换后的数据类型,其取值为r、d、e和f中的一个。
A=sym('A',dim); 产生向量或矩阵符号变量。
A=sym('A',set); A 为已经存在的符号向量或矩阵,A 的所有元素均属于集合set,该表达式不是产生符号变量 A。若是要产生向量或矩阵符号变量,则可以使用表达式A=sym('A',[m,n])或A=sym('A',n)。
sym(A,'clear'); 清除之前设置的符号变量A。
f(arg1,arg2,…argN)=sym('f(arg1,arg2,…argN)'); 产生符号函数 f,并且声明符号函数的输入变量 arg1,arg2,…,argN。该调用格式不是产生输入变量 arg1,arg2,…,argN;输入变量必须是已经存在的符号变量。
【实例2-1】使用sym函数产生符号表达式 f =a sin x+bex。
思路·点拨
本例可以使用两种方法生成该符号表达式,一种是采用逐个变量定义法,另外一种是采用整体定义的方法定义符号表达式。使用sym函数上述的调用格式调用即可。
—附带光盘“Ch2\实例2-1”文件夹
——附带光盘“AVI\实例2-1.avi”
解:方法一:逐个变量定义法,程序如下。
a=sym('a');
b=sym('b');
x=sym('x');
e=sym('e');
f=a*sin(x)+b*e^x
程序运行结果如下。
f =
a*sin(x) + b*e^x
方法二:采用整体定义表达式的方法,程序如下。
f=sym(a*sin(x)+b*e^x)
程序运行结果如下。
f =
a*sin(x) + b*e^x
比较上述两种方法,可以看出,使用方法二能够减少程序的输入,而且输出结果与方法一相同,因此,方法二是一种更为简洁的方法。
二、syms函数
syms用于一次生成多个符号变量,但是不能用于生成表达式。其主要调用格式有以下几种。
syms var1,…varN; 生成符号变量var1,…,varN。
syms var1,…varN set; 生成符号变量 var1,…,varN,并且声明符号变量属于集合 set,其中set可以为实数或者是虚数。
syms var1,…varN clear; 清除已经声明的符号变量var1,…,varN。
syms f(arg1,…,argN); 生成符号函数f,符号变量var1,…,varN表示符号函数f的输入变量。
例如,生成符号变量x、y,假设x和y为实数,则代码如下。
sym x y real;
例如,产生符号表达式f(x,y)=x+2y,则代码如下。
syms f(x,y);
f(x,y)=x+2*y
再例如,产生符号矩阵,并且求在x=2时的值,其代码如下。
syms x;
f(x)=[x x^2;x^3 x^4]
f(2)
程序运行结果如下。
f(x) =
[ x, x^2]
[ x^3, x^4]
ans =
[ 2, 4]
[ 8, 16]
三、symvar函数
该函数用于确定一个表达式中所有存在的符号变量。其调用格式有以下两种。
symvar(s); 返回一个包含在符号表达式s中的所有符号变量。
symvar(s,n); 返回一个包含 n 个在表达式 s 中的符号变量向量。如果 s 是一个符号表达式,那么则返回s的输入变量。
例如,找到符号表达式f中的所有符号变量,其中符号表达式f为
f(a,b)=a*x^2/(sin(3*y-b));
那么在程序中输入以下语句:
symvar(f);
程序的输出结果如下。
ans =
[ a, b, x, y]
注:该函数的返回值都是一个行向量。
四、subs函数
subs函数可以将符号表达式中的符号变量用数值代替,其主要调用格式如下。
g=subs(f,old,new); 在表达式中,用new代替old中的值,并计算。
g=subs(f,new); 用new代替表达式中所有默认的符号变量的值,并计算。
g=subs(f); 替换符号表达式中所有的符号变量,其值可以从调用函数和 MATLAB工作空间中调用,然后计算符号表达式的值。没有指定值的变量仍然可以作为变量。
例如,用代替符号表达式f=x+2sinx中的值,并计算f的值,其代码如下。
syms x;
f=x+2*sin(x)
subs(f,pi/4)
程序运行结果如下。
f =
x + 2*sin(x)
ans =
2.1996
函数subs在多变量符号表达式中的应用举例如下。
已知符号表达式 f=x2+y2,分别用 x=3,y=4代替符号表达式中的 x 和 y,并计算表达式的值。程序如下。
syms x y;
f=x^2+y^2;
g=subs(f,x,3)
subs(g,y,4)
程序运行结果如下。
g =
y^2 + 9
ans =
25