第二章  符 号 运 算 MATLAB 的数学计算=数值计算+符号计算   其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。
1.  符号变量、符号表达式和符号方程的生成   使用 sym 函数定义符号变量和符号表达式  使用 syms 函数定义符号变量和符号表达式
2 、用 syms 创建符号变量 使用 syms 命令创建符号变量和符号表达式 语法: syms(‘arg1’, ‘arg2’, …, 参数 )  % 把字符变量定义为                               % 符号变量 syms arg1 arg2 …, 参数 % 把字符变量定义为符号变量的简洁形                         % 式 说明: syms 用来创建多个符号变量,这两种方式创建的符号对象是相同的。参数设置和前面的 sym 命令相同,省略时符号表达式直接由各符号变量组成。
使用 syms 函数定义符号变量和符号表达式 >> syms a b c x >> f = a*x^2 + b*x + c f = a*x^2 + b*x + c >> g=f^2+4*f-2 g = (a*x^2+b*x+c)^2+4*a*x^2+4*b*x+4*c-2 >> ex0201
符号方程的生成 >> % 符号方程的生成 >> % 使用 sym 函数生成符号方程 >> equation1='sin(x)+cos(x)=1' equation1 = sin(x)+cos(x)=1 >>
2.2  符号形式与数值形式的转换 1 、将符号形式转换为数值形式: eval  与  numeric 例: a1='2*sqrt(5)+pi'      a1 =      2*sqrt(5)+pi     b2=numeric(a2)  % 转换为数值变量      b2 =     7.6137     b3=eval(a1)     b3 =    7.6137
2.2  符号形式与数值形式的转换 2 、数值形式转换为符号形式 p=3.1416; q=sym(p) 执行后屏幕显示: q=3927/1250 numeric(q) 屏幕显示:    ans =    3.1416
2.2  符号形式与数值形式的转换 3 、多项式与系数向量之间的转换 3.1   sym2poly:  将多项式转化为对应的系数向量   例: syms x p; p=x^3-4*x+5; sym2poly(p) 执行后屏幕显示: ans= 1  0  -4  5
2.2  符号形式与数值形式的转换 3 、多项式与系数向量之间的转换 3.2   poly2sym:  将向量转化为对应的多项式 例    a=[1  0  -4  5]; poly2sym(a) 执行后屏幕显示 ans= x^3-4*x+5
3.  符号表达式 ( 符号函数 ) 的操作  (1) 符号表达式的四则运算 syms x f=x^3-6*x^2+11*x-6; g=(x-1)*(x-2)*(x-3); h=x*(x*(x-6)+11)-6; f+g-h 执行后输出: ans =  x^3-6*x^2+11*x+(x-1)*(x-2)*(x-3)-x*(x*(x-6)+11)
(1)  符号表达式的四则运算  >> syms x y a b  >> fun1=sin(x)+cos(y)  fun1 = sin(x)+cos(y) >> fun2=a+b fun2 = a+b >> fun1+fun2 ans = sin(x)+cos(y)+a+b >>fun1*fun2  ans = (sin(x)+cos(y))*(a+b)
(1) 将表达式中的括号进行展开 : expand (2) 将表达式进行因式分解: factor (3) 将一般的表达式变换为嵌套的形式: horner (4) 将表达式按某一个变量的幂进行集项: collect (5) 化简表达式: simplify (6) 化简表达式,使之成为书写长度最短的   形式: simple
同一个数学函数的符号表达式的可以表示成三种形式,例如以下的 f(x) 就可以分别表示为: 多项式形式的表达方式: f(x)=x^3+6x^2+11x-6  因式形式的表达方式 (factor) : f(x)=(x-1)(x-2)(x-3)  嵌套形式的表达方式 (horner) : f(x)=x(x(x-6)+11)-6
集项-合并符号表达式的同类项  >> syms x y >> collect(x^2*y + y*x - x^2 - 2*x) ans =    (y-1)*x^2+(y-2)*x >> syms x y >> collect(x^2*y + y*x - x^2 - 2*x,y) ans =    (x^2+x)*y-x^2-2*x
符号多项式的嵌套 (horner  ) >> syms x  >> fun1=2*x^3+2*x^2-32*x+40 fun1 = 2*x^3+2*x^2-32*x+40 >> horner(fun1) ans = 40+(-32+(2+2*x)*x)*x >>  fun2=x^3-6*x^2+11*x-6 fun2 = x^3-6*x^2+11*x-6 >> horner(fun2) ans = -6+(11+(-6+x)*x)*x >>
符号表达式的化简  (simplify)  >> syms x >> fun1=(1/x+7/x^2+12/x+8)^(1/3) fun1 = (13/x+7/x^2+8)^(1/3) >> sfy1= simplify (fun1) sfy1 = ((13*x+7+8*x^2)/x^2)^(1/3) >> sfy2= simple (sfy1) sfy2 = (13/x+7/x^2+8)^(1/3)
subs 函数用于替换求值  >> syms x y f = x^2*y + 5*x*sqrt(y) f = x^2*y+5*x*y^(1/2) >> subs(f, x, 3) ans = 9*y+15*y^(1/2) >> subs(f, y, 3) ans = 3*x^2+5*x*3^(1/2) >>subs(f,{x,y},{1,1}) ex0202 ex0203 ex0204
4 、 反函数的运算  (finverse ) >> syms x y >> f = x^2+y f =  x^2+y  >> finverse(f,y)  ans =  -x^2+y  使用格式: 1 、 g=finverse(f):f,g 均为单变量 x 的符号函数; 2 、 g=finverse(f,t)  返回值 g 的自变量取为 t ;
5  复合函数的运算  (compose)  >> syms x y z t u >> f = 1/(1 + x^2); >> g = sin(y); >>  h = x^t; >>  p = exp(-y/u) ; >> compose(f,g) ans =  1/(1+sin(y)^2) >> compose(f,g,t) ans = 1/(1+sin(t)^2) 使用格式: Compose(f,g)  % 返回当 f=f(y) 和 g=g(x) 时     的复合函数 f(g(x)) Compose(f,g,t)   % 返回的复合函数以 t 为 自变量,即有 f(g(t))
6  函数的极限、导数与积分  ( 1 )函数极限 - limit 函数的使用  ( 2 )函数求导 - diff 函数的使用  ( 3 )符号积分- int 函数的使用
符号极限  (limit)  假定符号表达式的极限存在, Symbolic Math Toolbox 提供了直接求表达式极限的函数 limit ,函数 limit 的基本用法如下表所示 。 limit 函数的用法 对 x 求右趋近于 a 的极限 limt(f,’x’,a, ‘right’) 对 x 求左趋近于 a 的极限 limt(f,’x’,a, ‘left’) 对 x 求趋近于 a 的极限,当左右极     限不相等时极限不存在。 limt(f,’x’,a) 对 x 求趋近于 0 的极限 limt(f) 说明 函数格式 表达式
符号极限  (limit) >> syms x a t h; >>  limit(sin(x)/x) ans =  1 >>  limit((x-2)/(x^2-4),2) ans =  1/4  >> limit((1+2*t/x)^(3*x),x,inf) ans = exp(6*t) 如果左右极限不相等,则极限不存在, matlab 命令窗口中显示 Nan
(2) 符号求导 调用格式 : 一阶导数: yx=diff(f,x) 二阶导数: yxx=diff(f,x,2) 或 yxx=diff(yx,x) 三阶导数: yxxx=diff(f,x,3) 或 yxxx=diff(yxx,x) ex0205 一、一元函数符号求导 求导函数: diff diff(f) % 求 f 对自由变量的一阶微分 diff(f,t) % 求 f 对符号变量 t 的一阶微分 diff(f,n) % 求 f 对自由变量的 n 阶微分 diff(f,t,n)  % 求 f 对符号变量 t 的 n 阶微分
(2) 符号求导 二、二元函数的符号求导 syms x y z z=x^4+y^4-cos(2*x+3*y); zx=diff(z,x); zy=diff(z,y); zxx=diff(zx,x); zxy=diff(zx,y); zxyx=diff(zxy,x); zx,zy,zxy,zxyx             ex0206
3 、符号积分  积分有定积分和不定积分,运用函数 int 可以求得符号表达式的积分。 语法: int(f,t)  % 求符号变量 t 的不定积分 int(f,t,a,b)  % 求符号变量 t 的积分 int(f,t,’m’,’n’)  % 求符号变量 t 的积分 说明: t 为符号变量,当 t 省略则为默认自由变量; a 和 b 为数值, [a,b] 为积分区间; m 和 n 为符号对象, [m,n] 为积分区间;与符号微分相比,符号积分复杂得多。因为函数的积分有时可能不存在,即使存在,也可能限于很多条件, MATLAB 无法顺利得出。当 MATLAB 不能找到积分时,它将给出警告提示并返回该函数的原表达式。 Ex0207-0208
7 、符号求和: 求和函数: symsum(fn,n,n1,n2) 其中 fn 为求和通项, n 为求和的自变量, n1 为起始项, n2 终止项, n2 可为任意有限正整数,也可以取到无穷 ( 即 inf) Ex0209-10
8 、 Taylor 展开 把函数 f(x)Taylor 展开的函数: taylor(f,n,x0) 其中 : f 为被展开的函数表达式 n 为展开时指定的项数 x0 为指定的展开点 ex0211
9  方程求根 MATLAB 可以用 solve 命令给出方程的数值解。 语法: solve(‘eq’,x)     % 求方程关于指定变量的解 solve(‘eq1’, ’eq2’,x1,x2,…)  % 求方程组关于指                                   定变量的解   说明: eq 可以是含等号的符号表达式的方程,也可 以是不含等号的符号表达式,但所指的仍是令 eq=0 的方程; 当参数 x 省略时,默认为方程中的自由变量;其输出结果为 结构数组类型。   另外,只能用 solve 求代数方程与超越方程(含方程组) 的解,而不能用来求微分方程和积分方程的解。 ex0213 - 14 , 02142
方程组的求解 求三元方程组 x 2 +2x+1=0 x+3z=1 yz=-1 的解 f1=sym(‘x^2+2*x+1=0’); f2=sym(‘x+3*z=1’); f3=sym(‘y*z=-1’); [x,y,z]=solve(f1,f2,f3,’x’,’y’,’z’)
10  常微分方程的符号解 MATLAB 提供了 dsolve 命令可以用于对符号常微分方程进行求解。 语法: dsolve(‘eq’,’con’,’v’)  % 求解微分方程 dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v2…’)                       % 求解微分方程组 说明:’ eq’ 为常微分方程;’ con’ 是常微分初始条件,可省略;’ v’ 为指定自 由变量,省略时则默认为 x 或 t 为自由变量;输出结果为结构数组类型。   当 y 是因变量时,微分方程’ eq’ 的表述规定为:    y 的一阶导数或表示为 Dy ;    y 的 n 阶导数或表示为 Dny 。   微分初始条件 'con' 应写成 'y(a)=b , Dy(c)=d' 的格式;当初始条件少于微分方程数时,在所得解中将出现任意常数符 C1 , C2…… ,解中任意常数符的数目等于所缺少的初始条件数。 ex0216 - 18
11. 图示化符号函数计算器  单变量符号函数计算器  输入框的功能  控制按钮的功能  泰勒级数逼近计算器
( 1 )单变量符号函数计算器  使用 funtool 函数来调用图示化单变量符号函数计算器
( 2 )泰勒级数逼近计算器  使用 taylortool 函数来调用图示化泰勒级数逼近计算器
THE END

