Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 matlab符号运算 5.1 符号运算简介 5.2 符号表达式的化简与替换 5.3 符号微积分 5.4 符号线性代数

Similar presentations


Presentation on theme: "第5章 matlab符号运算 5.1 符号运算简介 5.2 符号表达式的化简与替换 5.3 符号微积分 5.4 符号线性代数"— Presentation transcript:

1 第5章 matlab符号运算 5.1 符号运算简介 5.2 符号表达式的化简与替换 5.3 符号微积分 5.4 符号线性代数
5.1 符号运算简介 5.2 符号表达式的化简与替换 5.3 符号微积分 5.4 符号线性代数 5.5 符号方程的求解

2 5.1 符号运算简介 5.1.1 符号变量、表达式的生成 1.sym函数 sym函数可以用于生成单个的符号变量。该函数的调用格式为: s=sym(A) 如果参数A为字符串,则返回的结果为一个符号变量或者一个符号数值;如果A是一个数字或矩阵,则返回结果为该参数的符号表示。 x=sym('x')

3 2.syms函数 函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为: syms 符号变量名1符号变量名2…符号变量名n 不要在变量名上加字符串分界符(‘),变量分隔用空格而不要用逗号分隔。 注意: (1)  syms一次可以定义多个符号变量; (2)  syms命令sym函数的缩写形式;syms x y real 等价于x=sym(‘x’,‘real’);y=sym(‘y’,‘real’); (3)  MatLab提倡使用syms命令,因为书写更方便、清楚。

4 【例5-1】以下是sym命令与syms命令的区别。
>> y=sym a >> y=sym b >> y=a*b >> f=y^3-y^2-y f = a^3*b^3 - a^2*b^2 - a*b (2)  syms命令。 >> syms a b >> y=a*b >> f=y^3-y^2-y

5 3.建立符号表达式 含有符号对象的表达式称为符号表达式。建立符号表达式有以下2种方法。 1) 用sym函数建立符号表达式 【例5-2】用sym建立符号表达式和。 (1)  。 第一步:在matlab命令窗口中输入如下命令。 y=sym('a*x^2+b*x') %括号的内容必须是字符串 第二步:按“enter”键,得到的结果如下。 y =a*x^2 + b*x

6 (2)   第一步:在matlab命令窗口中输入如下命令。 y=sym('exp(x+3)-sqrt(x)') 第二步:按“enter”键,得到的结果如下。 y =exp(x + 3) - x^(1/2)

7 【例5-3】建立表达式y=sin(xy)。 方法一: syms x y y=sym(sin(x*y)) y = sin(x*y) 方法二: y=sin(x*y)

8 4.符号矩阵 符号矩阵也是一种符号表达式。符号表达式运算都可以在矩阵意义下进行。 符号矩阵的创建方法: >> syms a b c d >> A=[a b;c d] >> B=[a c;b d]; >> A*B ans = [ a^2+b^2, a*c+b*d] [ a*c+b*d, c^2+d^2]

9 MATLAB还有一些专用于符号矩阵的函数,这些函数作用于单个的数据无意义。例如
transpose(A):返回A矩阵的转置矩阵 det (A):返回A矩阵的行列式值 其实,许多应用于数值矩阵的函数,如diag、triu、tril、inv、rank、eig等,也可直接应用于符号矩阵。

10 【例5-4】求矩阵转置矩阵和行列式值。 解: 第一步:在matlab命令窗口中输入如下命令。 >> A=[ ;9 3 5;-4 2 8] >> t=transpose(A) >> d=det(A) 第二步:按“enter”键,得到的结果如下。 t= d =

11 findsym函数和subs函数 1.findsym函数 MATLAB中的符号可以表示符号变量和符号常量。findsym可以帮助用户查找一个符号表达式中的的符号变量(自变量)。该函数的调用格式为: findsym(s,n)

12 findsym函数通常由系统自动调用,在进行符号运算时,系统调用该函数确定表达式中的符号变量,执行相应的操作。函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。优先选择靠近x的小写字母和x后面的字母。

13 【例5-5】求符号变量。 >> syms x y z >> f=z^x+x^y+y^z >> findsym(f,1) ans = X >> findsym(f,2) x,y >> findsym(f) x,y,z

