《数学实验》第7讲
主要内容:
符号计算基础
常用符号计算函数: compose limit diff int
taylor solve dsolve
符号计算基础
• 符号计算函数可以完成准确的推导、计算 如求导、求极限。
• 一般使用规则:
计算中的符号变量需要先定义
再调用符号计算相关函数进行处理。
• 符号计算部分功能
• 复合运算、变量代换及化简
• 线性代数:行列式,特征值等
• 微积分:求导,求极限,定积分,微 分方程的求解等。
快速入门:求极限,求导数
数学问题 MATLAB程序
syms x;
r=limit(exp(-x),x,+inf)
syms x;
d=diff(x*x*exp(x),x,1)
0 lim
−=
+
→
x
x
e
x x
x
xe x e
e
x
2) 2
2( = +
定义符号变量syms
• syms命令定义符号变量,可以一次定 义多个变量
• 一般用法:
syms arg1 arg2 …
syms arg1 arg2 … real
syms arg1 arg2 … positive
• 示例1:创建符号表达式x2+y2 syms x y
f=x^2+y^2
示例2:创建符号数组f(2行2列)
syms x y
f=[x^2-2*x*y+y^2, x+y; x-y, x*y+y*y]
输出:
f =
[ x^2 - 2*x*y + y^2, x + y]
[ x - y, y^2 + x*y]
符号计算基础
定义符号变量sym
• 用于创建符号变量;也可将字符或数字转换为符号类型,sym 一次处理一个变 量或表达式。
• 基本用法:sym(A)
如果A是字符串,则产生一个符号数或变量;
如果A是数值标量或数值矩阵,则其转为符号类型。
示例: x1=sym('x1’), a=sym('sqrt(200)'), v=sym('[100 200]') 运行输出:
x1 = x1
a = 10*2^(1/2) v=[ 100, 200]
符号计算基础
定义符号变量用法比较
• syms与sym使用对比:
• 示例:使用syms定义(与下列调用sym语句效果相同)
• syms x y real
• 使用sym定义:
x = sym('x','real');
y = sym('y','real');
符号计算基础
符号表达式的替换subs
• subs函数将符号表达式中的符号变量用其他符号表达式或数 值代替,实现符号的替换。其使用格式为:
subs(s, old, new)
• 将s表达式中old变量替换为new。
old可以是单一变量,也可以是由s表达式中多个变量构成的向 量,new用来替换的符号表达式。
• 示例:
syms x y z
f=x^2+y^2+z^2
fval=subs(f,[x,y],[1,2])
运行结果:
f = x^2 + y^2 + z^2 fval = z^2 + 5
其他用法:
fval=subs(f,{'x','y'},{1,2}) fval=subs(f,{x,y},{1,2})
符号计算基础
符号表达式的化简
• simplify:对表达式进行化简
• 示例:
syms x y
s1 = simplify(cos(x)^2-sin(x)^2) s2 = simplify(x^3+3*x^2+3*x+1)
• 返回结果:
s1 = cos(2*x) s2 = (x + 1)^3
符号计算基础
符号计算精度及其数据类型转换(自看)
• digits:显示vpa计算结果的有效数字的位数
• digits(n):设置vpa计算结果的有效数字的位数
• vpa(s):计算符号表达式s的数值结果
• vpa(s,n):采用n位有效数字计算精度求s的数值结果
• double(s):将符号表达式s转化为双精度数值
• char(s):将符号表达式s转化为字符串
符号计算基础
示例:
• >> t=sqrt(sym(pi)), a=vpa(t), b=double(t), whos a b
运行结果:t = pi^(1/2)
a = 1.7724538509055160272981674833411 b = 1.7725
Name Size Bytes Class Attributes a 1x1 112 sym
b 1x1 8 double
符号计算精度及其数据类型转换
符号计算基础
常用符号计算函数:compose\limit\diff\int
复合计算函数 compose
• 主要用法:
• compose(f, g): 返回复合函数f(g(y)),其中f=f(x),g=g(y).
x和y分别为f、g中找到的符号变量.
• compose(f, g, z): 返回复合函数f(g(z)), f=f(x), g=g(y),
x,y含义同上一种用法. 最后用指定变量z代替变量y.
• compose(f, g, x, y, z): 返回复合函数f(g(z)).
将x=g(y)代入f(x)中, 最后用指定的变量z代替变量y
• 示例:
syms
x y t
f = 1/(1+x);g = sin(y)^2
h = compose(f,g,x,y,t) 运行结果:
f = 1/(x + 1) g = sin(y)^2
h = 1/(sin(t)^2 + 1)
复合计算函数 compose
常用符号计算函数:compose\limit\diff\int
计算极限函数:limit
• 函数一般使用格式:
limit(f,x,a):
计算f(x)当x趋向于a的极限 limit(f,x,a,'right’):
计算右极限
limit(f,x,a,'left’):
计算左极限
• 示例:计算数列的极限。
• 编程实现:
syms
n
an=(1+1/n)^n;
S=limit(an,n,inf) %计算数列极限
• 返回结果:
• S = exp(1)
常用符号计算函数:compose\limit\diff\int
示例:
求一元函数极限 ,并绘图观察函数在变量x趋于0时函数的变化趋势。
x x
x
) lim sin(
→0
实践题1(5min)
常用符号计算函数:compose\limit\diff\int
求导计算 diff
• 用法:
diff(s,'v') 求s对自变量v的1阶导数 diff(s,'v',n) 求s对自变量v的n阶导数
• 注:'v' 可以为符号变量
已知
f ( x , y ) = x
2y + 2 xy + y
2,求 和 .x f
y f
编写程序:
syms x y
f= x^2*y + 2*x*y + y*y d1 = diff(f,x,1)
d2 = diff(f,y,1)
运行结果:
d1 = 2*y + 2*x*y
d2 = x^2 + 2*x + 2*y
常用符号计算函数:compose\limit\diff\int
实践题2(5min)
• 求下列函数的一阶导数:
2
2
x
a y ae
x
= +
常用符号计算函数:compose\limit\diff\int
符号积分函数int
• 用法:
• s=int(expr,var):
以expr表达式中的变量var为积分变量计算不定积分
• s=int(expr,var,a,b)
以expr表达式中的变量var为积分变量计算定积分,积 分上下限分别为b和a。
⚫ 示例: 使用符号工具箱函数解下列不定积分:
x ln( x2 − dx 1 )
⚫syms x a编写程序:
f=int(x*log(x*x-1))
常用符号计算函数:compose\limit\diff\int
泰勒(taylor)多项式函数
一般用法:
• taylor(f): 计算f的5阶麦克劳林多项式
•
taylor(f,v,Name,Value)• taylor(f,v,a): 计算f在点a展开的麦克考林多项式
•
taylor(f,v,a,Name,Value):指定属性名称,属性值的调用方法f:函数的表达式或者符号变量 v:为函数的自变量
0 2
0 0 0 0
( )
0
0
( )
( ) ( ) ( )( ) ( )
2!
( )
( ) ( )
!
n
n
n
f x
f x f x f x x x x x
f x
x x R x
n
= + − + −
+ + − +
常用符号计算函数:taylor\solve\dsolve
泰勒(taylor)多项式函数
• 求ex的7阶泰勒多项式.
>>taylor(exp(x),x,0,'order',8) ans =
x^7/5040 + x^6/720 + x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
>>taylor(exp(x),x,'expansionpoint',0,'order',8) ans =
x^7/5040 + x^6/720 + x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1 说明:以上两个语句效果相同。
常用符号计算函数:taylor\solve\dsolve
求解方程(组): solve
示例:
求解含参数的方程组 ax+by=10, ax-by=20
编程实现:
s=solve('a*x+b*y=10','a*x-b*y=20','x','y') sol_x = s.x
sol_y = s.y
运行结果: s = x: [1x1 sym]
y: [1x1 sym]
常用符号计算函数:taylor\solve\dsolve
求解微分方程: dsolve
示例:求下列微分方程的特解:
要点:
1. 用字符串描述微分方程及其初始条件;
2. 导数的表示规则:以未知函数y为例,
“Dy”表示对y的1阶导数,
“D2y”表示对y的2阶导数,其他各阶导数类似.
编程实现:
y=dsolve('Dy=(10-0.02*t)*t','y(0)=4','t') 运行结果:
y = 4 - (t^2*(t - 750))/150
求得函数:4 )
0 ( , ) 02 . 0 10
( − =
= t t y
dt dy
150
) 750 4 (
2
−
−
= t t y
常用符号计算函数:taylor\solve\dsolve
实践题3 (2min)
求下列微分方程的特解
:
4 )
0 ( , ) 01 . 0 50
( − =
= y y y
dx dy
常用符号计算函数:taylor\solve\dsolve
补充部分:定义符号变量syms
• 练习:使用syms定义20个符号变量 x1,x2,…, x20.
• 常规定义形式:syms x1 x2 x3 … x20
• 编程实现:
• for
i=1:20• eval(sprintf('syms x%d',i))
• end
• whos Name Size Bytes 运行结果: Class Attributes
i 1x1 8 double x1 1x1 112 sym
x2 1x1 112 sym x3 1x1 112 sym
… …