第2章符 号 运 算

  • 1.
    第二章 符号 运 算 MATLAB 的数学计算=数值计算+符号计算   其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。
  • 2.
    1. 符号变量、符号表达式和符号方程的生成 使用 sym 函数定义符号变量和符号表达式 使用 syms 函数定义符号变量和符号表达式
  • 3.
    2 、用 syms创建符号变量 使用 syms 命令创建符号变量和符号表达式 语法: syms(‘arg1’, ‘arg2’, …, 参数 ) % 把字符变量定义为                               % 符号变量 syms arg1 arg2 …, 参数 % 把字符变量定义为符号变量的简洁形                         % 式 说明: syms 用来创建多个符号变量,这两种方式创建的符号对象是相同的。参数设置和前面的 sym 命令相同,省略时符号表达式直接由各符号变量组成。
  • 4.
    使用 syms 函数定义符号变量和符号表达式>> syms a b c x >> f = a*x^2 + b*x + c f = a*x^2 + b*x + c >> g=f^2+4*f-2 g = (a*x^2+b*x+c)^2+4*a*x^2+4*b*x+4*c-2 >> ex0201
  • 5.
    符号方程的生成 >> %符号方程的生成 >> % 使用 sym 函数生成符号方程 >> equation1='sin(x)+cos(x)=1' equation1 = sin(x)+cos(x)=1 >>
  • 6.
    2.2 符号形式与数值形式的转换1 、将符号形式转换为数值形式: eval 与 numeric 例: a1='2*sqrt(5)+pi'    a1 =      2*sqrt(5)+pi    b2=numeric(a2) % 转换为数值变量    b2 =     7.6137   b3=eval(a1)   b3 =   7.6137
  • 7.
    2.2 符号形式与数值形式的转换2 、数值形式转换为符号形式 p=3.1416; q=sym(p) 执行后屏幕显示: q=3927/1250 numeric(q) 屏幕显示:    ans =    3.1416
  • 8.
    2.2 符号形式与数值形式的转换3 、多项式与系数向量之间的转换 3.1   sym2poly: 将多项式转化为对应的系数向量   例: syms x p; p=x^3-4*x+5; sym2poly(p) 执行后屏幕显示: ans= 1 0 -4 5
  • 9.
    2.2 符号形式与数值形式的转换3 、多项式与系数向量之间的转换 3.2   poly2sym: 将向量转化为对应的多项式 例    a=[1 0 -4 5]; poly2sym(a) 执行后屏幕显示 ans= x^3-4*x+5
  • 10.
    3. 符号表达式( 符号函数 ) 的操作 (1) 符号表达式的四则运算 syms x f=x^3-6*x^2+11*x-6; g=(x-1)*(x-2)*(x-3); h=x*(x*(x-6)+11)-6; f+g-h 执行后输出: ans = x^3-6*x^2+11*x+(x-1)*(x-2)*(x-3)-x*(x*(x-6)+11)
  • 11.
    (1) 符号表达式的四则运算 >> syms x y a b >> fun1=sin(x)+cos(y) fun1 = sin(x)+cos(y) >> fun2=a+b fun2 = a+b >> fun1+fun2 ans = sin(x)+cos(y)+a+b >>fun1*fun2 ans = (sin(x)+cos(y))*(a+b)
  • 12.
    (1) 将表达式中的括号进行展开 :expand (2) 将表达式进行因式分解: factor (3) 将一般的表达式变换为嵌套的形式: horner (4) 将表达式按某一个变量的幂进行集项: collect (5) 化简表达式: simplify (6) 化简表达式,使之成为书写长度最短的   形式: simple
  • 13.
    同一个数学函数的符号表达式的可以表示成三种形式,例如以下的 f(x) 就可以分别表示为:多项式形式的表达方式: f(x)=x^3+6x^2+11x-6 因式形式的表达方式 (factor) : f(x)=(x-1)(x-2)(x-3) 嵌套形式的表达方式 (horner) : f(x)=x(x(x-6)+11)-6
  • 14.
    集项-合并符号表达式的同类项 >>syms x y >> collect(x^2*y + y*x - x^2 - 2*x) ans =    (y-1)*x^2+(y-2)*x >> syms x y >> collect(x^2*y + y*x - x^2 - 2*x,y) ans =    (x^2+x)*y-x^2-2*x
  • 15.
    符号多项式的嵌套 (horner ) >> syms x >> fun1=2*x^3+2*x^2-32*x+40 fun1 = 2*x^3+2*x^2-32*x+40 >> horner(fun1) ans = 40+(-32+(2+2*x)*x)*x >> fun2=x^3-6*x^2+11*x-6 fun2 = x^3-6*x^2+11*x-6 >> horner(fun2) ans = -6+(11+(-6+x)*x)*x >>
  • 16.
    符号表达式的化简 (simplify) >> syms x >> fun1=(1/x+7/x^2+12/x+8)^(1/3) fun1 = (13/x+7/x^2+8)^(1/3) >> sfy1= simplify (fun1) sfy1 = ((13*x+7+8*x^2)/x^2)^(1/3) >> sfy2= simple (sfy1) sfy2 = (13/x+7/x^2+8)^(1/3)
  • 17.
    subs 函数用于替换求值 >> syms x y f = x^2*y + 5*x*sqrt(y) f = x^2*y+5*x*y^(1/2) >> subs(f, x, 3) ans = 9*y+15*y^(1/2) >> subs(f, y, 3) ans = 3*x^2+5*x*3^(1/2) >>subs(f,{x,y},{1,1}) ex0202 ex0203 ex0204
  • 18.
    4 、 反函数的运算 (finverse ) >> syms x y >> f = x^2+y f = x^2+y >> finverse(f,y) ans = -x^2+y 使用格式: 1 、 g=finverse(f):f,g 均为单变量 x 的符号函数; 2 、 g=finverse(f,t) 返回值 g 的自变量取为 t ;
  • 19.
    5 复合函数的运算 (compose) >> syms x y z t u >> f = 1/(1 + x^2); >> g = sin(y); >> h = x^t; >> p = exp(-y/u) ; >> compose(f,g) ans = 1/(1+sin(y)^2) >> compose(f,g,t) ans = 1/(1+sin(t)^2) 使用格式: Compose(f,g) % 返回当 f=f(y) 和 g=g(x) 时    的复合函数 f(g(x)) Compose(f,g,t)   % 返回的复合函数以 t 为 自变量,即有 f(g(t))
  • 20.
    6 函数的极限、导数与积分 ( 1 )函数极限 - limit 函数的使用 ( 2 )函数求导 - diff 函数的使用 ( 3 )符号积分- int 函数的使用
  • 21.
    符号极限 (limit) 假定符号表达式的极限存在, Symbolic Math Toolbox 提供了直接求表达式极限的函数 limit ,函数 limit 的基本用法如下表所示 。 limit 函数的用法 对 x 求右趋近于 a 的极限 limt(f,’x’,a, ‘right’) 对 x 求左趋近于 a 的极限 limt(f,’x’,a, ‘left’) 对 x 求趋近于 a 的极限,当左右极    限不相等时极限不存在。 limt(f,’x’,a) 对 x 求趋近于 0 的极限 limt(f) 说明 函数格式 表达式
  • 22.
    符号极限 (limit)>> syms x a t h; >> limit(sin(x)/x) ans = 1 >> limit((x-2)/(x^2-4),2) ans = 1/4 >> limit((1+2*t/x)^(3*x),x,inf) ans = exp(6*t) 如果左右极限不相等,则极限不存在, matlab 命令窗口中显示 Nan
  • 23.
    (2) 符号求导 调用格式: 一阶导数: yx=diff(f,x) 二阶导数: yxx=diff(f,x,2) 或 yxx=diff(yx,x) 三阶导数: yxxx=diff(f,x,3) 或 yxxx=diff(yxx,x) ex0205 一、一元函数符号求导 求导函数: diff diff(f) % 求 f 对自由变量的一阶微分 diff(f,t) % 求 f 对符号变量 t 的一阶微分 diff(f,n) % 求 f 对自由变量的 n 阶微分 diff(f,t,n) % 求 f 对符号变量 t 的 n 阶微分
  • 24.
    (2) 符号求导 二、二元函数的符号求导syms x y z z=x^4+y^4-cos(2*x+3*y); zx=diff(z,x); zy=diff(z,y); zxx=diff(zx,x); zxy=diff(zx,y); zxyx=diff(zxy,x); zx,zy,zxy,zxyx             ex0206
  • 25.
    3 、符号积分  积分有定积分和不定积分,运用函数int 可以求得符号表达式的积分。 语法: int(f,t) % 求符号变量 t 的不定积分 int(f,t,a,b) % 求符号变量 t 的积分 int(f,t,’m’,’n’) % 求符号变量 t 的积分 说明: t 为符号变量,当 t 省略则为默认自由变量; a 和 b 为数值, [a,b] 为积分区间; m 和 n 为符号对象, [m,n] 为积分区间;与符号微分相比,符号积分复杂得多。因为函数的积分有时可能不存在,即使存在,也可能限于很多条件, MATLAB 无法顺利得出。当 MATLAB 不能找到积分时,它将给出警告提示并返回该函数的原表达式。 Ex0207-0208
  • 26.
    7 、符号求和: 求和函数:symsum(fn,n,n1,n2) 其中 fn 为求和通项, n 为求和的自变量, n1 为起始项, n2 终止项, n2 可为任意有限正整数,也可以取到无穷 ( 即 inf) Ex0209-10
  • 27.
    8 、 Taylor展开 把函数 f(x)Taylor 展开的函数: taylor(f,n,x0) 其中 : f 为被展开的函数表达式 n 为展开时指定的项数 x0 为指定的展开点 ex0211
  • 28.
    9  方程求根 MATLAB可以用 solve 命令给出方程的数值解。 语法: solve(‘eq’,x)    % 求方程关于指定变量的解 solve(‘eq1’, ’eq2’,x1,x2,…) % 求方程组关于指                                   定变量的解 说明: eq 可以是含等号的符号表达式的方程,也可 以是不含等号的符号表达式,但所指的仍是令 eq=0 的方程; 当参数 x 省略时,默认为方程中的自由变量;其输出结果为 结构数组类型。   另外,只能用 solve 求代数方程与超越方程(含方程组) 的解,而不能用来求微分方程和积分方程的解。 ex0213 - 14 , 02142
  • 29.
    方程组的求解 求三元方程组 x2 +2x+1=0 x+3z=1 yz=-1 的解 f1=sym(‘x^2+2*x+1=0’); f2=sym(‘x+3*z=1’); f3=sym(‘y*z=-1’); [x,y,z]=solve(f1,f2,f3,’x’,’y’,’z’)
  • 30.
    10 常微分方程的符号解MATLAB 提供了 dsolve 命令可以用于对符号常微分方程进行求解。 语法: dsolve(‘eq’,’con’,’v’) % 求解微分方程 dsolve(‘eq1,eq2…’,’con1,con2…’,’v1,v2…’)                      % 求解微分方程组 说明:’ eq’ 为常微分方程;’ con’ 是常微分初始条件,可省略;’ v’ 为指定自 由变量,省略时则默认为 x 或 t 为自由变量;输出结果为结构数组类型。   当 y 是因变量时,微分方程’ eq’ 的表述规定为:    y 的一阶导数或表示为 Dy ;    y 的 n 阶导数或表示为 Dny 。   微分初始条件 'con' 应写成 'y(a)=b , Dy(c)=d' 的格式;当初始条件少于微分方程数时,在所得解中将出现任意常数符 C1 , C2…… ,解中任意常数符的数目等于所缺少的初始条件数。 ex0216 - 18
  • 31.
    11. 图示化符号函数计算器 单变量符号函数计算器 输入框的功能 控制按钮的功能 泰勒级数逼近计算器
  • 32.
    ( 1 )单变量符号函数计算器 使用 funtool 函数来调用图示化单变量符号函数计算器
  • 33.
    ( 2 )泰勒级数逼近计算器 使用 taylortool 函数来调用图示化泰勒级数逼近计算器
  • 34.