第5章符号计算1

Download Report

Transcript 第5章符号计算1

第5章 符号计算 (1)
第5章 符号计算 (1)
主要内容:
①创建符号常量和变量;
②符号多项式的运算;
③符号微积分的计算;
④符号积分变换的计算;
⑤符号微分方程和代数方程的求解。
MATLAB 7.X程序设计
2/44
第5章 符号计算 (1)
5.1 符号计算基础
5.1.1 概述
符号计算的特点:
1)符号计算定义在符号变量的基础上,符号表
达式计算前必须定义符号变量。
2)符号计算是精确计算。
3)符号计算的计算速度较慢。
4)符号计算的运算符和基本数学函数与数值计
算中的运算符和基本数学函数几乎完全相同。
MATLAB 7.X程序设计
3/44
第5章 符号计算 (1)
5.1.2 创建符号常量
• sym函数创建符号常量,格式1为:
sym(‘常量’)
例5-1
创建符号常量。
b=sym('pi') %创建符号常量
MATLAB 7.X程序设计
4/44
第5章 符号计算 (1)
•
sym函数的格式2为:
sym(常量,参数)
功能:把常量按参数的格式要求转换为符号常
量。其中参数的含义:
d 返回最接近的十进制数(默认位数为32位)
f 返回该符号值最接近的浮点表示
r 返回该符号值最接近的有理数型(为系统默认
方式),可表示为p/q、p*q、10^q、p/q、2^q
和sqrt(p)形式之一
e 返回最接近的带有机器浮点误差的有理值
MATLAB 7.X程序设计
5/44
第5章 符号计算 (1)
5.1.3 创建符号变量
sym(‘变量’,参数)
功能:把变量定义为符号对象。其中参数用来设
置限定符号变量的数学特性,有三种选择:
• ’positive’ 表示为“正、实”符号变量,
• ’real’
表示为“实”符号变量,
• ’unreal’ 表示为“非实”符号变量。如果
不限定则参数可省略。
MATLAB 7.X程序设计
6/44
第5章 符号计算 (1)
syms函数的格式为:
syms(‘arg1’, ‘arg2’, …,参数)
syms arg1 arg2 …参数
功能:创建多个符号变量。
例5-2
创建符号复数变量a+bi。
MATLAB 7.X程序设计
7/44
第5章 符号计算 (1)
5.2 符号表达式的基本操作
5.2.1 符号表达式的基本运算
1 算术运算、关系运算
2 常用的函数
1) 三角函数和双曲函数
2) 指数和对数函数
3) 矩阵分析函数
MATLAB 7.X程序设计
8/44
第5章 符号计算 (1)
例5-3 创建符号矩阵,并求逆、对角阵、行
列式和秩。
例5-4
求线性方程组的解。
x2 x3

 x1  2  2  x4

 x1  x2  x3  x4  10

 x  x2  x  x
4
3
 1 4
8 x  x  x  x  1
 1 2 3 4
