第3次MATLAB符号计算3第三次课
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、将符号矩阵转化为数值矩阵
N=double(S) %将符号变量S转换为数 值变量N eval命令直接得出符号对象的数Hale Waihona Puke Baidu结果。
【例3.7】将符号变量2 5 π 与数值变量进 行转换。
>>a1=sym('2*sqrt(5)+pi') a1 = 2*sqrt(5)+pi >>b1=double(a1) %转换为数值变量 b1 = 7.6137 >>a2=vpa(sym('2*sqrt(5)+pi'),32) a2 = 7.6137286085893726312809907207421
%创建符号矩阵
%计算行列式 %计算非共轭转置
ans = [ 1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)] [ 1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]
使用syms命令创建符号矩阵:
>> syms a b c d >> A=[a b;c d] 比较符号矩阵与字符串矩阵 : >> A=sym('[a,b;c,d]') %创建符号矩阵
A= [ a, b] [ c, d] >> B='[a,b;c,d]' %创建字符串矩阵 B= [a,b;c,d] >> C=[a,b;c,d] %创建数值矩阵 ??? Undefined function or variable 'a'.
任意精度算术运算 digits(n) —— 设置可变精度,缺省32位
vpa(x,n) —— 显示可变精度计算
digits(25)
vpa(1/2+1/3)
ans =
.8333333333333333333333333
EX:
>>vpa(5/6,40) ans = .8333333333333333333333333333333 333333333 >>a=sym('[1/4,exp(1);log(3),3/7]') a= [ 1/4,exp(1)] [log(3), 3/7] >>vpa(a,10) ans = [.2500000000, 2.718281828] [1.098612289, .4285714286]
e
【例3.1】创建数值常量和符号常量。 >>a1=2*sqrt(5)+pi a1 = 7.6137 >>a2=sym('2*sqrt(5)+pi') %创建符号表达式 a2 = 2*sqrt(5)+pi >>a3=sym(2*sqrt(5)+pi) %默认格式r,按最接近的有理数型表示符号常量 a3 = 8572296331135796*2^(-50)
符号运算的功能
符号线性代数(linear algebra) 因式分解、展开和简化(simplification and substitution) 符号代数方程求解(solving equations) 符号微积分(calculus) 符号微分方程(differential eguation)
a= sin(2)
>> a=sym(sin(2),'r') a= 8190223105242182*2^(-53)
参数 d f r
作 用 返回最接近的十进制数值 ( 默认位数 为 32 位) 返回该符号值最接近的浮点表示 返回该符号值最接近的有理数型 ( 为 系统默认方式),可表示为 p/q、p*q、 10^q、pi/q、2^q 和 sqrt(p)形式之一 返回最接近的带有机器浮点误差的有 理值
特点: 1 符号计算是可以对未赋值的符号对象进行运算 和处理。 2 可以获得任意精度的解
与数值运算的区别: 数值运算中必须先对变量赋值,然后才能参与运算。 符号运算无须事先对独立变量赋值,运算结果以标准的符 号形式表达。
符号对象:是一种数据结构,包括是符号常数、符 号变量、符号表达式,用来存储代表符号的字符串。 在符号运算中,凡是由符号表达式所生成的对象也 都是符号对象。
>> syms a b c x >> f2=a*x^2+b*x+c
%创建变量 %创建表达式
>> syms('a','b','c','x') >> f3=a*x^2+b*x+c 符号表达式()中的参数一定要用' ' 单引号括起来。
3.1.3 符号矩阵
数值矩阵A=[1,2;3,4] A=[a,b;c,d]
符号矩阵的修改
a.直接修改 可用、 键找到所要修改的矩阵, 直接修改
b.指令修改
用A1=subs(A, 'new', 'old')来修
改
例如:A =[ a, 2*b] [3*a, 0]
A1=subs(A, 'c', 'b') A1 =[ a, 2*c] [3*a, 0]
3.2符号表达式的代数运算
第3章 MATLAB符号计算
数值计算(Mathematics)
数据统计与分析 数据插值与拟合 多项式计算 数值微积分 线性方程组求解 非线性方程与方程组求解 常微分方程的数值求解
符号计算(Symbolic compute)
优点:可实现直接对抽象的符号对象进行 计算,并将计算结果用标准符号形式显示出 来. 工具箱: Symbolic Math Toolbox.
>>z=x+i*y; %创建z为复数符号变量 >> real(z) %复数z的实部是实数x ans = x >>sym('x','unreal'); %清除符号变量的实数特性 >> real(z) %复数z的实部 ans = 1/2*x+1/2*conj(x)
式
例如:创建符号表达式ax2+bx+c >> f1=sym(‘a*x^2+b*x+c’) %创建表达
1.
符号运算中的运算符 (1)基本运算符 运算符“+”,“-”,“*”,“\”,“/”, “^”分别实现符号矩阵的加、减、乘、左除、右除、 求幂运算。 运算符“.*”,“./”,“.\”,“.^”分别实现符号 数组的乘、除、求幂,即数组间元素与元素的运算。 运算符“′”,“.′”分别实现符号矩阵的共轭转置、 非共轭转置。 (2)关系运算符 没有“大于”、“大于等于”、“小于”、“小于 等于”、的概念,只有“等于”和“不等于”的概念。 运算符“= =”、“~=”分别对运算符两边的符号 对象进行“相等”、“不等”的比较。
主要内容
3.1 符号表达式的建立 3.2符号表达式的代数运算 3.3符号表达式的操作和转换 3.4 符号极限、微积分和级数求和 3.5 符号积分变换 3.6符号方程的求解
符号计算(Symbolic compute)
工具箱: Symbolic Math Toolbox.
起源:1993年MathWorks购买了加 拿大的数学软件Maple的使用权,以 Maple的内核作为符号计算引擎,依赖 Maple已有的函数库,开发了符号计算的 工具箱。
3.1 符号表达式的建立
3.1.1 创建符号常量
符号常量是不含变量的符号表达式。 sym(‘常量’) %创建符号常量 sym(常量,参数) %按某种格式转换为符号常量 说明:参数可以选择为’ d’ 、’ f’ 、’ e’ 或’ r’ 四种格式,也可省略。 EX: >> a=sym('sin(2)')
%计算特征值
【例3.5】符号表达式f=2x2+3x+4与g=5x+6 的代数运算。
>>f=sym('2*x^2+3*x+4') f= 2*x^2+3*x+4 >>g=sym('5*x+6') g= 5*x+6 >>f+g %符号表达式相加 ans = 2*x^2+8*x+10 >>f*g %符号表达式相乘 ans = (2*x^2+3*x+4)*(5*x+6)
3.1.2 创建符号变量和表达式 (Creating Symbolic Variables and Expression)
1. 使用sym命令创建符号变量和表达式 sym(‘变量’,参数) %把变量定义为符号对象 sym(‘表达式’) %创建符号表达式 2.使用syms命令创建符号变量和符号表达式 syms(‘arg1’, ‘arg2’, …,参数) syms arg1 arg2 …,参数
3.2.2 符号数值任意精度控制和运算
在symbolic中有三种不同的算术运算:
1. 2.
数值类型 有理数类型
matlab的浮点算术运算 maple的精确符号运算
3.
vpa类型
maple的任意精度算术运算
浮点算术运算
1/2+1/3
ans =
0.8333
符号运算
sym(1/2)+(1/3) ans = 5/6 --精确解
sym(‘变量’,参数)
参数用来设置限定符号变量的数学特性,可以选择 为’positive’、’real’和’unreal’, ’positive’ 表示 为“正、实”符号变量,’real’表示为“实”符号变 量,’unreal’ 表示为“非实”符号变量。如果不限定则参
数可省略。 >>syms x y real %创建实数符号变量 EX:
3.2.1符号表达式的代数运算
由于MATLAB采用了重载技术,使得符号表达 式的运算符和基本函数都与数值计算中的几乎 完全相同 。 例如: 例如: >> f=sym('2*x^2+3*x+4') >> A+2 >> g=sym('5*x+6') >> A.’ >> f+g >> f*g >> det(A) >> A^2
>>a4=sym(2*sqrt(5)+pi,'d') %按最接近的十进制浮点数表示符号常量 a4 = 7.6137286085893727261009189533070 >>a31=a3-a1 %数值常量和最接近有理数型的符号常量的计算 a31 = 0 >>a5='2*sqrt(5)+pi' %字符串常量 a5 = 2*sqrt(5)+pi
—— 不识别
用matlab函数sym创建矩阵
命令格式:A=sym('[
※ 符号矩阵内容同数值矩阵
]')
※ 需用sym指令定义
※ 需用' '标识
例如:A = sym('[a , 2*b ; 3*a , 0]')
A=
[ a, 2*b]
[3*a,
0]
这就完成了一个符号矩阵的创建。
注意:符号矩阵的每一行的两端都有方括号, 这是与 matlab数值矩阵的一个重要区别。
注意:
三种运算方式中数值型运算的速度最快。 有理数型符号运算的计算时间和占用内存是 最大的,产生的结果是非常准确的。 VPA型的任意精度符号运算比较灵活,可 以设置任意有效精度,当保留的有效位数增加 时,每次运算的时间和使用的内存也会增加。 数值型变量结果显示的有效位数并不是存储 的有效位数,显示的有效位数由“format” 命令控制
3.2.3 符号对象与数值对象的转换
1、将数值矩阵转化为符号矩阵 函数调用格式:sym(A)
EX: >>A=[1/3,2.5;1/0.7,2/5] A= 0.3333 2.5000 1.4286 0.4000 >>sym(A) ans = [ 1/3, 5/2] [10/7, 2/5]
2.
函数运算 (1)三角函数和双曲函数 (2)指数和对数函数 (3)复数函数 (4)矩阵代数命令
[例3.4]求矩阵 非共轭转置和特征值。
a 11 A a 21
a 12 的行列式值、 a 22
>>syms a11 a12 a21 a22 >>A=[a11 a12;a21 a22] A= [ a11, a12] [ a21, a22] >>det(A) ans = a11*a22-a12*a21 >>A.' ans = [ a11, a21] [ a12, a22] >>eig(A)
符号运算与数值运算的区别:
传统的数值型运算因为要受到计算机所保留的有 效位数的限制,它的内部表示法总是采用计算机硬件 提供的8位浮点表示法,因此每一次运算都会有一定 的截断误差,重复的多次数值运算就可能会造成很大 的累积误差。符号运算不需要进行数值运算,不会出 现截断误差,因此符号运算是非常准确的。 符号运算可以得出完全的封闭解或任意精度的数 值解。 符号运算的时间较长,而数值型运算速度快。