MATLAB教程第11章

更新时间:2023-09-01 10:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第11讲 符号计算

2013年10月31日

在科学研究和工程应用中,除了存在大量的数值计算外,还 有对符号对象进行的运算,即在运算时无须事先对变量赋 值,而将所得到结果以标准的符号形式来表示。MATLAB 符号计算是通过集成在MATLAB中的符号运算工具箱 (Symbolic Math Toolbox)来实现的。应用符号计算功 能,可以直接对抽象的符号对象进行各种计算,并获得问 题的解析结果。 【本章学习目标】 ● 掌握符号对象的定义方法以及符号表达式的运算法则。 ● 掌握微积分的符号计算方法。 ● 掌握级数求和的方法以及将函数展开为泰勒级数的方法。 ● 掌握代数方程和微分方程符号求解的方法。

7.1 符号对象及其运算 MATLAB为用户提供了一种符号数据类型,相应的运算对象 称为符号对象。例如,符号常量、符号变量以及有它们参 与的数学表达式等。在进行符号运算前首先要建立符号对 象。 7.1.1 建立符号对象 1.建立符号对象 (1)sym函数 sym函数用来建立单个符号量,一般调用格式为 符号量名 = sym('符号字符串') 该函数可以建立一个符号量,符号字符串可以是常量、变 量、函数或表达式。例如: a=sym('a') %建立符号变量a 符号变量参与运算前无须赋值,其结果是一个由参与运算的 变量名组成的表达式。

a=sym('a'); w=a^3+3*a+10 w= a^3 + 3*a + 10 x=5; w=x^3+3*x+10 w= 150 whos Name Size a 1x1 w 1x1 x 1x1

%定义符号变量a %符号运算

%定义数值变量x %数值运算

%查看内存变量 Bytes Class Attributes 126 sym 8 double 8 double

