370 likes | 662 Views
数学实验. 三 符号运算. Matlab 符号运算介绍. Matlab 符号运算是通过 符号数学工具箱 ( Symbolic Math Toolbox) 来实现的。 Matlab 符号数学工具箱是建立在功能强大的 Maple 软件的基础上的,当 Matlab 进行符号运算时,它就请求 Maple 软件去计算并将结果返回给 Matlab。.
E N D
数学实验 三 符号运算
Matlab 符号运算介绍 • Matlab 符号运算是通过符号数学工具箱(Symbolic Math Toolbox)来实现的。Matlab 符号数学工具箱是建立在功能强大的 Maple 软件的基础上的,当 Matlab 进行符号运算时,它就请求 Maple 软件去计算并将结果返回给 Matlab。 • Matlab 的符号数学工具箱可以完成几乎所有得符号运算功能。主要包括:符号表达式的运算,符号表达式的复合、化简,符号矩阵的运算,符号微积分、符号作图,符号代数方程求解,符号微分方程求解等。此外,该工具箱还支持可变精度运算,即支持以指定的精度返回结果。
Matlab 符号运算举例 • 求一元二次方程 ax2 + bx + c = 0的根 >>solve('a*x^2+b*x+c') • 求的根 f (x) = (cosx)2的一次导数 >>x=sym('x'); >>diff(cos(x)^2) • 计算 f (x) = x2在区间 [a, b]上的定积分 >>syms a b x; >>int(x^2,a,b)
符号对象与符号表达式 • 在进行符号运算时,必须先定义基本的符号对象,可以是符号常量、符号变量、符号表达式等。符号对象是一种数据结构。 • 含有符号对象的表达式称为符号表达式,Matlab 在内部把符号表达式表示成字符串,以与数字变量或运算相区别。 • 符号矩阵/数组:元素为符号表达式的矩阵/数组。
符号变量=sym(A) 参数 A可以是一个数或数值矩阵,也可以是字符串 例: >>a=sym('a') a是符号变量 b是符号常量 c是符号矩阵 符号对象的建立 • 符号对象的建立:sym和 syms • sym函数用来建立单个符号量,一般调用格式为: >>b=sym(1/3) >>c=sym('[1 ab; c d]')
例: >>syms a b c 符号对象的建立 • 符号对象的建立:sym和 syms • syms命令用来建立多个符号量,一般调用格式为: syms 符号变量1 符号变量2 ... 符号变量n >>a=sym('a'); >>b=sym('b'); >>c=sym('c');
符号表达式的建立 • 符号表达式的建立: 建立符号表达式通常有以下2种方法: (1) 用 sym函数直接建立符号表达式。(2) 使用已经定义的符号变量组成符号表达式。 例: >>y=sym('sin(x)+cos(x)') >> x=sym('x'); >>y=sin(x)+cos(x)
符号方程的建立 • equ=sym(‘equaion’) 符号方程的建立只有一种 eq1=sym(‘5*x=6+a’) eq1= 5*x=6+a
符号矩阵的创建 • 1. 利用 sym 直接创建。 • 2. 利用 syms 间接创建。 • 3. 由数值矩阵转化为符号矩阵。 例: M=[1 2;3 4]; S=sym(M) S= [1 ,2] [3 ,4]
1. 基本运算符 • 2. 关系运算符 • 3. 三角函数、双曲函数以及它们的反函数 • 4. 指数、对数函数 • 5. 复数函数 • 6. 矩阵代数指令 以上运算与数值运算相同。
有理数运算: 方法一: format long %指定输出格式 1/2+1/3 %一般的浮点运算 sym(1/2+1/3) %有理数运算(符号运算) 结果如下: ans= 0.83333333333333 ans= 5/6
有理数运算: 方法二 format rat 1/2+1/3 ans= 5/6
符号运算是最快的运算,需要的计算机内存最小,但结果并不精确。符号运算是最快的运算,需要的计算机内存最小,但结果并不精确。 而符号运算中的有理数算术运算,它所需要的时间和内存开销都是最大的。只要有足够的内存和足够长的计算时间,总能产生精确的结果。
digits(d) • 调用该函数后的近似解的精度变成d 为有效数字。d的默认值是32位。 • vpa(A,d) • 求符号解A的近似值,该近似解的有效位数由参数d来指定。如果不指定d,则按照一个digits(d)指令设置的有效位数输出。 • double(A) • 把符号矩阵或任意精度表示的矩阵A转换成为双精度矩阵。
问: 请给出sin(pi/8)保留6位有效数字的结果。 a=sin(pi/8); b=sym(a); vpa(b,6)
符号表达式的化简 • 1. collect() 函数实现功能为将符号表达式中同类项合并 R=collect(s ,v) 将表达式S 中v 的相同次幂的项进行合并。如果 v 没有指定,则缺省地将含有x 的相同次幂的项进行合并。
例子 • syms x f=(x-1)*(x-2)*(x-3) collect(f) 结果为: ans= -6+x^3-6*x^2+11*x
2. expand() 函数实现功能为将表达式进行展开。 R=expand(S): 将表达式S 中的各项进行展开,如果S 包含函数,则利用恒等变形将它写成相应的和的形式。该函数多用于多项式,有时也用于三角函数、指数函数和对数函数。
例子 • 多项式的展开示例: • syms x y; • f= (x+y)^3; • f1=expand(f) 得到结果: f1= x^3+3*x^2*y+3*x*y^2+y^3
例子 • 三角函数的展开示例 • h=cos(x-y) • expand(h) 得到结果: ans= cos(x)*cos(y)+sin(x)*sin(y)
3. factor() 函数实现将符号多项式进行因式分解。 factor(X): 如果X是一个多项式或多项式矩阵,系数是有理数,那么该函数将把X 表示成系数为有理数的低阶多项式相乘的形式;如果X不能分解成有理多项式乘积的形式,则返回X本身。
例子 • syms x y a b • factor(x^3-y^3) 得到结果: ans= (x-y)*(x^2+x*y+y^2)
4.simple() 寻找一个符号表达式的最简形式。 r=simple(S):用几种不同的算术简化规则对符号表达式进行简化,返回使表达式S 变得简短的形式。如果S 是符号表达式矩阵,则返回使整个矩阵变成最短的形式,而不一定使每一项都最短。
例子 • syms x • sinple(cos(x)^2+sin(x)^2) 输出的结果: ans= 1
符号表达式的替换 • 用给定的数据替换符号表达式中的指定的符号变量 subs(f,x,a) 用 a替换字符函数f中的字符变量 xa是可以是 数/数值变量/表达式 或 字符变量/表达式 若 x是一个由多个字符变量组成的数组或矩阵, 则 a应该具有与 x相同的形状的数组或矩阵。
下面的命令运行结果会是什么? >>subs(f3,[x,y],[x+y,x+y]) subs 举例 • 例:指出下面各条语句的输出结果 f=2*u >>f=sym('2*u'); >>subs(f,'u',2) >>f2=subs(f,'u','u+2') >>a=3; >>subs(f2,'u',a+2) >>subs(f2,'u','a+2') >>syms x y >>f3=subs(f,'u',x+y) >>subs(f3,[x,y],[1,2]) ans=4 f2=2*(u+2) ans=14 ans=2*((a+2)+2) f3=2*x+2*y ans=6
求极限 命令 极限
例:求极限 求极限 • 例:求极限 • 例:求极限 • 例:求极限 • 例:求极限 • 例:求极限 解:syms x y=1/(x*(log(x))^2)-1/(x-1)^2 limit(y,x,1,’right’) >> ans= 1/12
求导数与微分 • 对符号函数求导数 命令1:diff(f) 求 f 的一阶导数,其中 f 是符号函数。 命令2:diff(f, n) 求 f 的 n 阶导数,其中 f 是符号函数。
参数方程求导 参数方程: 所确定的函数 y 的一阶导数为: 可用连续用两次 diff(x)求出结果。
的一阶导数。 参数方程求导 • 例:求参数方程 解: syms t x=t*(1-sin(t)); y=t*cos(t); dx=diff(x,t) ; dy=diff(y,t); pretty(dy/dx)
多元函数求导 • 命令1:diff(f,x) 求函数 f 对变量 x 的一阶导数,其中 f 是符号函数。 • 命令2:diff(f,x,n) 求函数 f 对变量 x 的 n 阶导数,其中 f 是符号函数。
多元函数求导 求 • 例:对函数 解:syms x y; z=x^3*y^2+sin(x*y); dzx=diff(z, x); dzxy=diff(dzx, y); pretty(dzxy)
y=y(x) • 方程 确定的函数 确定的函数 • 方程 隐函数求导