14 2.subs函数 subs是单词substitution的缩写,意思就是“替代”。函数subs可以用指定符号替换表达式中的某一个特定符号。该函数的调用格式为: R=subs(S) 对于S中出现的全部符号变量,如果在调用函数或工作区间中存在相应值,则将值代入,如果没有相应值,则对应的变量保持不变; R=subs(S,new)

15    用新的符号变量替换S中的默认变量,即有findsym函数返回的变量;
R=subs(S,old,new) 用新的符号变量替换S中的变量,被替换的变量由old指定,如果new是数字形式的符号,则数值代替原来的符号计算表达式的值,所得结果仍是字符串形式;如果new是矩阵,则将S中的所有old替换为new,并将S中的常数项扩充为与new维数相同的常数矩阵。

16 【例5-6】 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms a b c x >> f=a*x^2+b*x+c >> y=subs(f,2) >> z=subs(f,a,3) >> s=subs(f,[a,b,c],[3,4,5])

17 第二步:按“enter”键,得到的结果如下。
y = 4*a + 2*b + c z = 3*x^2 + b*x + c s = 3*x^2 + 4*x + 5

18 符号和数值之间的转化 在符号变量生成一节中已经介绍了sym函数,该函数用于生成符号变量,也可以将数值转化为符号变量。格式为: s=sym(A,flag)

19 转化的方式由参数“flag”确定,它也可以为’r’、’f’、’e’、’d’,默认的为’r’。’r’代表有理数格式,’f’代表浮点数格式,’e’代表有理误差格式,’d’代表十进制格式。
sym的另一个重要作用是将数值矩阵转化为符号矩阵,而eval可以将符号表达式变换成数值表达式。

20 【例5-7】 解: >> y=sqrt(3) (1) 浮点格式。 >> sym(y,'f') ans = /

21 (2) 有理格式。 >> sym(y,'r') ans = 3^(1/2) (3) 有理误差格式。 >> sym(y,'e') 3^(1/2) - (268*eps)/593

22 (4) 十进制格式。 >> sym(y,'d') ans =

23 任意精度的计算 符号计算的一个非常显著的特点是:在计算过程中不会出现舍入误差,从而可以得到任意精度的数值解。如果希望计算结果精确,可以用符号计算来获得足够高的计算精度。符号计算相对于数值计算而言,需要更多的计算时间和存储空间。 MATLAB工具箱中有3种不同类型的算术运算: 数值型:MATLAB的浮点数运算; 有理数类型:Maple的精确符号运算; VPA类型:Maple的任意精度算术运算。

24 在3种运算中,浮点运算速度最快,所需的内存空间小,但是其结果精确度最低。双精度数据的输出位数由format命令控制,但是在内部运算时采用的是计算机硬件所提供的八位浮点运算。而且,在浮点运算的每一步,都存在一个舍入误差,如上面的运算中存在三步舍入误差:计算1/3的舍入误差,计算1/2+1/3的舍入误差,以及将最后结果转化为十进制输出时的舍入误差。 符号运算中的有理数运算,其时间复杂度和空间复杂度都是最大的,但是,只要时间和空间允许,都能够得到任意精度的结果。 可变精度的运算运算速度和精确度均位于上面两种运算之间。其具体精度由参数指定,参数越大,精确度越高,运行越慢。

25 创建符号方程 1.创建抽象方程 MATLAB中可以创建抽象方程,即只有方程符号,没有具体表达式的方程。若要创建方程,并计算其一阶微分的方法如下。 >> f=sym('f(x)'); >> syms x h; >> df = (subs(f,x,x+h)-f)/h df = (f(x+h)-f(x))/h 抽象方程在积分变换中有着很多的应用。

26 2.创建符号方程 创建符号方程的方法有两种:利用符号表达式创建和创建M文件。 利用符号表达式创建的步骤就是,先创建符号变量,通过符号变量的运算生成符号函数直接生成符号表达式。而利用M文件创建符号方程的步骤就是先利用 M 文件创建的函数,可以接受任何符号变量作为输入,作为生成函数的自变量。

