260 likes | 557 Views
一、 MATLAB 的符号功能. 二、符号微积分. 三、级数的和. 四、泰勒多项式. 五、解代数方程. 六、常 微分方程的符号解. 七、其他. 实验四 MATLAB 符号计算. —— MATLAB 不仅具有数值运算功能,还开发了在 MATLAB 环境下实现符号计算的工具包 Symbolic Math Toolbox. 一、 MATLAB 的符号功能. 什么是符号运算 . 与数值运算的区别 ※ 数值运算中必须先对变量赋值 ,然后才能参与运算。 ※ 符号运算无须事先对独立变量赋值 ,运算结果以标准的符号形式表达。. 特点 :
E N D
一、MATLAB的符号功能 二、符号微积分 三、级数的和 四、泰勒多项式 五、解代数方程 六、常微分方程的符号解 七、其他 实验四 MATLAB符号计算 —— MATLAB不仅具有数值运算功能,还开发了在MATLAB环境下实现符号计算的工具包Symbolic Math Toolbox
一、MATLAB的符号功能 • 什么是符号运算 与数值运算的区别 ※数值运算中必须先对变量赋值,然后才能参与运算。 ※符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。 特点: 运算对象可以是没赋值的符号变量 可以获得任意精度的解 2. 符号变量与符号表达式 f = ' a*(2*x-t)^3+b*sin(4*y)' f —— 符号变量名 a*(2*x-t)^3+b*sin(4*y)—— 符号表达式 ' '—— 符号标识 注:符号表达式一定要用单引号括起来MATLAB才能识别。
3.建立符号对象的函数——syms syms可以定义多个符号 syms a b c k t x y↙ f=a*(2*x-t)^3+b*sin(4*y) ↙ f= a*(2*x-t)^3+b*sin(4*y) 上面定义的符号和表达式可以进行计算 g = a*(2*x-t)^3+b*sin(4*y)+a*x^(3/2) g=f+a*(2*r-1)^3 ↙ 可以用findsym来确认符号表达式中的符号 findsym (g) ↙ ans = a, b, t, x, y
二、符号微积分 1.求极限——limit 例1求下列极限 syms x a t ; limit(sin(x)/x) ↙ ans = 1 limit((x-2)/(x^2-4),2) ↙ ans = 1/4
limit((1+2*t/x)^(3*x),x,inf) ↙ ans = exp(6*t) limit(1/x,x,0,'right') ↙ ans = inf v = [(1 + a/x)^x, exp(-x)]; limit(v,x,inf,'left') ↙ ans = [ exp(a), 0]
2.求导数——diff 例如 f='sin(a*x)' ↙ f = sin(a*x) g=diff(f) ↙ g = cos(a*x)*a h=diff(f,'a') ↙ h = cos(a*x)*x t=diff(f,'a',2) ↙ t = -sin(a*x)*x^2 当微分运算作用于符号矩阵时,是作用于矩阵的每一个元素.
3.求积分——int 例如 f='exp(-x^2)' ↙ f = exp(-x^2) g=int(f) ↙ g = 1/2*pi^(1/2)*erf(x) f='sin(a*x)';g=int(f) ↙ g =-1/a*cos(a*x) h=int(f,'a') ↙ h =-1/x*cos(a*x)
a=int(f,0,1) ↙ a = -(cos(a)-1)/a b=int(f,'a',0,1) ↙ b = -(cos(x)-1)/x c=int('exp(-x^2)',0,1) ↙ c = 1/2*erf(1)*pi^(1/2) 当积分无解析式时,可用double 计算定积分的值 double(c) ↙ ans =0.7468
三、级数的和 symsum(s,t,a,b):表达式s中的符号变量t从a到b的级数和(t缺省时,设定为x或最接近x的字母),例如: syms k n; symsum(k,0,n-1) ↙ ans = 1/2*n^2-1/2*n symsum(k,0,n) ↙ ans = 1/2*(n+1)^2-1/2*n-1/2
symsum(k^2,0,n) ↙ ans = 1/3*(n+1)^3-1/2*(n+1)^2+1/6*n+1/6 symsum(k^2,0,10) ↙ ans = 385 symsum(1/k^2,1,Inf) ↙ ans = 1/6*pi^2 symsum(k^4,0,n) ↙ ans = 1/5*(n+1)^5-1/2*(n+1)^4+1/3*(n+1)^3-1/30*n-1/30
四、泰勒多项式 taylor(f,n,a):函数f对符号变量x(或最接近字母x 的符号变量)在a点的n-1阶泰勒多项式(n缺省时设定为6,a缺省时设定为0),例如: syms x t;taylor(exp(-x)) ↙ ans = 1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5 taylor(log(x),6,1) ↙ ans = x-1-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-1)^4+1/5*(x-1)^5 taylor(sin(x),pi/2,6) ↙ ans = 1-1/2*(x-1/2*pi)^2+1/24*(x-1/2*pi)^4 taylor(x^t,3,t) ↙ ans = 1+log(x)*t+1/2*log(x)^2*t^2
五、解代数方程 解代数方程(组)的基本命令是: solve('eqn1','eqn2',...,'eqnN') solve('eqn1','eqn2',...,'eqnN','var1,var2,...,varN') solve(‘eqn1’,‘eqn2’,...,‘eqnN’,‘var1’,‘var2’,...‘varN’),例如 x为未知数,p,r为参数 solve('p*sin(x) = r') ↙ ans = asin(r/p) [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0') ↙ x = [1] [3] y = [1] [ -3/2] 以x,y为未知数的方程组
S = solve('x^2*y^2 - 2*x - 1 = 0','x^2 - y^2 - 1 = 0') ↙ S = x: [8x1 sym] y: [8x1 sym] 只给出解的结构 [u,v] = solve('a*u^2 + v^2 = 0','u - v = 1') ↙ u = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))+1] [ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))+1] v = [ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))] [ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))] u,v为未知数,a为参数
[x,y] = solve('sin(x+y)-exp(x)*y = 0','x^2-y = 2') ↙ x = -6.0173272500593065641097297117905 y = 34.208227234306296508646214438330 注:无代数解时,只能给出数值解 如果求方程的数值解,则有以下命令: roots:输入多项式的系数(按降幂排列),输出其全部根. poly:输入多项式全部根,输出其系数 fzero(fun,x0):给出函数“fun”在x0附近的根,
的全部根 例如 roots([1,-5,6]) ↙ ans = 3 2 poly([2,3]) ↙ ans = 1 -5 6 fzero('sin', 3) ↙ Zero found in the interval: [2.8303, 3.1697]. ans = 3.1416 sinx=0在3附近的解
在0附近的解 fzero('x^5+5*x+1',0) ↙ Zero found in the interval: [-0.22627, 0.16]. ans = -0.1999 roots([5,0,0,0,5,1]) ↙ ans = 0.7528 + 0.7105i 0.7528 - 0.7105i -0.6530 + 0.7130i -0.6530 - 0.7130i -0.1997
solve('x^5+5*x+1=0') ↙ ans = 1.1044655068824455162575638841973+1.0598296691525201166749456468980*i -1.0044974557968355184823910746206+1.0609465064060406435760940804509*i -.19993610217121999555034561915339 -1.0044974557968355184823910746206-1.0609465064060406435760940804509*i 1.1044655068824455162575638841973-1.0598296691525201166749456468980*i 从以上的例子可以看出用roots误差很大
表达式格式 表达式意义 dsolve(‘微分方程’) 求微分方程的通解 y=y(t), 格式1 dsolve(‘微分方程’,‘x’) 求微分方程的通解 y=y(x), 格式1 六、常微分方程的符号解 1、微分方程的通解 注:(1)t 是默认的独立变量. (2)当 y 是应变量时,用Dny 表示“y 的 n 阶导数”
例1求微分方程 的通解. 例2 格式1 y=dsolve(‘2*D2y+Dy-y=2*exp(t)’) ↙ y = (exp(t)^2+C1+C2*exp(1/2*t)*exp(t))/exp(t) 格式2 y=dsolve('2*D2y+Dy-y=2*exp(x)','x') ↙ y = (exp(x)^2+C1+C2*exp(1/2*x)*exp(x))/exp(x) y=dsolve(‘Dy+2*x *y=4*x’,’x’) ↙ y = (2*exp(x^2)+C1)/exp(x^2)
表达式格式 表达式意义 dsolve(‘微分方程’,‘定解条件’) 求微分方程满足定解条件的特解 y=y(t), dsolve(‘微分方程’ ,‘定解条件’,‘x’) 求微分方程满足定解条件的特解 y=y(x), 例3求微分方程 的通解和满足初始条件 2、使用定解条件求微分方程的特解 y=dsolve(‘D4y=y’) ↙ y = (C1*sin(t)*exp(t)+C2*cos(t)*exp(t)+C3*exp(t)^2+C4)/exp(t) y=dsolve(‘D4y=y’,’y(0)=2,Dy(0)=2,D2y(0)=1,D3y(0)=1’,’t’) ↙ y = (1/2*sin(t)*exp(t)+1/2*cos(t)*exp(t)+3/2*exp(t)^2)/exp(t)
例4求微分方程 y=dsolve(‘Dy=(y^2-2*y)/x’,’y(1)=1’,’x’) ↙ y = 2/(1+x^2) 3、解微分方程组
例5求微分方程组的通解 [x,y]=dsolve(‘Dx+Dy=-x+y+3, Dx-Dy=x+y-3’) ↙ x = cos(t)*C1+sin(t)*C2+3 y = -C1*sin(t)+C2*cos(t)
例6求微分方程组的特解 [x,y]=dsolve(‘2*Dx-4*x+Dy-y=exp(t), Dx+3*x+y=0’,’x(0)=3/2,y(0)=0’) ↙ x = 2*cos(t)-4*sin(t)-1/2*exp(t) y = 14*sin(t)+2*exp(t)-2*cos(t)
七、其他 符号工具箱还有很多用于代数式的命令,我们简单列出一部分,其应用请查看帮助系统. collect: 合并同类项. expand: 将乘积展开为和式. horner:把多项式转换为嵌套表示形式. factor:分解因式. simplify:化简代数式. simple:输出最简单的形式. subs(s,old,new):替换. 最后需要说明的是,关于数组、矩阵等的数值运算命令,也适用于符号运算 。
实验任务 1.求极限: 2.求导数: 3.求积分:
4.解方程: 5.解微分方程(组): 6.某地区现有人口200万,10年前为100万,又知平均每年净迁入人口8万,问10年来人口的平均增长率是多少?