1、2、MATLAB的符号运算 matlab 不仅具有数值运算功能,还 开发了在matlab环境下实现符号计算的工 具包Symbolic、Math Toolbox。 符号计算是matlab数值运算的扩展, 在运算过程中以符号表达式或符号矩阵为运 算对象,对象是一个字符,数字也被当作字 符来处理。 符号运算的功能 符号表达式、符号矩阵的创建 符号线性代数 因式分解、展开和简化 符号代数方程求解 符号微积分 符号微分方程 运算对象可以是没赋值的符号变量 可以获得任意精度的解 Symbolic Math Toolbox符号运 算工具包通过调用Maple软件实现符号 计算的。 maple软件主要功能是符号
2、运算, 它占据符号软件的主导地位。 符号运算的特点 1.符号运算的基本操作 1.什么是符号运算 与数值运算的区别 数值运算中必须先对变量赋值数值运算中必须先对变量赋值, 然后才能参与运算。 符号运算无须事先对独立变量赋符号运算无须事先对独立变量赋 值值,运算结果以标准的符号形式表达。 2. 符号变量与符号表达式 f = sin(x)+5x f 符号变量名 sin(x)+5x 符号表达式 符号标识 符号表达式一定要用 单引号括 起来matlab才能识别。 的内容可以是符号表达式, 也可以是符号方程。 例: f1=ax2+bx+c 二次三项式 f2= ax2+bx+c=0 方程 f3=Dy+y2=
3、1 微分方程 符号表达式或符号方程可以赋给符 号变量,以后调用方便;也可以不赋 给符号变量直接参与运算 用字符串直接创建矩阵 模仿matlab数值矩阵的创建方法 需保证同一列中各元素字符串有相同的长度。 例:A = a,2*b; 3*a, 0 A = a, 2*b 3*a, 0 3.符号矩阵的创建 用函数sym创建矩阵(symbolic) 命令格式:A=sym( ) 符号矩阵内容同数值矩阵 需用sym指令定义 需用 标识 例如:A = sym(a , 2*b ; 3*a , 0) A = a, 2*b 3*a, 0 这就完成了一个符号矩阵的创建。 注意:符号矩阵的每一行的两端都有方括号,这 是
4、与 matlab数值矩阵的一个重要区别。 符号矩阵的修改 a.直接修改 可用、 键找到所要修改的矩阵,直接修改 b.指令修改 用A1=subs(A, new, old)来修改 例如:例如: A = a, 2*b 3*a, 0 A(2,2)=4*b A = a, 2*b 3*a, 4*b A2=subs(A, c, b) A2 = a, 2*c 3*a, 4*c 符号矩阵与数值矩阵的转换 将数值矩阵转化为符号矩阵 函数调用格式:sym(A) A=1/3,2.5;1/0.7,2/5 A = 0.3333 2.5000 1.4286 0.4000 sym(A) ans = 1/3, 5/2 10/7
5、, 2/5 将符号矩阵转化为数值矩阵 函数调用格式: numeric(A) A = 1/3, 5/2 10/7, 2/5 numeric(A) ans = 0.3333 2.5000 1.4286 0.4000 1. 符号矩阵运算 数值运算中,所有矩阵运算操作指 令都比较直观、简单。例如:a=b+c; a=a*b ;A=2*a2+3*a-5等。 而符号运算就不同了,所有涉及符 号运算的操作都有专用函数来进行。 二、符号运算 例1:f= 2*x2+3*x-5; g= x2+x-7; syms x f=2*x2+3*x-5; g= x2+x-7; h=f+g h = 3*x2+4*x-12 例2:
6、f=cos(x);g= sin(2*x); syms x f=cos(x);g=sin(2*x); f/g+f*g ans = cos(x)/sin(2*x)+cos(x)*sin(2*x) 2.因式的分解、展开、化简 factor函数的功能为:把多项式S分解为多个因 式,各多项式的系数均为有理数。格式为: factor(s) expand函数的功能为:把多项式和初等函数的 符号展开,也可以展开三角函数,指数和对数 函数。格式为:expand(s) simple函数的功能为:搜索符号表达式的最简形 式。 格式为: simple(s) 例3:syms a x;f1=x5*x3+5*x2+5*x-
7、6;factor(f1) ans = (x-1)*(x-2)*(x-3)*(x+1) 例4: syms x factor(x9-1) ans = (x-1)*(x2+x+1)*(x6+x3+1) 例5:syms x y; expand(cos(x+y) ans = cos(x)*cos(y) - sin(x)*sin(y) 例6: f=sym(cos(x)2+sqrt(x2+2*x+1)+sin(x)2); F=simple(f); F=simple(F) 2.符号极限 limit函数的调用格式为:函数的调用格式为: (1) limit(f,x,a):求符号函数f(x)的极限值。即计 算当变量
8、x趋近于常数a时,f(x)函数的极限 值。 (2) limit(f,a):求符号函数f(x)的极限值。由于没 有指定符号函数f(x)的自变量,则使用该格 式时,符号函数f(x)的变量为函数findsym(f) 确定的默认自变量,即变量x趋近于a。 (3) limit(f):求符号函数f(x)的极限值。符号函 数f(x)的变量为函数findsym(f)确定的默认变 量;没有指定变量的目标值时,系统默认变 量趋近于0,即a=0的情况。 (4) limit(f,x,a,right):求符号函数f的极限值。 right表示变量x从右边趋近于a。 (5) limit(f,x,a,left):求符号函数f
9、的极限值。 left表示变量x从左边趋近于a。 例7 求下列极限 极限1: syms a m x; f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/(x+a); limit(f,x,a) ans = (1/2*a*exp(sin(a)+1/2*a-exp(tan(a)+1)/a 极限2: syms x t; limit(1+2*t/x)(3*x),x,inf) ans = exp(6*t) diff(f) 对缺省变量求微分 diff(f,v) 对指定变量v求微分 diff(f,v,n) 对指定变量v求n阶微分 int(f) 对f表达式的缺省变量求不定积分 int(f,
10、v) 对f表达式的v变量求不定积分 int(f,v,a,b) 对f表达式的v变量在(a,b) 区间求定积分 3.符号微积分与积分变换 mtaylor(f,n) 泰勒级数展开 ztrans(f) Z变换 Invztrans(f) 反Z变换 Laplace(f) 拉氏变换 Invlaplace(f) 反拉氏变换 fourier(f) 付氏变换 Invfourier(f) 反付氏变换 例9:求导数 syms x %定义符号变量 diff(sin(x2) %求导运算 ans = 2*cos(x2)*x dx xd 2 sin 例10.计算二重不定积分 syms x y F=int(int(x*exp(
11、-x*y),x),y) F = 1/y*exp(-x*y) 例11.求级数的和 键入: 1/12+1/22+1/32+1/42 + syms k symsum(1/k2,1,Inf) %k值为1到无穷大 ans = 1/6*pi2 其结果为: 1/12+1/22+1/32+1/42 + =2/6 syms a t x; f=a,t3;t*cos(x), log(x); df=diff(f) dfdt2=diff(f,t,2) dfdxdt=diff(diff(f,x),t) df = 0, 0 -t*sin(x), 1/x dfdt2 = 0, 6*t 0, 0 dfdxdt = 0, 0 -
12、sin(x), 0 例12.计算微分 4.符号代数方程求解 matlab符号运算能够解一般的线性方程、 非线性方程及一般的代数方程、代数方程 组。当方程组不存在符号解时,又无其他 自由参数,则给出数值解。 命令格式: solve(f) 求一个方程的解 Solve(f1,f2, fn) 求n个方程的解 例13. f = ax2+bx+c 求解 f=a*x2+b*x+c; solve(f) 对缺省变量x求解 ans = 1/2/a*(-b+(b2-4*a*c)(1/2) 1/2/a*(-b-(b2-4*a*c)(1/2) 计算 机 格式 a acbb 2 4 2 一般格式 例14. 解方程组 x+
13、y+z=1 x-y+z=2 2x-y-z=1 g1=x+y+z=1,g2=x- y+z=2,g3=2*x-y-z=1 f=solve(g1,g2,g3) f=solve(x+y+z=1,x-y+z=2,2*x- y-z=1) f = x: 1x1 sym y: 1x1 sym z: 1x1 sym x,y,z=solve(x+y+z=1,x-y+z=2,2*x- y-z=1) disp(f.x), disp(f.y),disp(f.z) x = 2/3 y =-1/2 z =5/6 5. 符号微分方程求解 用一个函数可以方便地得到微 分方程的符号解 符号微分方程求解指令:dsolve 命令格式
14、:dsolve(f,g) f 微分方程,可多至12个微分方程的求 解;g为初始条件 默认自变量为 x,可任意指定自变量t, u等 微分方程的各阶导数项以大写字母D表示 例15. y=dsolve(D2y+2*Dy+2*y=0,y(0)=1,D y(0)=0) ans = exp(-x)*cos(x)+exp(-x)*sin(x) ezplot(y) 方程解y(t)的时间曲线图 2 2 dx yd +2 dy dx 02y 00 )( dx dy ,1)0(y求该方程的解 -6-4-2024 0 50 100 150 200 250 t exp(-t) sin(t)+exp(-t) cos(t)