《matlab符号函数》由会员分享,可在线阅读,更多相关《matlab符号函数(28页珍藏版)》请在金锄头文库上搜索。
1、 MATLAB中的符号运算建立符号变量和符号常量MATLAB提供了两个建立符号对象的函数:sym, syms (1) sym函数sym函数用来建立单个符号变量,一般调用格式为:符号变量名=sym(符号字符串)该函数可以建立一个符号变量,符号字符串可以是常量、变量、函数或表达式。应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。(2) syms函数函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:syms 符号变量名1 符号变量名2 符号变量名n用这种格式定义符号变量时
2、不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔。符号函数中只有一个符号变量时,默认其为自变量。例1. 定义两个符号变量x,y,并绘制函数y=exp(-x2)的图形。 syms x y y=exp(-x2)y =exp(-x2) ezplot(y,-2.5,2.5)ezplot(f,a,b) :二维曲线的绘制命令。可用来画出函数f在区间a,b上的图形。画出椭圆 的图形,图形区域 。ezplot(x2/3+y2/4-1,-5,5,-8,8) 例2.符号变量与数值变量的区别符号运算和数值运算的主要区别之一,是在参与运算时, 符号运算可以在没有提前赋值的情况下合法地出现在表达式中 ,而
3、数值变量在参与运算时,必须提前赋值。此外,符号 运算可获得任意精度的解,但同时也需要耗费较多的资源。例3. 比较一个符号变量和一个数值变量占用空间的不同。 clear syms A x=pi; whos Name Size Bytes ClassA 1x1 126 sym objectx 1x1 8 double array例4. 转换数值变量为符号变量 A=1/3,1/4;1/5,1/7; %定义一个表示二阶矩阵的数值变量 B=sym(A) % 使用函数转换B = 1/3, 1/4 1/5, 1/7将数值变量转换为符号变量的常用方法是使用函数sym(A)将符号变量转换为数值变量的方法是使用函
4、数double()或numeric().例5. 定义一个分数为符号数,并将符号数转换为数值数。 clear x=sym(1/3); double(x)ans =0.3333符号表达式的创建含有符号对象的表达式称为符号表达式。建立符 号表达式有以下方法:例如: f=sym(a*x2+b*x+c)f=sym(表达式)syms 符号变量1 符号变量2 f=表达式 f=sym(1/sin(x); finverse(f)ans =asin(1/x)例6:求f=1/sin(x)的反函数.或: syms x; f=1/sin(x); finverse(f)ans =asin(1/x)例7:符号多项式运算 s
5、yms x f=2*x2+3*x-5;g=x2+x-7; h1 = f+g,h2 = expand(f*g) h1 =3*x2+4*x-12h2 =2*x4+5*x3-16*x2-26*x+35 factor(h2)ans =(x-1)*(2*x+5)*(x2+x-7) h2=f*gh2 =(2*x2+3*x-5)*(x2+x-7)在符号变量表达式中,通常默认x为自由变量,如果符 号表达式中不出现x,则以最靠近x的字母为自由变量。用函 数findsym()可以确定表达式中的自由变量。findsym(表达 式)可得出表达式中所有的符号变量, findsym(表达式,n) 可以得到表达式中最靠近x
6、的n个变量。例8:定义一个符号表达式,并从中确定符号变量。 clear syms a b c x f1=a*x2+b*x+c; findsym(f1)ans =a, b, c, x findsym(f1,1)ans =x findsym(f1,2)ans =x,c符号表达式中变量替换要将符号表达式中的某一个变量转换为一个数或者另 一个变量时,可用函数subs: subs(A, old, new) 用new置换符号表达式A中的old 得到新的符号表达式。例9. 求符号多项式的值。 syms a x f=a*x2+3*x+4; f1=subs(f,a,2)f1 =2*x2+3*x+4 subs(f
7、1,x,5)ans =69 a=2;x=5;eval(f)ans =69命令eval可计算符号表达式的值将符号矩阵转化为数值矩阵 调用格式:double(A) numeric(A)例10. A=sym(1/3,2/5;10/7,2/5)A = 1/3, 2/5 10/7, 2/5 numeric(A)ans =0.3333 0.40001.4286 0.4000复杂表达式的化简 syms x y z a b c f=(x+y)*(a+bc)z/(x+a)2f =(x+y)*(a+bc)z/(a+x)2 pretty(f) 5、 化简: simplify(P) 其它常用命令:1、降幂排列:col
8、lect(P,x);2、 展开:expand(P);3、重叠: horner(P);4、 因式分解: factor(P);微积分基本运算limit(f,x,a) 求f表达式在x-a时的极限limit(f,x,a,right(left) 求单侧极限diff(f) 对缺省变量求微分diff(f,v) 对指定变量v求微分int(f) 对f表达式的缺省变量求积分int(f,v) 对f表达式的v变量求积分int(f,v,a,b) 对f表达式的v变量在(a,b)区间求定积分quad(f,v,a,b) 对f表达式的v变量在(a,b)区间求数值积分1、 极限运算(limit命令)格式: limit(fx, v
9、, a) 求函数fx当自变量va时的极限。例11、设设,求当时时函数的极限。 syms x %声明符号变量 fx= 1/(1+exp(-1/x); %建立符号函数fx limit(fx,x,1) %求fx : x-1的极限 limit(fx,x,0, right) %求fx : x-0的右极限 limit(fx,x,0, left) %求fx : x-0的左极限 limit(fx,x,inf) %求fx : x-的极限 例12 、 求极限 syms x h %声明符号变量 fx= (sin(x+h)-sin(x)/h limit(fx,h,0) %求fx : h-0的极限.syms x; li
10、mit(x-2)/(x2-4),2)ans=1/4ans=cosx2 、求导运算(diff命令)格式:求函数fx关于自变量v的n阶导数。N缺省时,为一阶导数diff(fx, v,n)例13、设设,求f (x).3 、积分运算(int命令)格式:求函数fx当自变量从a到b的积分。int(fx, v, a, b)例15、求 syms x y z %声明符号变量,注意变量间必须用空格分开f1=x*y/(1+x2) ;f2=x+y+z; %建立符号函数int(f1) %对f1关于变量x(默认)求不定积分int(f1,0, t ) %对f1关于变量x(默认)在0,t上求定积分, 例16、计算 f = 1
11、/(5+4cos(x) 关于x的导数syms x f=1/(5+4*cos(x) ezplot(f) f1=diff(f,x,1) ezplot(f1) int(f1)例17、 计算不定积分syms x int(exp(a*x)*sin(b*x) g=simplify(ans) g =exp(a*x)*(-b*cos(b*x)+a*sin(b*x)/(a2+b2) diff(g) f=simplify(ans) f =exp(a*x)*sin(b*x)例18、绘函数 (a = 1, b = 3 )在0,3.2上的图形. 并计算 .syms a b x f=exp(a*x)*sin(b*x) f
12、1=subs(f,a,1),f1=subs(f1,b,3) ezplot(f1,0,3.22) F1=simplify(int(f1,1,2) double( F1 ) ans =-3.18064、 级数求和(symsum命令)格式:对数列Sn关于自变量v自a至b求和。symsum(Sn, v, a, b) syms a k symsum(1/k,1,inf) %求级数 symsum(1/(k*(k+1),1,inf) %求级数 symsum(a*1/3k,k,0,inf) %求级数syms k n S=symsum(k,k,1,n);S1=simple(S) S=symsum(k2,k,1,
13、n);S2=simple(S)S1 =1/2*n*(n+1)S2 =1/6*n*(n+1)*(2*n+1)5、 泰勒展开(taylor命令)格式: taylor(fx, v, n, v0)求fx关于自变量v在v0处泰勒展开前n项。syms x fy=1/(1+x+x2) f=taylor(fy) % 求fx对自变量x(默认)在x=0点(默认)泰 % 勒展开前6项(默认) f=taylor(fy,8,1) % 求fx对自变量x(默认)在x=1点泰勒% 展开式前8项展开为7次麦克劳林多项式.?将函数syms x a b c %声明符号变量,注意变量间必须用空格分开fx=a*x2+b*x+c %建立符号函数 solve(fx) %求方程fx=0的符号解 ans = 1/2/a*(-b+(b2-4*a*c)(1/2) solve(fx, b ) %求方程fx=0关于变量b的符号解 ans = -(a*x2+c)/x 6、 方程求根(solve命令)7、解微分方程 dsolve(eq,cond) 求方程组组满满足条件