资源预览内容
第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
第9页 / 共13页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
符号运算科学计算包括数值计算和符号计算两种计算,数值计算是近似计算;而符号计算则是绝对精确的计算。符号变量的生成和使用1、符号变量、符号表达式和符号方程的生成(1 ) 、使用 sym 函数定义符号变量和符号表达式单个符号变量sqrt(2)sym(sqrt(2) %显示精确结果a=sqrt(sym(2) %显示精确结果double(a)sym(2)/sym(3) %显示精确结果2/5+1/3sym(2/5+1/3) %显示精确结果sym(2)/sym(5)+sym(1)/sym(3) %显示精确结果sym 函数定义符号表达式:单个变量定义法,整体定义法单个变量定义法a=sym(a)b=sym(b)c=sym(c)x=sym(x)f=a*x2+b*x+c整体定义法f=sym(a*x2+b*x+c)g=f2+4*f-2(2 ) 、使用 syms 函数定义符号变量和符号表达式一次可以创建任意多个符号变量 syms var1 var2 var3syms a b c xf=a*x2+b*x+cg=f2+4*f-2(3 ) 、符号方程的生成函数:数字和变量组陈的代数式方程:函数和等号组成的等式用 sym 函数生成符号方程:equation1=sym(sin(x)+cos(x)=1)2、符号变量的基本操作(1 ) 、findsym 函数用于寻找符号变量findsym(f):找出 f 表达式中的符号变量findsym(s,n):找出表达式 s 中 n 个与 x 接近的变量syms a alpha b x1 yfindsym(alpha+a+b)findsym(cos(alpha)*b*x1+14*y,2) %x1,yfindsym(y*(4+3i)+6j)findsym(cos(alpha)*b*x1+14*y,1) %x1findsym(cos(alpha)*b*x1+14*y,3) %x1,y,b(2 ) 、任意精确度的符号表达式digits 函数设定所用数值的精度digits:在 command window 显示当前设定的数值精度digits(D):设置数值的精度为 DD=digits:在 command window 中返回当前设定数值精度digitsdigits(100)D=digitsvpa 函数进行可控精度运算R=vpa(S):显示符号表达式 S 在当前精度 D 下的值,D 是使用 digits 函数设置的数值精度vpa(S,D):显示符号表达式 S 在精度 D 下的值,D 不是当前精度值,只是临时设置的r=vpa(pi)r=vpa(pi,1000)q=vpa(hilb(2)q=vpa(hilb(2),6)(3 ) 、数值型变量与符号型变量的转换形式数值型变量 t 转换成符号型变量有理数形式:sym(t)或 sym(t,r)浮点数形式:sym(t,f)指数形式:sym(t,e)指数精度形式:sym(t,d)t=0.1sym(t)sym(t,r)sym(t,f)sym(t,e)sym(t,d)可以通过 digits 函数改变精度digits(7)sym(t,d)也可以用于矩阵,但是矩阵只能转换为有理数形式A=hilb(4)A=sym(A)A=sym(A,d) %报错A=sym(A,e) %报错A=sym(A,f) %报错3、符号表达式(符号函数)的操作(1 ) 、四则运算(与通常算术式一样)syms x y a bfun1=sin(x)+cos(y)fun2=a+bfun1+fun2(2 ) 、合并同类项collect(S,v):将符号矩阵 S 中所有同类项合并,并以 v 为符号变量输出collect(S):使用 findsym 函数规定的默认变量,代替上式的 vsyms x ycollect(x2*y+y*x-x2-2*x)f=-1/4*x*exp(-2*x)+3/16*exp(-2*x)collect(f)(3 ) 、因式分解horner(P):将表达式 P 进行因式分解syms xfun1=2*x3+2*x2-32*x+40horner(fun1)fun2=x3-6*x2+11*x-6horner(fun2)(4 ) 、简化simplify(S):将表达式 S 中的每个元素都进行简化,即便使用多次 simplify 也不一定能得到最简形式syms xfun1=(1/x+7/x2+12/x+8)(1/3)sfy1=simplify(fun1)sfy2=simplify(sfy1)simplify(sin(x)2+cos(x)2)simple(S):使用多种代数方法对 S 进行简化,显其中最简单的结果R,how=simple(S):R 为最简结果, how 为简化方法的字符串s=2*cos(x)2-sin(x)2simple(s)R how=simple(s)simple(f)(5 ) 、subs 函数用于替换求值subs 函数可以将符号表达式的符号变量替换为数值变量subs(S) :将 S 中自由符号变量用调用函数中的值或是 MATLAB 工作区间值替换subs(S,new):将 S 中自由符号变量用数值型变量或表达式 new 替换subs(S,old,new):将 S 中符号变量 old 用 数值型变量或表达式 new 替换syms x yf=x2*y+5*x*sqrt(y)subs(f)subs(f,x,3)subs(f,y,3)subs(f,3) %与 subs(f,x,3)结果相同用户没指定被替换的符号变量,对单个字母的变量,MATLAB 选择在字母表中与 x 接近的字母,若有两个变量离 x 一样近,则选择字母表中靠后的那个findsym(f,1)syms s tg=s+tfindsym(g,1) %找到 tsubs(g,1) %替换为 s+1多个变量替换syms a bsubs(cos(a)+sin(b),a,b,sym(alpha),2)用矩阵替换syms t x ysubs(exp(a*t),a,-magic(2)subs(x*y,x,y,0 1;-1 -1,1 -1;-2 1)(6 ) 、反函数g=finverse(f):求函数 f 的反函数,返回 g 也是符号函数g=finverse(f,v):设定 f 的自变量是 v,当 f 包括不止一个变量时最好使用该命令syms x yf=x2+yfinverse(f,y)finverse(f) %由于没指明自变量,给出警告syms xf=x2g=finverse(f) %x2 的反函数不唯一,默认给出正值fg=simple(compose(g,f) %验证反函数正确性(7 ) 、复合函数compose(f,g):返回 f=f(x),g=g(y)的复合函数 f(g(y),x 是 findsym 定义的 f 的符号变量,y 是findsym 定义的 g 的符号变量compose(f,g,z):返回 f=f(x),g=g(y)的复合函数 f(g(z),返回函数以 z 为自变量compose(f,g,x,z):返回 f(g(z),x 为函数 f 的独立变量compose(f,g,x,y,z):返回 f(g(z),x 为函数 f 的独立变量, y 为函数 g 的独立变量syms x y z t uf=1/(1+x2)g=sin(y)h=xtp=exp(-y/u)compose(f,g)compose(f,g,t)compose(h,g,x,z)compose(h,g,t,z)compose(h,p,x,y,z)compose(h,p,t,u,z)符号矩阵的生成和运算1、符号矩阵的生成(1 ) 、使用 sym 函数直接生成符号矩阵a1=sym(1/3 2/3 5/7;9/11 11/13 13/17;17/19 19/23 23/29)a1=sym(1/3,0.2+sqrt(2),pi;2/7,sin(x),cos(x),log(x);sin(x)2,sin(22*x),exp(x) %长度不一致的行补 0(2 ) 、用生成子矩阵的方法生成符号矩阵与字符串矩阵的直接输入法类似,同一列元素长度须相同(不同补 0)a=100,cos(x);1/s,x (3 ) 、由数值矩阵转换为符号矩阵系统首先将自动在 MATLAB 工作区间将数值型变量转换为符号型变量,用户也可以用 sym函数进行转换M=30 1 1 1;6 1 5 9;9 8 25 4;32 45 62 0S=sym(M)M1=0.3 0.33 0.333 1/3;3.14 3.142 3.1416 pi;log(2) log(3) log(5) log(7);sin(1) cos(1) tan(1) atan(1)S1=sym(M1)2、符号矩阵及符号数组的运算(1 ) 、符号矩阵的四则运算A+B 和 A-B 同型矩阵可以分别对对应分量进行加减,若 A 与 B 至少有一个为标量,则把标量扩大为与另一个同型的阵列A*B 为线性代数中定义的矩阵乘法AB 实现左除, X=AB 为符号线性方程组 A*X=B 的解,AB 近似等于 inv(A)*B,X 不存在或不唯一,则产生警告,A 可以是非方阵,要求方程组必须是相容的A/B 实现右除, X=B/A 为符号线性方程组 X*A=B 的解,B/A 近似等于 B*inv(A) ,X 不存在或不唯一,则产生警告,A 可以是非方阵,要求方程组必须是相容的m=sym(x,x2,x*2,1/x)n=sym(2*x,y,x,x2)m+nm-nm*n %出错mnm/n %出错(2 ) 、符号数组的四则运算若有标量,则扩展为同型阵列.*乘法./右除.左除q=sym(3 4 9 6;x y z w;a b c d)p=sym(x 1/x x2 x3;a b c d;5 2 3 6)q.*pq./pq.pr=q*p %矩阵行列不匹配,出错(3 ) 、矩阵和数组的逆运算A实现矩阵的 Hermition 转置,若 A 为复数矩阵,则 A为共轭转置q=sym(3 4 9 6;x y z w;a b c d)q %符号变量具体值不知,只能用 conj 给出q. %普通转置(4 ) 、矩阵和数组的幂运算AB 实现矩阵幂运算,若 A 为标量 B 为方阵,AB 用方阵 B 的特征值与特征向量计算数值。若 A、B 均为矩阵,则返回错误A.B 实现数组幂运算,若 A 与 B 为同型矩阵,则按对应分量进行计算。若 A 与 B 中至少有一个为标量,则现将标量扩大为另一个同型的阵列p=sym(x 1/x x2 x3;a b c d;5 2 3 6)q=sym(3 4 9 6;x y z w;a b c d;1 3 5 7)q2p2 %p 矩阵不为方阵,报错q.2p.2(5 ) 、符号矩阵的秩rank(A):求出方阵 A 的线性不相关的独立行和列的个数rank(A,tol):求出比 tol 值大的值的个数,在上个命令中默认 tol=max(size(A)*norm(A)*epsa=sym(1 1/x x2;xin(x) cos(x) tan(x);log(x) 2 9)rank(a)(6 ) 、符号矩阵的逆和行列式运算inv(X):求方阵 X 的逆,当 X 奇异或者范数很小时,系统给出一个出错信息det(X):求方阵 X 的行列式h=sym(hilb(4)inv(h)det(h)b=sym(1 x x2;0 0 sin(x);0 0 log(x)inv(b) %b 矩阵行列式为 0,不存在逆,返回 FAILb=sym
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号