1、符号计算,天 津 科 技 大 学 数 学 系 谢中华 E-mail: http:/ http:/ http:/ 编著 北京航空航天大学出版社 2010年6月,2019/10/13,我的著作,谢中华等 编著 北京航空航天大学出版社 2012年12月,2019/10/13,我的著作,刘寅立等 编著 北京航空航天大学出版社 2011年10月,什么是符号计算?,符号计算又称计算机代数,通俗地说就是用计算机推导数学公式,如对表达式进行因式分解、化简、微分、积分、解代数方程、求解常微分方程等。,【例6.0-1】求解一元二次方程 。,求根公式:,你还记得一元三次方程 的求根公式吗?,再谈一个问题,【三圆相
2、交问题】http:/ 如图所示,三个圆的圆心在同一条直线上,已知前两个圆的圆心坐标,并且三个圆的半径都为R。若图中三个圆所围成的面积为一定值S,求第三个圆的圆心坐标。,思考:求解此问题会用到哪些数学方法?,问题扩展,(1)三个圆的圆心连线不是水平直线情形;,(2)使面积S达到最大,求第三个圆的圆心坐标。,本章主要内容,符号对象和符号表达式符号运算中的转换操作符号微积分方程(组)的符号解常微分方程(组)的符号解,第一节 符号对象和符号表达式,1. sym函数,一、 符号对象的创建,调用格式:, var = sym(var) var = sym(var,set) sym(var,clear) Nu
3、m = sym(Num) Num = sym(Num,flag) A = sym(A,dim) A = sym(A,set) sym(A,clear) f(arg1,.,argN) = sym(f(arg1,.,argN), x = sym(x) % 定义复数域上的符号变量x y = sym(y,positive) % 定义正实数域上的符号变量y assumptions % 查看已定义符号变量的限定性条件 sym(y,clear) % 清除对y的限定条件 % 查询MuPAD内存中关于y的假设 evalin(symengine,getprop(y) f1 = sym(a*x2+b*x+c) %
4、定义符号表达式 solve(f1,x) % 求解一元二次方程,【例6.1-1】调用sym函数创建符号变量 和符号表达式 。, x = sym(1.2345) % 设定符号数的理论真值 y1 = sym(1.2345) y2 = sym(1.2345,r) y3 = sym(1.2345,d) y4 = sym(1.2345,e) y5 = sym(1.2345,f),【例6.1-2】调用sym函数将浮点数1.2345转为符号数。,调用格式:, syms var1 . varN syms var1 . varN set syms var1 . varN clear syms f(arg1,.,a
5、rgN),2. syms函数, syms x y real % 定义实数域上的符号变量x和y syms x y clear % 清除对x和y的限定条件,【例6.1-5】调用syms函数创建符号变量 ,然后清除假定条件 。, syms f(x) % 定义符号函数f(x) f(x) = (x-1)*(x-2)*(x-3) % 符号函数表达式 f(1.5) % 计算函数值 ezplot(f,0,4) % 绘制函数图象 syms g(x, y) % 定义符号函数 g(x, y) = x + 2*y % 符号函数表达式 g(1, 2) % 计算函数值 ezsurf(g,-3, 3, -3, 3) % 绘
6、制函数图象,【例6.1-6】调用syms函数创建符号函数,计算函数值,并绘制函数图形。,2019/10/13,二、符号表达式的基本运算,运算符,1. 四则运算及转置,运算函数, syms x a b c % 定义符号变量 f1 = x2 + 2*x + 1; % 符号表达式1 f2 = a*x2 + b*x + c % 符号表达式2 f3 = f1 + f2 % 加法 f4 = f1/f2 % 除法,【例6.1-8】符号表达式的四则运算,2. 符号表达式的因式分解、展开与合并同类项等运算,factor :因式(或因子)分解expand :对指定项展开collect :合并同类项numden :
7、提取分子和分母coeffs :获取符号多项式系数simple :简化符号表达式pretty :美化显示符号表达式(习惯方式显示), syms a b factor(a2 - b2, a3 + b3),【例6.1-10】因式分解, syms x y factor(x3-y3),对符号数12345678901234567890 进行因子分解。, factor(sym(12345678901234567890), syms a b expand(a+b)*exp(a-b)3),【例6.1-11】符号表达式展开。, syms x y expand(cos(x+y),【例6.1-12】按变量 y 合并同
8、类项。, syms x y f = (x+y)*(x2+y2+1) collect(f,y), syms x f1 = sqrt(4/x2+4/x+1); g1 = simple(f1) g2 = simple(f1,IgnoreAnalyticConstraints,1),【例6.1-13】简化如下符号表达式, f2 = cos(3*acos(x); g2 = simple(f2) p = coeffs(g2),【练习】创建符号表达式,并作运算。,将 展开,记为,对 进行因式分解,解答:, syms a b f1 = 2*a2+3*a*b+b2; f2 = a*b+cos(2*acos(a)
9、+1; f3 = f1+f2 f4 = expand(f3) f5 = factor(f4),【练习解答】创建符号表达式,并作运算。,3. 识别符号表达式中的符号变量,symvar 调用格式:, symvar expr s = symvar(expr), syms a b c x % 定义符号变量 f = a*sin(b+c*x) % 符号表达式 symvar(f) % 识别符号变量 symvar(f, 2) % 识别距离x最近的2个符号变量,【例6.1-14】识别符号表达式 中的符号变量,第三节 符号微积分,finverse函数,一、反函数, g = finverse(f,var),求函数
10、的反函数。,【例6.3-1】求函数 的反函数。, syms a x f = exp(x-2*a); g = finverse(f,x),compose函数,二、复合函数, compose(f,g,x), syms a b x f = sqrt(x+a2); g = 2*exp(-b*x); fg = compose(f,g,x),求函数 的复合函数 。,【例6.3-2】求函数 和 的复合函数。,1. limit函数,三、函数极限, limit(f,x,a),一元函数极限, limit(f,x,a,left),一元函数左极限, limit(f,x,a,right),一元函数左极限, syms x
11、 a k f1 = sin(a*x)/(a*x); f2 = (1-2/x)(k*x); L1 = limit(f1,x,0) L2 = limit(f1,x,0,left) L3 = limit(f2,x,inf),【例6.3-3】求函数极限, limit(limit(f,x,x0),y,y0),多元函数极限, syms a b c x y f = a/(1+x2+y2); L = limit(limit(f,x,b),y,c),【例6.3-4*】求函数极限,1. diff函数,四、函数的导数, diff(f,x) diff(f,x,n),一元函数导数, diff(f,x,n) diff(d
12、iff(f,x,n),y,m), -diff(f,x)/diff(f,y),隐函数求导,多元函数偏导数, syms x y dydx = diff(sin(x)2,x,2) dydx = simple(dydx) fun = cos(x+sin(y)-sin(y); df = -diff(fun,x)/diff(fun,y),【例6.3-5】求函数的导数,1. taylor函数,五、泰勒展开, taylor(f, x, x0, Order, n+1),调用格式,把 在 处作 n 阶泰勒展开。,【例6.3-6】求 在x = 0处展开的8阶Maclaurin公式。, syms x f = exp(
13、x); g = taylor(f, x, 0, Order, 9),【例6.3-7】求 的各阶Maclaurin公式,并绘图, syms x f = sin(x)/x; t5 = taylor(f) % 5阶展开 t7 = taylor(f, Order, 8) % 7阶展开 t9 = taylor(f, Order, 10) % 9阶展开 plotT5 = ezplot(t5, -4, 4); % 5阶展开的图形 hold on set(plotT5,Color,red) plotT7 = ezplot(t7, -4, 4); % 7阶展开的图形 set(plotT7,Color,magen
14、ta) plotT9 = ezplot(t9, -4, 4); % 9阶展开的图形 set(plotT9,Color,cyan),2019/10/13, plotF = ezplot(f, -4, 4); % 原函数图形 set(plotF,Color,blue,LineWidth, 2) % 添加图例 legend(approximation of sin(x)/x up to O(x6),.approximation of sin(x)/x up to O(x8),.approximation of sin(x)/x up to O(x10),.sin(x)/x,.Location, So
15、uth) % 添加标题 title(Taylor Series Expansion),2019/10/13,1. 函数图形的描绘,六、函数的极值,最值与图形,绘图函数列表,通过函数图形观察函数的单调性、凹凸性、极值与最值,并求解函数驻点、极值点与极值。,2. 驻点、极值点的求法,由 求解函数驻点,然后观察图像寻找极值点。,【例6.3-8】绘制函数 在 上的图形,并求函数的驻点、极值点和极值。, syms x f = (x2-1)3+1; ezplot(f, -1.5, 1.5); s = solve(diff(f) = 0) minf = subs(f, x, 0),1. int函数,七、符号
16、积分, F = int(f,x),不定积分, s1 = int(f, x, a, b) s2 = int(f, x, -inf, inf), v = int(int(int(f,x1,a1,b1),),xn,an,bn),多重积分,定积分与反常积分, syms x a F1 = int(1/(x*sqrt(x2+1),x) F2 = int(x*log(a*x),x),【例6.3-9】求不定积分,【例6.3-11】求定积分, syms x f =exp(-x2/2); s = int(f,x,0,1.5) sval = double(s) sval = eval(s),【例6.3-12】求反常
17、积分, syms x f =exp(-x2/2); s = int(f,x,-inf,inf),2019/10/13,第四节 方程(组)的符号解,1. solve函数,一、通用指令, Y = solve(eqn1,.,eqnN,var1,.,varN) y1,.,yN = solve(eqn1,.,eqnN,var1,.,varN),【例6.4-1】解如下方程:, X = solve(2*sin(3*x-pi/4) = 1) % 方法一 syms x X = solve(2*sin(3*x-pi/4) = 1) % 方法二 X = solve(x+x*exp(x)-10) % 方法一 syms
18、 x X = solve(x+x*exp(x)-10) % 方法二 syms x a X = solve(log(x.2-a) = 5),【例6.4-2】解方程组, x y=solve(1/x3+1/y3-28,1/x+1/y-4,x,y) % 方法一 syms x y x y=solve(1/x3+1/y3-28, 1/x+1/y-4, x,y) % 方法二,【例6.4-3】解方程组, syms x y a b x y=solve(1/x3+1/y3-a, 1/x+1/y-b, x,y) a = 28; b = 4; eval(x) eval(y),【例6.4-4*】解方程组,% 方法一(无
19、解) x y = solve(x+y-98,x(1/3)+y(1/3)-2,x,y),% 方法二(变量代换) u v = solve(u3+v3-98,u+v-2,u,v) x = u.3 y = v.3,注:有的时候直接按照给出的方程组描述待求解的方程组时,solve会给不出解,这时候对原方程组进行变形往往会有截然不同的结果。,【练习】解方程组 。,解答:, syms x y sx,sy = solve(x2+y2-4,x*y-2,x,y) % 绘图 h1 = ezplot(x2+y2-4, -3,3); set(h1,color, b); hold on; h2 = ezplot(x*y-2, -3,3); set(h2,color, r); axis equal;,【练习解答】解方程组。,