MATLAB 符号运算
- 格式:doc
- 大小:160.50 KB
- 文档页数:15
3.1 算术符号操作命令+、-、*、.*、\、.\、/、./、^、.^、’、.’功能符号矩阵的算术操作用法如下:A+B、A-B 符号阵列的加法与减法。
若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。
A*B 符号矩阵乘法。
A*B为线性代数中定义的矩阵乘法。
按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。
即:若A n*k*B k*m=(a ij)n*k.*(b ij)k*m=C n*m=(c ij)n*m,则,i=1,2,…,n;j=1,2,…,m。
或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信息。
A.*B 符号数组的乘法。
A.*B为按参量A与B对应的分量进行相乘。
A与B必须为同型阵列,或至少有一个为标量。
即:A n*m.*B n*m=(a ij)n*m.*(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij* b ij,i=1,2,…,n;j=1,2,…,m。
A\B 矩阵的左除法。
X=A\B为符号线性方程组A*X=B的解。
我们指出的是,A\B近似地等于inv(A)*B。
若X不存在或者不唯一,则产生一警告信息。
矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。
A.\B 数组的左除法。
A.\B为按对应的分量进行相除。
若A与B为同型阵列时,A n*m.\B n*m=(a ij)n*m.\(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij\ b ij,i=1,2,…,n;j=1,2,…,m。
若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。
A/B 矩阵的右除法。
X=B/A为符号线性方程组X*A=B的解。
我们指出的是,B/A粗略地等于B*inv(A)。
若X不存在或者不唯一,则产生一警告信息。
MATLAB符号运算前⾔有时候,你可能会遇到较复杂的⽅程(组),希望⽤MATLAB来求解。
MATLAB的符号运算正好可⽤于求解⽅程(组)。
此外,它还有许多其他功能。
例如,展开和简化、因式分解以及微积分运算等。
MATLAB的符号运算虽然是数值运算的补充,但是它仍然是科学计算研究中不可替代的重要内容。
与数值运算相⽐,符号运算不需要预先对变量赋值,其运算结果以标准的符号形式表达。
⽐如说计算sin(π),数值运算的结果是1.2246e-16,符号运算的结果是0。
前者是近似的,后者是精确的。
正⽂MATLAB符号运算功能⾮常强⼤,本⽂只介绍⼤部分常⽤的符号运算功能。
注:本⽂代码的运⾏环境是MATLAB R2016b。
1. 创建符号数、符号变量和符号矩阵这⼀步骤是符号运算的第⼀步,后⾯的步骤都是在此基础上进⾏的。
%创建符号数 (只能⽤sym函数)s0 = 1 / sym(7) %符号数,不适合⼤型符号数s1 = sym('1/7') %符号数s2 = sym('3 + 4i') %符号复数%创建符号变量 (sym函数和syms函数都⾏)%--sym函数s3 = sym('x') %符号变量%--syms函数syms a b c %创建多个符号变量,值为本⾝syms(sym('[d e; e d]')) %⽤已存在的符号变量矩阵创建多个符号变量%创建符号矩阵 (sym函数和syms函数都⾏)s4 = sym('[2 5 6; 9 8 6]') %符号数矩阵s5 = sym('x', [2 3]) %符号变量矩阵,矩阵内的元素不会被创建为符号变量A = [a b c; c b a] %⽤已存在的符号变量创建符号变量矩阵% syms A B [2 3] %仅2017及以上版本⽀持,同时创建多个符号矩阵代码运⾏结果如下。
可以看到s5是⼀个2x3的符号变量矩阵,但矩阵内元素不会被创建成符号变量。
3.1 算术符号操作命令+、-、*、.*、\、.\、/、./、^、.^、’、.’功能符号矩阵的算术操作用法如下:A+B、A-B 符号阵列的加法与减法。
若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。
A*B 符号矩阵乘法。
A*B为线性代数中定义的矩阵乘法。
按乘法定义要求必须有矩阵A的列数等于矩阵B的行数。
即:若A n*k*B k*m=(a ij)n*k.*(b ij)k*m=C n*m=(c ij)n*m,则,i=1,2,…,n;j=1,2,…,m。
或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信息。
A.*B 符号数组的乘法。
A.*B为按参量A与B对应的分量进行相乘。
A与B必须为同型阵列,或至少有一个为标量。
即:A n*m.*B n*m=(a ij)n*m.*(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij* b ij,i=1,2,…,n;j=1,2,…,m。
A\B 矩阵的左除法。
X=A\B为符号线性方程组A*X=B的解。
我们指出的是,A\B近似地等于inv(A)*B。
若X不存在或者不唯一,则产生一警告信息。
矩阵A可以是矩形矩阵(即非正方形矩阵),但此时要求方程组必须是相容的。
A.\B 数组的左除法。
A.\B为按对应的分量进行相除。
若A与B为同型阵列时,A n*m.\B n*m=(a ij)n*m.\(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij\ b ij,i=1,2,…,n;j=1,2,…,m。
若若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行操作。
A/B 矩阵的右除法。
X=B/A为符号线性方程组X*A=B的解。
我们指出的是,B/A粗略地等于B*inv(A)。
若X不存在或者不唯一,则产生一警告信息。
第2章符号运算- Presentation Transcript1.第二章符号运算o MA TLAB 的数学计算=数值计算+符号计算o其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。
2. 1. 符号变量、符号表达式和符号方程的生成o使用sym 函数定义符号变量和符号表达式o使用syms 函数定义符号变量和符号表达式3. 2 、用syms 创建符号变量o使用syms 命令创建符号变量和符号表达式o语法:o syms(‘arg1’, ‘arg2’, …, 参数) % 把字符变量定义为o% 符号变量o syms arg1 arg2 …, 参数% 把字符变量定义为符号变量的简洁形o% 式o说明: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▪>>ex02015.符号方程的生成▪>> % 符号方程的生成▪>> % 使用sym 函数生成符号方程▪>> equation1='sin(x)+cos(x)=1'▪equation1 =▪sin(x)+cos(x)=1▪>>6. 2.2 符号形式与数值形式的转换o 1 、将符号形式转换为数值形式:o eval 与numerico例:a1='2*sqrt(5)+pi'o a1 =o2*sqrt(5)+pio b2=numeric(a2) % 转换为数值变量o b2 =o7.6137o b3=eval(a1)o b3 =o7.61377. 2.2 符号形式与数值形式的转换▪ 2 、数值形式转换为符号形式▪p=3.1416;▪q=sym(p)▪执行后屏幕显示:▪q=3927/1250▪numeric(q)▪屏幕显示:▪ans =▪ 3.14168. 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 符号形式与数值形式的转换o 3 、多项式与系数向量之间的转换o 3.2 poly2sym: 将向量转化为对应的多项式o例o a=[1 0 -4 5];o poly2sym(a)o执行后屏幕显示o ans=o x^3-4*x+510. 3. 符号表达式( 符号函数) 的操作o(1) 符号表达式的四则运算o syms xo f=x^3-6*x^2+11*x-6;o g=(x-1)*(x-2)*(x-3);o h=x*(x*(x-6)+11)-6;o f+g-ho执行后输出:o ans =o 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▪sin(x)+cos(y)+a+b▪>>fun1*fun2▪ans =▪(sin(x)+cos(y))*(a+b)12.o(1) 将表达式中的括号进行展开: expando(2) 将表达式进行因式分解:factoro(3) 将一般的表达式变换为嵌套的形式:hornero(4) 将表达式按某一个变量的幂进行集项:collecto(5) 化简表达式:simplifyo(6) 化简表达式,使之成为书写长度最短的形式:simple13.o同一个数学函数的符号表达式的可以表示成三种形式,例如以下的f(x) 就可以分别表示为:o多项式形式的表达方式:o f(x)=x^3+6x^2+11x-6o因式形式的表达方式(factor) :o f(x)=(x-1)(x-2)(x-3)o嵌套形式的表达方式(horner) :o f(x)=x(x(x-6)+11)-614.集项-合并符号表达式的同类项o>> syms x y▪>> collect(x^2*y + y*x - x^2 - 2*x)▪ans =▪(y-1)*x^2+(y-2)*xo>> syms x y▪>> collect(x^2*y + y*x - x^2 - 2*x,y)▪ans =▪(x^2+x)*y-x^2-2*x15.符号多项式的嵌套(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)*x16.符号表达式的化简(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 ex020418. 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 函数的极限、导数与积分o(1 )函数极限-limit 函数的使用o(2 )函数求导-diff 函数的使用o(3 )符号积分-int 函数的使用21.o符号极限(limit)假定符号表达式的极限存在,Symbolic Math Toolbox 提供了直接求表达式极限的函数limit ,函数limit 的基本用法如下表所示。
MATLAB符号计算MATLAB是一种强大的数值计算和科学计算工具,不仅可以进行数值计算,还可以进行符号计算。
符号计算是一种基于数学符号的计算方法,它可以处理复杂的代数表达式、方程、微分、积分等数学问题。
MATLAB 中的符号计算将这些问题转化为代数表达式,然后通过符号工具箱进行求解。
使用MATLAB进行符号计算需要用到符号工具箱。
可以通过输入`syms`命令来定义符号变量,例如`syms x`可以定义符号变量x。
在定义完符号变量之后,就可以使用这些变量进行符号计算了。
1.代数表达式的化简符号计算可以对代数表达式进行化简。
MATLAB提供了许多函数可以实现化简操作,如`simplify`、`collect`、`expand`等函数。
其中`simplify`函数可以将符号表达式化简为最简形式;`collect`函数可以将符号表达式按照指定的变量进行整理;`expand`函数可以将符号表达式展开为多项式形式。
例如,对于表达式`(x+1)^2`,可以使用`simplify`函数进行化简:```matlabsyms xexpr = (x + 1)^2;result = simplify(expr);```2.解方程符号计算可以解析地求解方程。
MATLAB提供了`solve`函数用于解方程。
`solve`函数可以通过指定的变量来解析地求解方程,并获得方程的解。
例如,对于方程`x^2 - 1 = 0`,可以使用`solve`函数求解:```matlabsyms xeqn = x^2 - 1;sol = solve(eqn, x);````sol`将得到方程的解,即`x = -1`和`x = 1`。
3.求导和积分符号计算可以对函数进行求导和积分。
MATLAB提供了`diff`函数用于求导,提供了`int`函数用于积分。
这些函数可以对符号表达式进行求导和积分,并获得结果。
例如,对于函数`f(x) = x^2`,可以使用`diff`函数求导:```matlabsyms xf=x^2;df = diff(f, x);```求导结果为`df = 2*x`。
1、MATLAB程序设计M文件:M文件是一种以m为扩展名的33文件,将MA TLAB命令流写入一个文本文件中,在MATLAB命令窗口中输入文件名可运行文件中的命令流。
此文件必须以m为扩展名,MATLAB系统才能识别。
MATLAB文件搜索路径为:安装目录下的work目录。
通过File|set path…菜单可以增加工作目录。
1.1 M函数(1)M函数的格式:Function 返回变量列表=函数名(输入变量列表)注释函数体语句End【例1.1.1】:打开Medit窗口,编写如下程序:function n=fibfun(m)%FIBFUN for calculating Fibonacci numbers%Incidengtally, the name Fibonacci comes from%Filius Bonassi, or”son of Bonassus”%fibfun.mif m>10n=fibfun (m-1) + fibfun (m-2);elsen=10;end编写完后以fibfun.m文件名存盘然后在MATLAB主命令窗口中执行如下程序:>> fibfun (15)ans =130>> fibfun (8)ans =10文件保存名称必须与函数名相同,这样才能保证调用成功。
m文件与m函数的主要区别在于m函数中定义的变量在函数调用完成后会清除,为局部变量,而m文件中定义的变量在MA TLAB运行期内始终存在。
一般以m文件作为主程序,在主程序中将一些功能模块以m函数的形式进行调用。
【例1.1.2】:M函数文件Function [y1 y2]=proab(a,b)Y1=a^3;Y2=b^3;End文件保存为proab.mM文件a=2;b=3;[y1 y2]=proab(a,b)文件保存为test.m,proab.m及test.m都保存在work目录中。
(2)变量:区分大小写,不需要指定类型,不需要事先声明,变量长度不能超过31位,第31个字符之后的字符将被忽略。
(3)常量:MA TLAB有一些预定我的变量,这些特殊的变量称为常量。
%以后的内容起到注释的作用,对最终结果不产生任何影响(应该养注释的好习惯,方便自己和别人调用)。
;结尾不显示结果1.2向量生成(1)利用冒号表达式x=start:step:endStart表示向量的首元素数值,end表示向量尾元素的数值限,step表示从第二个元素开始,元素数值大小与前一个元素值大小的差值。
苦step=1,可以省略,直接写成X=start:end。
【例1.1.3】:>> a=1:5:30a =1 6 11 16 21 26>> a=1:6a =1 2 3 4 5 6(2)Linspace函数,用来生成线性等分向量,其调用格式如下:·y=linspace (x1,x2)生成100维的行向量,使得y(1)=x1 ,y(100)=x2 ;·y= linspace (x1,x2,n)生成n维的行向量,使得y(1)=x1 ,y(n)=x2。
【例1.1.4】:>> a=linspace (1,50,6)a =1.0000 10.8000 20.6000 30.4000 40.2000 50.0000(3)Logspace函数,对数等分功能函数,其调用格式如下:·y=logspace (x1,x2) 生成50维对数等分向量,使得y (1)= 110x ,y (50)= 210x ; ·y= logspace (x1,x2,n ) 生成n 维对数等分向量,使得y (1)= 110x ,y (n )=210x 。
【例1.1.5】:>> a=logspace (1,4,5)a =1.0e+004 *0.0010 0.0056 0.0316 0.1778 1.0000(4)点积dot(a,b) ,当a 和b 都为列向量时,等价于a ’*b 。
返回向量的数量点积。
a 和b 必须同维。
其格式如下:dot (a,b,dim) 返回a 和b 在维数为dim 的点积。
【例1.1.6】:>> a=[1,2,3]' %[1,2,3]'表示a 为列向量,即我们熟悉的 T ]3,2,1[a =123>> b=[4,5,6]'b =456>> dot (a,b)ans =32>> a'*bans =32(5)叉积cross(a,b),表示过两相交向量的交点的垂直于两向量所在平面的向量。
其格式为: c= cross (a,b) 返回向量a 和b 的叉积向量。
即c=a ×b 。
a 和b 必须为三维向量。
【例1.1.7】:>> a=[1,2,3];>> b=[4,5,6];>> c=cross(a,b)c =-3 6 -31.3矩阵输入矩阵时,要以“[]”为标识,元素应在“[]”内部,MA TLAB才会将其识别为矩职。
同行元素之间可用空格或“,”分隔,行与行之间要用“;”或回车符分隔。
(1)零矩阵zeros(m,n),建立一个m*n阶零矩阵。
【例1.1.8】:>> zeros(5,6)ans =0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0(2)单位阵eye(n),建立一个n阶单位阵【例1.1.9】:>> eye(3)ans =1 0 00 1 00 0 1(3)全1阵ones(m,n),建立一个m*n阶全1阵【例1.1.10】:>> ones(3,4)ans =1 1 1 11 1 1 11 1 1 1(4)随机阵rand(m,n),随机建立一个m*n阶矩阵【例1.1.11】:>> rand(3,4)ans =0.8147 0.9134 0.2785 0.96490.9058 0.6324 0.5469 0.15760.1270 0.0975 0.9575 0.9706(5)行列式det(A)(6)求逆inv(A),求A矩阵的逆矩阵【例1.1.12】:>> A=rand(3,3) %随机生成一个矩阵AA =0.9572 0.1419 0.79220.4854 0.4218 0.95950.8003 0.9157 0.6557>> det(A) %求上面生成随机阵的行列式ans =-0.4278>> inv(A) %求上面生成的矩阵A 的逆矩阵ans =1.4075 -1.4784 0.4628-1.0510 0.0148 1.2480-0.2500 1.7836 -0.7827(7)特征值eig,eigs【例1.1.13】:计算下面矩阵的特征值和特片向量。
⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=451973152A 解:>> A=[2,5,1;3,7,9;1,5,4];>> [x,y]=eig(A) %x 是特征向量矩阵,y 是特征值矩阵x =-0.3852 -0.9555 0.6691-0.8012 0.0433 -0.6236-0.4580 0.2919 0.4044y =13.5875 0 00 1.4680 00 0 -2.0555(8)条件数cond ,比如求特征值的条件数,我们用condeig (A )【例1.1.14】:>> condeig(A) %A 还是例13中的矩阵Aans =1.04221.24421.2211(9)范数norm ,它的调用格式是norm (A ,n ),A 为矩阵(向量),n 可以为1(1范数)、2(2范数)、inf 或fro 。
(10)秩rank ,求矩阵的秩【例1.1.15】:%仍然取例13中的矩阵A>> rank(A)ans =3(11)迹trace ,调用格式为trace (A ),A 为要求迹的矩阵(12)奇异值分解svd ,调用格式为[x ,y ]=svd (A )【例1.1.16】:>> [x,y]=svd(A)x =-0.3277 0.8842 -0.3329-0.8284 -0.4383 -0.3486-0.4542 0.1615 0.8761y =14.1191 0 00 3.2978 00 0 0.8806(13)LU 分解lu ,调用格式为[x ,y ]=lu (A )(14)QR 分解qr ,调用格式为[x ,y ]=qr (A )(15)Chol 分解chol ,调用格式为[x ,y ]=chol (A )1.4多项式运算多项式的表示方法对于多项式()n n n n a x a x a x a x p ++++=--1110...,用以下的行向量表示:],,......,,[110n n a a a a p -=这样可以把多项式问题转化为向量问题。
(1)Polyval 和polyvalm 求值polyval 以数组为单元,polyvalm 以矩阵为单元【例1.1.17】:>> p=[1 4 9 16];>> b=[1 1 1 1];>> polyval(p,b)ans =30 30 30 30(2)Roots 求根,调用格式为roots (P )【例1.1.18】:求解方程01501522=+-x x 的根>> p=[2,-15,150];>> roots(p)ans =3.7500 + 7.8062i3.7500 - 7.8062i(3)多项式的乘除法运算conv,deconv,用向量卷积实现【例1.1.19】:>> p=[2,3,4,5];>> b=[4,6,8,10];>> a=conv(p,b)a =8 24 50 88 92 80 50>> c=deconv(a,b)c =2 3 4 5可以看出C与P是相等的。
(4)Polyder微分,调用格式是polyder(P)【例1.1.20】:还是用上例中的P>> pp =2 3 4 5>> polyder(p)ans =6 6 4(5)Polyfit多项式拟合,调用格式如下:·polyfit(x,y,n)其中x,y为拟合数据,n为拟合多项式的阶数。
·[P,k]=polyfit(x,y,n)其中p为拟合多项式系数向量,k为拟合多项式系数向量的结构信息。