27 5.2 符号表达式的化简与替换 符号表达式的化简 MATLAB中可以实现符号表达式化简的函数有collect、expand、horner、factor、simplify、simple。 1.collect 该函数用于合并同类项,具体调用格式为: R=collect(S) 合并同类项。其中S可以是数组,数组的每个元素为符号表达式。该命令将S中的每个元素进行合并同类项。 R=collect(S,v) 对指定的变量v进行合并,如果不指定,则默认为对x进行合并,或者由findsym函数返回的结果进行合并。

28 【例5-8】对函数进行合并。 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms x y >> z=collect(x^2*y+x*y^2-2*x-3*y) 第二步:按“enter”键,得到的结果如下。 z =y*x^2 + (y^2 - 2)*x - 3*y

29 2.expand expand函数用于符号表达式的展开。其操作对象可以是多种类型,如多项式、三角函数、指数函数等。用户可以利用expand函数对任意的符号表达式进行展开。

30 【例5-9】展开表达式。 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms x >> y=exp(x+1) >> expand(y) 第二步:按“enter”键,得到的结果如下。 ans = exp(1)*exp(x)

31 3.horner horner函数将函数转化为嵌套格式。嵌套格式在多项式求值中可以降低计的时间复杂度。该函数的调用格式为: R=horner(P) 其中P为由符号表达式组成的矩阵,该命令将P中的所有元素转化为相应的嵌套形式。

32 【例5-10】对进行化解。 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms x >> y=horner(x^3-6*x^2-11*x-6) 第二步:按“enter”键,得到的结果如下。 y =x*(x*(x - 6) - 11) - 6

33 4.factor和simplify factor函数实现因式分解功能,如果输入的参数为正整数,则返回此数的素数因数。 函数simplify(s):应用函数规则对s进行化简。表达式中可以包含和式、方根、分数乘方、指数函数、对数函数、三角函数、bessel函数、超越函数等。

34 【例5-11】对表达式进行因式分解。 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms x >>factor(x^3-x^2-10*x-8) 第二步:按“enter”键,得到的结果如下。 ans = (x - 4)*(x + 2)*(x + 1)

35 【例5-12】对表达式进行因式分解。 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms s >> y=s^2+4*s+4 >> simplify(y) 第二步:按“enter”键,得到的结果如下。 ans =(s + 2)^2

36 5.simple 该函数同样实现表达式的化简,并且该函数可以自动选择化简所选择的方法,最后返回表达式的最简单的形式。函数的化简方法包括:simplify、combine(trig)、radsimp、convert(exp)、collect、factor、expand 等。该函数的调用格式为: r=simple(S) 该命令尝试多种化简方法,显示全部化简结果,并且返回最简单的结果;如果S为矩阵,则返回使矩阵最简单的结果,但是对于每个元素而言,则并不一定是最简单的。 [r,how]=simple(S) 该命令在返回化简结果的同时返回化简所使用的方法。

37 符号表达式的替换 在MATLAB中,可以通过符号替换使表达式的形式简化。符号工具箱中提供了两个函数用于表达式的替换:subexpr和subs。subs在前面的章节已经介绍过了,这里不再具体讲解。下面只介绍一下subexpr。 subexpr函数自动将表达式中重复出现的字符串用变量替换,该函数的调用格式为: [Y,SIGMA]=subexpr(X,SIGMA)

38 指定用符号变量SIGMA来代替符号表达式(可以是矩阵)中重复出现的字符串。替换后的结果由Y返回,被替换的字符串由SIGMA返回;
[Y,SIGMA]=subexpr(X,'SIGMA') 该命令与上面的命令不同之处在于第二个参数为字符串,该命令用来替换表达式中重复出现的字符串。

39 5.3 符号微积分 符号表达式求极限 极限是微积分的基础,微分和积分都是“无穷逼近”时的结果。在MATLAB中函数limit用于求表达式的极限。该函数的调用格式为: (1)  limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,f(x)函数的极限值。 (2)  limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a。