如果求解前3个方程所构成的“欠定”方程组呢?
9/44
MATLAB 7.X程序设计
第5章 符号计算 (1)
4) 取整函数
5)复数函数
例5-5 创建符号复数常量,并求其共轭、实
部 、虚部和模。
MATLAB 7.X程序设计
10/44
第5章 符号计算 (1)
5.2.2 符号数值精度控制
三种不同的算术运算:
1) 数值型
MATLAB的浮点运算。
2) 有理数型
Maple的精确符号运算。
3) VPA型
Maple的任意精度运算。
MATLAB 7.X程序设计
11/44
第5章 符号计算 (1)
第3种运算的精度可以任意设置,由digits和
vpa函数实现。
• digits(n)
功能:设定计算精度和改变默认的有效位数函
数。
其中n为所期望的有效位数,默认值为32位。
• Vpa 的格式为:
S=vpa(s,n)
功能:将s表示为n位有效位数的符号对象。
MATLAB 7.X程序设计
12/44
第5章 符号计算 (1)
例5-6
应用digits和vpa函数设置运算精度。
a=sym('2*sqrt(5)+pi') %创建符号对象
digits
%显示默认的有效位数
vpa(a)
%用默认的位数计算并显示
vpa(a,20)
%按指定的精度计算并显示
digits(15)
%改变默认的有效位数
vpa(a)
%按digits指定的精度计算并显示
MATLAB 7.X程序设计
13/44
第5章 符号计算 (1)
5.2.3 符号对象转换为数值对象
•
double(S)
功能:把符号矩阵S转换为双精度浮点数矩阵。
• single(S)
功能:把符号矩阵S转换为单精度浮点数矩阵。
MATLAB 7.X程序设计
14/44
第5章 符号计算 (1)
例5-7 建立符号常数矩阵,并转换
为数值矩阵。
s=sym('[1/3 5/7;sqrt(3)
%建立符号常数矩阵s
single(s)
%把s转换为数值矩阵
MATLAB 7.X程序设计
8/9]')
15/44
第5章 符号计算 (1)
5.2.4 自由变量的确定
符号表达式允许使用自由变量。确定自由变
量的原则:
1)小写字母i和j不能作为自由变量。
2)符号表达式中如果有多个字符变量,则按
照以下顺序选择自由变量:
首先选择x作为自由变量;如果没有x,则
选择在字母顺序中最接近x的字符变量;如
果与x相同距离,则在x后面的优先。
3)大写字母比所有的小写字母都靠后。
MATLAB 7.X程序设计
16/44
第5章 符号计算 (1)
findsym的格式为:
findsym(EXPR,n)
功能:确定EXPR中的自由变量。
其中EXPR可以是符号表达式或符号矩阵;n为
按顺序得出符号变量的个数,当n省略时,
则不按顺序给出EXPR中所有的符号变量。
MATLAB 7.X程序设计
17/44
例5-8
第5章 符号计算 (1)
创建符号表达式,然后确定符
号变量。
f1=sym('a*x^2+B*x+c')
%创建符号表达式a*x^2+ B*x+c
findsym(f1)
%确定B, a, c, x为符号变量
findsym(f1,1) %确定x为符号变量
findsym(f1,2) %确定x,c为符号变量
findsym(f1,3) %确定x,c,a为符号变量
findsym(f1,4) %确定x,c,a,B为符号变量
MATLAB 7.X程序设计
18/44
第5章 符号计算 (1)
5.2.5 变量置换
• subs (S)
功能:用MATLAB工作空间中的变量替换S符
号表达式中的所有变量。
• subs (S,NEW)
功能:用变量NEW替换符号表达式S中的自由
变量。
• subs (S,OLD,NEW)
功能:用变量NEW替换符号表达式S中的变量
OLD。
MATLAB 7.X程序设计
19/44
第5章 符号计算 (1)
例5-9
根据subs的置换规则,分析下
列语句的功能。
syms a b x; %创建符号变量a, b,和 x
f=a*sin(x)+b; %创建符号表达式
f1=subs(f,'a',sym('2'))
%以符号常量2替换符号变量a
f2=subs(f,{a,b},{sym('2'),sym('3')})
%分别以符号常量2、3替换符号变量a、b
f3=subs(f,{a,b},{3,2})
%分别以标量2、3替换符号变量a、b
MATLAB 7.X程序设计
20/44
第5章 符号计算 (1)
f4=subs(f,'sin(x)',sym('y'))
%以符号变量y替换符号表达式sin(x)
f5=subs(f,{a,b,x},{2,2,sym(pi/3)})
%分别以标量2、3替换符号变量a、b,以符号常量
pi/3替换符号变量x
f6=subs(f,{a,b,x},{2,2,pi/3})
%分别以标量2、3 、pi/3替换符号变量a、b、x
MATLAB 7.X程序设计
21/44
第5章 符号计算 (1)
5.2.6 反函数和复合函数
• finverse(f,v)
功能:对指定自变量v的函数f(v)求反函数。
当v省略时,则对默认的自由符号变量求反
函数。
• compose(f,g,x,z)
功能:返回值为f(g(z))。其中f和g是符号表
达式,x和z是符号变量。
MATLAB 7.X程序设计
22/44
第5章 符号计算 (1)
例5-10 求y=x2的反函数。
syms x;f=x^2;g=finverse(f)
fg=compose(g,f) %验算g(f(x))是否等于x
例5-11 求tex的反函数。
f=sym('t*e^x')%原函数
g=finverse(f) %对默认自由变量x求反函数
g=finverse(f,'t')%对t求反函数
MATLAB 7.X程序设计
23/44
第5章 符号计算 (1)
应该注意的是如果先定义t为符号变量,则
参数't'的单引号可去掉:
syms t
g=finverse(f,t)
例5-12 求sinx和lnx的反函数。
MATLAB 7.X程序设计
24/44
第5章 符号计算 (1)
5.3 符号多项式函数
5.3.1 合并同类项
• collect (S,v)
功能:合并多项式S的同类项。其中S是符号表
达式,v是合并同类项的变量。
• collect (S)
功能:以findsym确定的变量合并多项式S的同
类项。
函数pretty可给出多项式的易读形式。
MATLAB 7.X程序设计
25/44
第5章 符号计算 (1)
例5-13 合并多项式
的同类项。
( x  x  1)( x  1)
3
2
x=sym('x');
f=(x^3+x+1)*(x^2+1);
g=collect(f)
MATLAB 7.X程序设计
26/44
例5-14 合并多项式( x
的同类项。
2
t
第5章 符号计算 (1)
t
 xe  1)( x  e )