(2)syms函数 函数sym一次只能定义一个符号变量,使用不方便。 MATLAB提供了另一个函数syms,一次可以定义多个符 号变量。syms函数的一般调用格式为 syms符号变量名1符号变量名2…符号变量名n 用这种格式定义符号变量时不要在变量名上加字符串分界符 ('),变量间用空格而不要用逗号分隔。例如,用syms 函数定义4个符号变量a、b、c、d,命令如下: syms a b c d

2.建立符号表达式 含有符号对象的表达式称为符号表达式。建立符号表达式有以下2种方法。 (1)用sym函数建立符号表达式。例如: U=sym('3*x^2-5*y+2*x*y+6') U= 3*x^2-5*y+2*x*y+6 F=sym('cos(x^2)-sin(2*x)=0') F= cos(x^2)-sin(2*x)=0 M=sym('[a,b;c,d]') M= [ a, b] [ c, d] (2)使用已经定义的符号变量组成符号表达式。例如: syms x y; V=3*x^2-5*y+2*x*y+6 ans = 3*x^2 + 2*y*x - 5*y + 6

1.符号表达式的四则运算 符号表达式的四则运算与数值运算一样,用+、 、*、/、^ 运算符实现,其运算结果依然是一个符号表达式。例如: f= sym('2*x^2+3*x-5') %定义符号表达式 g= sym('x^2-x+7') f+g ans= 3*x^2 + 2*x + 2 f^g ans= (2*x^2 + 3*x - 5)^ (x^2 - x + 7)

2.符号表达式的提取分子和

分母运算 如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden 函数来提取符号表达式中的分子或分母。其一般调用格式为 [n,d]=numden(s) 该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。 numden函数在提取各部分之前,将符号表达式有理化后返回所得的分子 和分母。 如果符号表达式是一个符号数组,numden返回两个新数组n和d,其中n 是分子数组,d是分母数组。例如: h=sym('[3/2,(2*x+1)/3;a/x+a/y,3*x+4]') ; [n,d]=numden(h) n= [ 3, 2*x + 1] [a*x + a*y, 3*x + 4] d= [ 2, 3] [ x*y, 1]

3.符号表达式的因式分解与展开 ● factor(s):对符号表达式s分解因式。 ● expand(s):对符号表达式s进行展开。 ● collect(s):对符号表达式s合并同类项。 ● collect(s,v):对符号表达式s按变量v合并同类项。 例如: syms x y; s1=x^3-y^3; factor(s1) %对s分解因式 ans = (x - y)*(x^2 + x*y + y^2) s2=(-7*x^2-8*y^2)*(-x^2+3*y^2); expand(s2) %对s展开 ans = 7*x^4 - 13*x^2*y^2 - 24*y^4 s3=(x+y)*(x^2+y^2+1) collect(s3,y) %对s按变量x合并同类项 ans = y^3 + x*y^2 + (x^2 + 1)*y + x*(x^2 + 1) factor(sym(630)) %对符号整数分解因式 ans = 2*3^2*5*7

4.符号表达式系数的提取 c = coeffs(s [, x]) 该函数返回多项式中按指定变量升幂顺序排列的系数,若没 有指定变量,则返回所有项的常系数,且按离字符“x”近 原则确定主变量。例如: syms x y s = 5*x*y^3 + 3*x^2*y^2 + 2*y + 1; coeffs(s) %求所有项 的常系数,按x的升幂排列 [ 1, 2, 5, 3] coeffs(s,y) %求变量y的系数 [ 1, 2, 3*x^2, 5*x]

5.符号表达式的化简 MATLAB提供的对符号表达式化简的函数如下。 ● simplify(s):应用MuPAD简化规则对s进行化简。 ● simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示 化简过程。 例如: s= sym('(x^2+5*x+6)/(x+2)'); simplify(s) ans= x+3 函数simple试用几种不同的化简工具,然后选择在结果表达式中含有最 少字符的那种形式。例如 s= sym('cos(3*acos(x))'); simple(s) %自动调用多种函数对s进行化简,并显示每步结果 显示一系列化简过程后,最后显示化简结果: ans = 4*x^3 - 3*x

6.符号表达式与数值表达式之间的转换 利用函数sym可以将数值表达式变换成它的符号表达式。 函数eval可以将符号表达式变换成数值表达式。 7.符号多项式与多项式系数向量之间的转换 利用函数sym2poly可以将符号多项式转换为多项式系数向量, 而函数poly2sym可以将多项式系数向量转换为符号多项式。

7.1.3 符号表达式中变量的确定 findsym、sysvar函数可以帮助用户查找一个符号表达式中的符号变量。 该函数的调用格式为 findsym(s[,n]) symvar(s[,n]) 函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全 部符号变量

。findsym以字符串形式返回结果,symvar以向量形式返 回结果。例如: syms x a y z b; %定义5个符号变量 s1=3*x+y; s2=a*y+b; %定义2个符号表达式 findsym(s1) ans = x, y symvar(s1+s2) ans = [ a, b, x, y] 在求函数的极限、导数和积分时,如果用户没有明确指定自变量, MATLAB将按以下原则确定主变量并对其进行相应微积分运算。 ● 找寻除i、j之外,在字母顺序上最接近x的小写字符。 ● 若表达式中有两个符号变量与x的距离相等,则ASCII大者优先。

7.1.4 符号矩阵 函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。 a2 x2 【例 7.1 】 化简矩阵 a x 1 sin 2 y 15 x y ,并对其因式分解。 a b 2 2 x y 2 xy

syms a b x y m= [(a^2-x^2)/(a+x), sin(y)^2,(x-y)/(a+b);1,15,x^2+y^2-2*x*y]; simplify(m) %对符号矩阵化简处理 ans = [ a-x, 1-cos(y)^2, (x-y)/(a+b)] [ 1, 15, x^2+y^2-2*x*y] factor(m) %对符号矩阵因式分解 ans = [ a-x, sin(y)^2, (x-y)/(a+b)] [ 1, 15, (x-y)^2]

7.2 符号微积分用符号运算能获得微积分的解析解。 7.2.1 符号极限 在MATLAB中求函数极限的函数是limit,可用来求函数在指 定点的极限值和左右极限值。对于极限值为“没有定义” 的极限,MATLAB给出的结果为NaN,极限值为无穷大时, MATLAB给出的结果为inf。limit函数的调用格式如下。 ● limit(f,x,a):求符号函数f(x)的极限值,即计算当变量x趋 近于常数a时,f(x)函数的极限值。变量可以是其他的符号 变量。 ● limit(f[,a]):求当默认自变量x趋近于常数a时,符号函数 f(x)的极限值。当a默认时,求当默认自变量x趋近于0时的 极限值。 ● limit(f,x,a,'right')或limit(f,x,a,'left'):求符号函数f的极限值 或。'right'表示变量x从右边趋近于a,'left'表示变量x从左 边趋近于a。

【例 7.2 】 求下列极限。 sin( x h) sin( x) (1 ) lim h 0 h (3 ) lim x( x 1 x)2 x

t ( 2) lim(1 ) x x x( 4) lim (cot x) x 0 1 ln x

极限1: f=sym('(sin(x+h)-sin(x))/h'); limit(f,sym('h'),0) ans = cos(x) 极限2: f=sym('(1+t/x)^ x'); limit(f,inf) ans = exp(t)

极限3: f=sym('x*(sqrt(x^2+1)-x)'); limit(f,sym('x'),inf,'left') ans = 1/2 极限4: f= sym('cot(x) ^(1/log(x))'); limit(f,x,0,'right') ans = 1/exp(1)

7.2.2 符号导数 diff函数用于对符号表达式求导数,一般调用格式如下。 ● diff(s):按findsym函数指示的默认变量对符号表达式s求 一阶导数。 ● diff(s,'v'):以v为自变量,对符号表达式s求一阶导数。 ● diff(s,n):按findsym函数指示的默认变量对符号表达式s 求n阶导数,n为正整数。 ● diff(s,'v',n):以v为自变量,对符号表达式s求n阶导数。

【例 7.3 】 求下列函数的导数。

x a (t sin t ) ' ( 2) ,求 y x 。 y

b (1 cos t ) '' ' (3 ) z x 6 3 y 4 2 x 2 y 2 ,求 z x 、 z 'y 、 z xy 。(1 )y=cos x2 ,求 y'、y''、y '''。

%求(1) f1=cos(x*x); diff(f1) ans = (-2)*x*sin(x^2) diff(f1,x,2) ans = - 2*sin(x^2) - 4*x^2*cos(x^2) diff(f1,x,3) ans = 8*x^3*sin(x^2) - 12*x*cos(x^2) %求(2) f21=a*(t-sin(t)); f22=b*(1-cos(t)); diff(f22)/diff(f21) ans = -(b*sin(t))/(a*(cos(t) - 1))

%未指定求导变量和阶数,按默认规则处理

%求f1对x的二阶导数

%求f1对x的三阶导数

%求y对x的一阶导数

%求(3) f3= x^6-3*y^4+2*x^2*y^2; diff(f3,x) %求z对x的偏导数 ans = 6*x^5 + 4*x*y^2 diff(f3,y) %求z对y的偏导数 ans = 4*x^2*y - 12*y^3 diff(diff(x^6-3*y^4+2*x^2*y^2,x),y) ans = 8*x*y

本文来源:https://www.bwwdw.com/article/pqwi.html

Top