40 (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的极限值。‘left’表示变量x从左边趋近于a。

41 【例5-13】求的极限。 解: 第一步:在matlab命令窗口中输入如下命令。 >> syms x y f1=sin(x)/x; f2=sin(x+2*y); f=limit(f1) g=limit(f2,y,0) 第二步:按“enter”键,得到的结果如下。 f =1 g =sin(x)

42 【例5-14】求下列极限。 解: (1) 第一步:在命令窗口输入如下程序。 >> sym x >> y=(1-cos(x))/x^2 >> f=limit(y) 第二步:按“enter”键,得到的结果如下。 f=1/2

43 (2) 第一步:求当x趋于时y函数的极限。 >> sym x >> y=(exp(x)-exp(-x))/(exp(x)+exp(-x)) >> f1=limit(y,x,Inf) 结果为: f1=1 第二步:求当x趋于时y函数的极限。 >> f2=limit(y,x,-Inf) f2 =-1 因为f1不等于f2所以极限不存在。

44 符号微分 MATLAB中函数diff实现函数求导和求微分,可以实现一元函数求导和多元函数求偏导。该函数在前面的MATLAB的数学功能一章已有介绍,用于计算向量或矩阵的差分。当输入参数为符号表达式时,该函数实现符号微分,其调用格式为: diff(S)

45 实现表达式S的求导,没有指定变量和微分阶数,则系统按findsym函数指示的默认变量对符号表达式S求一阶微分;
diff(S,'v') 实现表达式对指定变量v的求导,以v为自变量,求一阶微分,该语句还可以写为diff(S,sym('v')); diff(S,n)

46 按findsym函数指示的默认变量求S的n阶微分,n为正整数。
diff(S,'v',n) 求S对v的n阶导,该表达式还可以写为diff(S,n,'v')。 上述为利用diff函数计算符号函数的微分,另外,微积分中一个非常的重要概念为Jacobian矩阵,计算函数向量的微分。在MATLAB中,函数jacobian用于计算Jacobian矩阵。该函数的调用格式为: R=jacobian(f,v)

47 如果f是函数向量,v为自变量向量,则计算f的Jacobian矩阵;如果f是标量,则计算f的梯度;如果v也是标量,则其结果与diff函数相同。

48 【例5-15】求下列函数的微分。 (1)  y=sin x; (2)  y=arctan (ax); (3)  y=log10求二阶导, 在matlab中以10为底的对数需要用log10函数,以2为底的对数需要用log2函数,log是e为底的对数。

49 解: (1) 第一步:在命令窗口输入如下程序。 >> sym x >> y=sin x >> f=diff(y) 第二步:按“enter”键,得到的结果如下。 f=cos(x)

50 (2) 第一步:在命令窗口输入如下程序。 >> syms a x >> y=atan(a*x) >> f=diff(y) 第二步:按“enter”键,得到的结果如下。 f=a/(a^2*x^2 + 1) 注意:arctan(x)在matlab中输入形式为atan(x)。

51 (3) 第一步:在命令窗口输入如下程序。 >> sym x >> y=log10(x^2) >> f=diff(y,x,2) 第二步:按“enter”键,得到的结果如下。 f=-2/(x^2*log(10)) 注意:在matlab中以10为底的对数写为log10,以2为底的对数写为log2,而log则是默认是以e为底的对数函数。

52 5.3.3 符号积分 与微分对应的是积分,在MATLAB中,函数int用于实现符号微分运算。该函数的调用格式为: R=int(S) 求表达式S的不定积分,未指定积分变量和阶数,按findsym函数指示的默认变量对被积函数或符号表达式求不定积分,也就是说,自变量由findsym函数确定; R=int(S,v)

53 以v为自变量,对被积函数或符号表达式s求不定积分;
R=int(S,a,b) 求表达式S在区间上的定积分,自变量由findsym函数确定; R=int(S,v,a,b) 求表达式S在区间上的定积分运算,自变量为v。a和b分别表示定积分的下限和上限。求被积函数在区间[a,b]上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。当a和b中有一个是inf时,函数返回一个广义积分;当a和b中有一个符号表达式时,函数返回一个符号函数。

54

55 (1) 第一步:在命令窗口输入如下程序。 >> sym x >> y=(x^4+1)/(x^2+1) >> f=int(y) 第二步:按“enter”键,得到的结果如下。 f=2*atan(x) - x + x^3/3

56 (2) 第一步:在命令窗口输入如下程序。 >> sym x >> y=1/(1+x+x^2) >> f=int(y) 第二步:按“enter”键,得到的结果如下。 f=(2*3^(1/2)*atan((2*3^(1/2)*x)/3 + 3^(1/2)/3))/3

57 (3) 第一步:在命令窗口输入如下程序。 >> syms a x >> y=a*x^3 >> f=int(y,0,2) 第二步:按“enter”键,得到的结果如下。 f=4*a

58 (4) 第一步:在命令窗口输入如下程序。 >> syms x >> y=sqrt(x+1)/(sqrt(x+1)+sqrt(3-x)) >> f=int(y,x,0,2) 第二步:按“enter”键,得到的结果如下。 y =(x + 1)^(1/2)/((x + 1)^(1/2) + (3 - x)^(1/2))

59 级数求和 symsum函数用于级数的求和。该函数的调用格式为: r=symsum(s) 自变量为findsym函数所确定的符号变量,设其为k,则该表达式计算 s从0到k-1的和; r=symsum(s,v) 计算表达式s从0到v-1的和;

60 r=symsum(s,a,b) 计算自变量从a到b之间s的和; r=symsum(s,v,a,b) 计算v从a到b之间的s的和。其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。a和b是求和的开始项和末项。

61 【例5-17】求级数前6项的部分和s。 解: 第一步:在命令窗口输入如下程序。 >> syms x >> s=symsum(1/(1+x^2),1,6) 第二步:按“enter”键,得到的结果如下。 s =75581/81770

62 MATLAB提供了taylor函数将函数展开为幂级数,所以函数 taylor 可以用于实现 Taylor级数的计算。该函数的调用格式为:
r=taylor(f) 计算表达式f的Taylor级数,自变量由findsym函数确定,计算f的在0的6阶Taylor级数;

63 r=taylor(f,n,v) 指定自变量v和阶数n; r=taylor(f,n,v,a) 指定自变量v、结束n,计算f在a的级数。 该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。

64 【例5-18】求函数的泰勒级数展开式。 (1) 求y=sin(sinx)的三阶泰勒级数展开式。 (2) 求y=tan(x)的2阶泰勒级数展开式。

65 (1) 第一步:在命令窗口输入如下程序。 >> syms x >> y=sin(sin(x)) >> f=taylor(y,x,4) 第二步:按“enter”键,得到的结果如下。 f=x - x^3/3

66 (2) 第一步:在命令窗口输入如下程序。 >> syms x >> y=tan(x) >> f=taylor(y,x,3) 第二步:按“enter”键,得到的结果如下。 f=x

67 5.4 符号线性代数 5.4.1 基本符号运算 在Matlab数学运算中,基本符号运算符包括+、-、*、.*、\、.\、/、^、.^。
5.4 符号线性代数 5.4.1 基本符号运算 在Matlab数学运算中,基本符号运算符包括+、-、*、.*、\、.\、/、^、.^。 (1) 加减运算。 A+B,A-B。如果A、B为同类型的矩阵时,A+B,A-B分别对对应分量进行加减。 (2)  A*B符号矩阵乘法。 A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩阵B的行数,否则该函数返回错误信息。 (3)  A.*B符号数组的乘法。 A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列,或至少有一个为标量。

68 (4)  A\B矩阵的左除法。 X=A\B为符号线性方程组A*X=B的解。我们指出的是,A\B近似地等于inv(A)*B。若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。 (5)  A.\B数组的左除法。 A.\B为按对应的分量进行相除。若A与B为同型阵列时。若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 (6)  B/A矩阵的右除法。 X=B/A为符号线性方程组X*A=B的解。需要指出的是,B/A粗略地等于B*inv(A)。若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。

69 (7)  A./B数组的右除法。 A./B为按对应的分量进行相除。若A与B为同型阵列时。若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。 (8)  A^B矩阵的方幂。 计算矩阵A的整数B次方幂。若A为标量而B为方阵,A^B用方阵B的特征值与特征向量计算数值。若A与B同时为矩阵,则返回一错误信息。 (9)  A.^B数组的方幂。 A.^B为按A与B对应的分量进行方幂计算。若A与B为同型阵列时,A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。

70 矩阵的特征值分解 在MATLAB中,矩阵的特征值和特征向量由函数eig计算。该函数的主要用法为: E=eig(A) 计算符号矩阵A的符号特征值,返回结果为一个向量,向量的元素为矩阵A的特征值; [V,E]=eig(A) 计算符号矩阵A的符号特征值和符号特征向量,返回结果为两个矩阵:V和E,V是矩阵A的特征向量组成的矩阵,E为A的特征值组成的对角矩阵,得到的结果满足。

71 【例5-19】求矩阵的特征值。 解: 第一步:在命令窗口输入如下程序。 >> A=[2 -1 5;3 0 1;6 7 3] >> e=eig(A) 第二步:按“enter”键,得到的结果如下。 e = 9.1708 i i

72 Jordon 标准型 当利用相似变换将矩阵对角化时会产生Jordon标准型。对于给定的矩阵,如果存在非奇异矩阵,使得矩阵最接近对角形,则矩阵称为的Jordon标准型。MATLAB中函数jordan用于计算矩阵的Jordon标准型。该函数的调用格式如下: J=jordan(A) 计算矩阵的 Jordon 标准型; [V,J]=jordan(A) 返回矩阵的 Jordon 标准型,同时返回相应的变换矩阵。

73 【例5-20】将矩阵化为Jordon标准型。 第一步:在命令窗口输入如下程序。 >> A=[2 -1 5;3 0 1;6 7 3] >> J = jordan(A) 第二步:按“enter”键,得到的结果如下。 J = i i

74 5.4.4 奇异值分解 奇异值分解是矩阵分析中的一个重要内容,在理论分析和实践计算中都有着广泛的应用。在MATLAB中,完全的奇异值分解只对可变精度的矩阵可行。进行奇异值分解的函数为svd,该函数的调用格式为: sigma = svd(A),计算矩阵的奇异值; sigma = svd(vpa(A)),采用可变精度计算矩阵的奇异值; [U,S,V] = svd(A),矩阵奇异值分解,返回矩阵的奇异向量矩阵和奇异值所构成的对角矩阵。 [U,S,V] = svd(vpa(A)),采用可变精度计算对矩阵进行奇异值分解。

75 【例5-21】计算矩阵的奇异值。 解: 第一步:在命令窗口输入如下程序。 >> A=[10 1 9;3 7 1;5 -3 6] >> sigma = svd(A) 第二步:按“enter”键,得到的结果如下。 sigma = 7.8148 0.3319

76 5.5 符号方程的求解 代数方程的求解 代数方程包括线性方程、非线性方程和超越方程等。在 MATLAB 中函数 solve 用于求解代数方程和方程组,其调用格式如下: g=solve(eq) 求解方程eq的解,对默认自变量求解,输入的参数 eq 可以是符号表达式或字符串; g=solve(eq,var) 求解方程eq的解,对指定自变量求解;

77 在上面的语句中,如果输入的表达式中不包含等号,则 MATLAB 求解其等于 0 时的解。例如,g=solve(sym('x^2-1'))的结果与g=solve(sym('x^2-1=0'))相同。
对于单个方程的情况,返回结果为一个符号表达式,或是一个符号表达式组成的数组;对于方程组的情况,返回结果为一个结构体,结构体的元素为每个变量对应的表达式,各个变量按照字母顺序排列。

78 【例5-22】求解方程。 解: 第一步:在命令窗口输入如下程序。 >> syms x >> g=solve('x^3-8*x^2+17*x-10') 第二步:按“enter”键,得到的结果如下。 g=1、2、5(3个解)

79 5.5.2 求解代数方程组 代数方程组同样由函数 solve 函数进行,其格式为: g=solve(eq1,eq2,...,eqn) 求由方程eq1、eq2、…、eqn等组成的系统,自变量为默认自变量; g=solve(eq1,eq2,...,eqn,var1,var2,...,varn) 求由方程eq1、eq2、…、eqn 等组成的系统,自变量为指定的自变量:var1、var2、…、varn。

80

81 解: 第一步:在命令窗口输入如下程序。 >> syms x1 x2 x3 x4 >> L1=x1-2*x2+3*x3-4*x4-4; >> L2=x2-x3+x4+3; >> L3=-x1-x2+2*x4+4; >> [x1,x2,x3,x4]=solve(L1,L2,L3,x1,x2,x3,x4) 第二步:按“enter”键,得到的结果如下。 x1 =- z - 20; x2 =z + 6; x3 =z; x4 =-9

82 5.5.3 微分方程的求解 MATLAB中微分方程的求解通过函数dsolve进行,该函数用于求解常微分方程。 dsolve函数该函数的具体调用格式为 r = dsolve(‘eq1,eq2,...’, ‘cond1,cond2,...’, ‘v’) r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v') 其中,eq1、eq2等表示待求解的方程,默认的自变量为x。方程中用D表示微分,如Dy表示;如果在D后面带有数字,则表示多阶导数,如D2y表示。cond1、cond2等

83 表示初始值,通常表示为y(a)=b或者Dy(a)=b。如果不指定初始值,或者初始值方程的个数少于因变量的个数,则最后得到的结果中会包含常数项,表示为C1、C2等。dsolve函数最多接受12个输入参数。

84 【例5-24】求 解: 第一步:在命令窗口输入如下程序。 >> syms x y >> r=dsolve('D2y+y=0','x') 第二步:按“enter”键,得到的结果如下。 r =C2*cos(x) + C3*sin(x)

85 5.5.4 微分方程组的求解 求解微分方程组通过 dsolve 进行,格式为: r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')。 该语句求解由参数eq1、eq2等指定的方程组成的系统,初值条件为cond1、cond2等,v为自变量。

86 【例5-25】求微分方程组的解。 (1) (2)

87 解: (1) 第一步:在命令窗口输入如下程序。 >> syms x y z >> f=dsolve('Dy-z','Dz-y','x') 第二步:按“enter”键,得到的结果如下。 f = y: [1x1 sym] z: [1x1 sym]

88 (2) 第一步:在命令窗口输入如下程序。 >> syms x y t >> f=dsolve('D2x=y','D2y=x','t') 第二步:按“enter”键,得到的结果如下。 f = x: [1x1 sym] y: [1x1 sym]

89 复合方程 复合方程通过函数 compose 进行,该函数的调用格式为: compose(f,g) 返回函数f(g(y)),其中f=f(x),g=g(y),x是f的默认自变量,y是g的默认自变量; compose(f,g,z)

90 返回函数f(g(z)),自变量为z; compose(f,g,x,z) 返回函数f(g(z)),指定f的自变量为x; compose(f,g,x,y,z) 返回函数f(g(z)),f和g的自变量分别指定为x和y。

91 反方程 反方程通过函数finverse求得,该函数的调用格式为: g=finverse(f) 在函数f的反函数存在的情况下,返回函数f的反函数,自变量为默认自变量; g=finverse(f,v) 在函数f的反函数存在的情况下,返回函数f的反函数,自变量为v。

92 5.5 符号方程的求解 5.6.1 傅里叶(Fourier)变换及其逆变换 傅里叶变换由函数fourier实现,该函数的调用格式为:
5.5 符号方程的求解 傅里叶(Fourier)变换及其逆变换 傅里叶变换由函数fourier实现,该函数的调用格式为: F=fourier(f),实现函数f的傅里叶变换,如果f的默认自变量为x,则返回f的傅里叶变换结果,默认自变量为w;如果f的默认自变量为w,则返回结果的默认自变量为t; F=fourier(f,v),返回结果为v的函数; F=fourier(f,u,v),f的自变量为u,返回结果为v的函数。 傅里叶逆变换

93 傅里叶逆变换由函数ifourier实现,该函数的调用格式为:
f=ifourier(F),实现函数F的傅里叶逆变换,如果F的默认自变量为w,则返回结果f的默认自变量为x,如果F的自变量为x,则返回结果f的自变量为t; f=ifourier(F,u),实现函数F的傅里叶逆变换,返回结果f为u的函数; f=ifourier(F,v,u),实现函数F的傅里叶逆变换,F的自变量为v,返回结果f为u的函数。

94 【例5-26】已知某函数的fourier变换为,求该函数f(t)。
解: 第一步:在命令窗口输入如下程序。 >> syms t >> F=sin()/ >> f = ifourier(F,,t) 第二步:按“enter”键,得到的结果如下。 f=fourier(sin()/, , t)/(2*pi)

95 【例5-27】求一下函数的傅里叶逆变换。 (1) =costsint (2)

96 解: (1) 第一步:在命令窗口输入如下程序。 >> syms t >> f=cos(t)*sin(t) >> F=fourier(f) 第二步:按“enter”键,得到的结果如下。 F=fourier(cos(t)*sin(t), t, -)

97 (2) 第一步:在命令窗口输入如下程序。 >> syms t >> f=(sin(t))^3 >> F=fourier(f) 第二步:按“enter”键,得到的结果如下。 F =fourier(sin(t)^3, t, -w)

98 5.6.2 符号拉普拉斯(Laplace)变换及其逆变换
laplace(F),实现函数F的拉普拉斯变换,如果F的默认自变量为t,返回结果的默认自变量为s;如果F的默认自变量为s,则返回结果为t的函数; laplace(F,t),返回函数的自变量为t; laplace(F,w,z),指定F的自变量为w,返回结果为z的函数;

99 拉普拉斯逆变换由函数ilaplace实现,该函数的调用格式为:
F=ilaplace(L),实现函数L的拉普拉斯逆变换,如果L的自变量为s,则返回结果为t的函数;如果L的自变量为t,则返回结果为x的函数; F=ilaplace(L,y),返回结果为y的函数; F=ilaplace(L,y,x),指定L的自变量为y,返回结果为x的函数。

100

101 (1) 第一步:在命令窗口输入如下程序。 >> syms t s >> y=sin(t/2) >> f=laplace(y,t,s) %返回结果为s的函数 第二步:按“enter”键,得到的结果如下。 f=1/(2*(s^2 + 1/4))

102 (2) 第一步:在命令窗口输入如下程序。 >> syms t s >> y=t^2 >> f=laplace(y,t,s) 第二步:按“enter”键,得到的结果如下。 f=2/s^3

103 (3) 第一步:在命令窗口输入如下程序。 >> syms t s >> y=cos(t)*sin(t) >> f=laplace(y,t,s) 第二步:按“enter”键,得到的结果如下。 f= - ((s - i)*i)/(2*((s - i)^2 + 1)) + ((s + i)*i)/(2*((s + i)^2 + 1))

104 【例5-29】求的原函数f(t). 解: 第一步:在命令窗口输入如下程序。 >> syms s t y=(s+2)/(s^2+4*s+3) f=ilaplace(y,s,t) 第二步:按“enter”键,得到的结果如下。 f=1/(2*exp(t)) + 1/(2*exp(3*t))

105 符号Z变换及其逆变换 Z变换由函数ztrans完成,该函数的用法为: F=ztrans(f),如果f的默认自变量为n,则返回结果为z的函数;如果f为函数z的函数,则返回结果为w的函数; F=ztrans(f,w),返回结果为w的函数; F=ztrans(f,k,w),f的自变量为k,返回结果为w的函数。 Z逆变换由函数iztrans完成,其调用格式为: f=iztrans(F),若F的默认自变量为z,则返回结果为n的函数;如果F是n的函数,则返回结果为k的函数; f=iztrans(F,k),指定返回结果为k的函数; f=iztrans(F,w,k),指定F的自变量为w,返回结果为k的函数。

106 【例5-30】求下列函数的Z变换。 (1) (2)  f=tan(x+2) 解: (1) 第一步:在命令窗口输入如下程序。 >> syms n >> f=n^2 >> F=ztrans(f) 第二步:按“enter”键,得到的结果如下。 F=(z^2 + z)/(z - 1)^3

107 (2) 第一步:在命令窗口输入如下程序。 >>syms n >>f=tan(x+2) >>F=ztrans(f) 第二步:按“enter”键,得到的结果如下。 F =z^2*ztrans(tan(x), x, z) - z*tan(1)

108 【例5-31】求的Z反变换。 解: 第一步:在命令窗口输入如下程序。 >> syms x z >> F=2*z/(z-2)^2 >> f=iztrans(F,z,x) 第二步:按“enter”键,得到的结果如下。 f=2^x*(x - 1) + 2^x


Download ppt "第5章 matlab符号运算 5.1 符号运算简介 5.2 符号表达式的化简与替换 5.3 符号微积分 5.4 符号线性代数"

Similar presentations


Ads by Google