s=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))');
e1=collect(s)
%合并关于x的同类项系数
e2=collect(s,'exp(-t)')
%合并关于exp(-t)的同类项系数
e3=collect(s,'t')
%合并关于t的同类项系数
MATLAB 7.X程序设计
27/44
第5章 符号计算 (1)
例5-15 创建符号多项式,并应用函数
sym2poly,poly2str 和 poly2sym
进行各种形式间的转换。
syms x;f=x^3+2*x^2-3*x+5;
sy2p=sym2poly(f)
%由符号多项式产生数值系数行向量
p2st=poly2str(sy2p,'x')
%把系数行向量变成易读表示式
p2sy=poly2sym(sy2p)
%把数值系数行向量再转换为符号多项式
pretty(f,'x')
%显示符号多项式的易读表示形式
MATLAB 7.X程序设计
28/44
第5章 符号计算 (1)
5.3.2 因式分解
• factor(s)
功能:把符号表达式S转换为多个因式相乘的
形式,各多项式的系数均为有理数。
• horner(s)
功能:将符号多项式s转换为嵌套形式表示,
即用多层括号的形式表示。
MATLAB 7.X程序设计
29/44
第5章 符号计算 (1)
例5-16 分解因式 x 3  a 3
syms x a;f=factor(x^3-a^3) ;
pretty(f,'x')
执行结果如下:
ans =
2
-(a - x) (a
2
+ a x + x )
MATLAB 7.X程序设计
30/44
第5章 符号计算 (1)
例5-17 将符号矩阵表达式的各个元素
分解为多个因式
 x3  b3 x 4  1
 5

6
 x  1 x  1
syms x b;
f=[x^3+b^3 x^4-1;x^5-1 x^6-1];
factor(f)
MATLAB 7.X程序设计
31/44
第5章 符号计算 (1)
例5-18
将多项式表示为嵌套形式。
x  x  5x  5x  5x  6
6
4
3
2
syms x;
horner([x^6-x^4-5*x^3+5*x^2+5*x-6])
MATLAB 7.X程序设计
32/44
第5章 符号计算 (1)
例5-19
将数字1025分解为正整数之积。
factor(1025)
执行结果如下:
ans =
5
5
41
分析:由执行结果可以看出1025=5×5×41,
恰巧是素数之积。
MATLAB 7.X程序设计
33/44
第5章 符号计算 (1)
求全部两位数的素数的程序如下:
sushu=[];
for ii=10:99
x=factor(ii);
if x==ii
sushu=[sushu ii];
end
end
sushu
MATLAB 7.X程序设计
34/44
第5章 符号计算 (1)
例5-20
问入取何值时,齐次方程组有非
0解?
(1   )x1  2x 2  4x 3  0

 2x 1  ( 3   )x 2  x 3  0

 x1  x 2  (1   )x 3  0
MATLAB 7.X程序设计
35/44
第5章 符号计算 (1)
5.3.3 分子、分母的提取
[N,D] = numden (S)
• 提取有理多项式的分子、分母多项式。其
中S是符号表达式,N为符号表达式S的分
子,D为符号表达式S的分母。
MATLAB 7.X程序设计
36/44
第5章 符号计算 (1)
1
6
12
例5-21 求出 f  3  2 
8
x
x
x
的分子、分母
syms x;
f=1/(x^3)+6/x/x+12/x+8;
[n,d]=numden(f)
MATLAB 7.X程序设计
37/44
第5章 符号计算 (1)
 3
例5-22 求出符号矩阵  3  1
x

 4 1
 x 2 x
各元素的分子、分母多项式。
x 

2 x  1
1 
x  4 
2
syms x;
A=[3/x/x/x+1 x^2/(2*x-1);4/x^2-1/x
1/(x+4)];
[n,d]=numden(A)
MATLAB 7.X程序设计
38/44
第5章 符号计算 (1)
5.3.4 化简
simplify(s)
simple(s)
• 功能:返回符号表达式s的简化形式。
MATLAB 7.X程序设计
39/44
第5章 符号计算 (1)
x
1

例 5-23 化简 f ( x)  2
x  x 1 x 1
•方法1:
syms x;
f=x/(x^2+x+1)+1/(x-1);
simple(f)
•方法2:
syms x;
f=x/(x^2+x+1)+1/(x-1);
simplify(f)
MATLAB 7.X程序设计
40/44
第5章 符号计算 (1)
• 例5-24化简
• 例5-25
• 例5-26
f 
3
1 6 12
 2  8
3
x x
x
1 1 1 1
计算行列式的值 a b c d `
a2 b 2 c 2 d 2
4
4
4
4
a b c d
 cos(t )  sin(t ) 
计算 

 sin(t )  cos(t ) 
MATLAB 7.X程序设计
4
41/44
第5章 符号计算 (1)
5.3.5 展开
符号表达式展开函数expand的格式为:
expand(s)
其中s为符号矩阵或符号表达式。
MATLAB 7.X程序设计
42/44
第5章 符号计算 (1)
• 例5-27
将
( x  y) 展开
n
n=input('Please input n? ')
syms x y;
expand((x+y)^n)
• 例5-28 证明正弦函数和余弦函数的两角和、
差公式。
MATLAB 7.X程序设计
43/44
第5章 符号计算 (1)
 e
ln( x y ) 
例5-29 将矩阵 
( x  2)
2 
 1 lg(100 y ) 
2
( x y )
2
2
的各元素展开。
MATLAB 7.X程序设计
44/44