Matlab符号计算(含作业)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 2 章符号计算
符号计算:
解算数学表达式、方程不是在离散化的数值点上进行,而是凭借一系列恒等式,数学定理,通过推理和演绎,获得解析结果。
符号计算建立在数值完全准确表达和推演严格解析的基础之上,所得结果完全准确。
特点:
一.相对于MATLAB的数值计算“引擎”和“函数库”而言,符号计算的“引擎”和“函数库”是独立的。
二.在相当一些场合,符号计算解算问题的命令和过程,显得比数值计算更自然、更简明。
三.大多数理工科的本科学生在学过高等数学和其他专业基础课以后,比较习惯符号计算的解题理念和模式。
2.1符号对象和符号表达式
MATLAB依靠基本符号对象(包括数字、参数、变量)、运算符及一些预定义函数来构造和衍生符号表达式和符号方程。
2.1.1基本符号对象和运算算符
1.生成符号对象的基本规则
●任何基本符号对象(数字、参数、变量、表达式、函数)都必须借助
专门的符号命令sym、syms、symfun定义。
●任何包含符号对象的表达式或方程,将继承符号对象的属性。
2.精准符号数字和符号常数
符号(类)数字的定义:
sym(Num) 采用精准数值类数创建精准的符号数字(推荐格式!)
sc=sym(Num) 采用精准数值类数创建精准的符号常数sc(推荐格式!)
说明:若输入量Num是精准的浮点数(如0.321、10/3等),能生成精准的符号数字;
若输入量Num是诸如sin(0.3)的数值表达式,那么就只能生成由数字表达式获得的16位精度的近似符号数字。
sym('Num') 采用有理分数字符串创建精准的符号数字
sc=sym('Num') 采用有理分数字符串创建精准的符号常数sc
说明: Num必须处于(英文状态下的)单引号内,构成字符串(关于字符串参见附录A);
只有当字符串数字'Num'采用诸如321/1000、10/3等整数构成的有理分数形式表达时,sym('Num') 才能生成精准的符号数字;
若字符串数字用诸如0.321、3.21e-1等“普通小数或科学记述数”表达,那么只能产生“近似符号数字”。在默认情况下,该近似符号数字为32位精度。
【例2.1-1】
(1)创建完全精准的符号数字或数字表达式
clear all
R1=sin(sym(0.3)) % 输入量为普通小数
R2=sin(sym(3e-1)) % 输入量为科学记述数
R3=sin(sym(3/10)) % 输入量为有理分数
R4=sin(sym('3/10')) % 输入量为“整数构成的有理分数”字符串数字
disp(['R1属于什么类别?答:',class(R1)])
disp(['R1与R4是否相等?(是为1,否为0)答:',int2str(logical(R1==R4))]) R1 =
sin(3/10)
R2 =
sin(3/10)
R3 =
sin(3/10)
R4 =
sin(3/10)
R1属于什么类别?答:sym
R1与R4是否相等?(是为1,否为0)答:1
(2)产生具有32位精度的“近似”符号数字(杜绝使用!)
S1=sin(sym('0.3')) % sym的输入量是字符串小数,生成32位精度下的
% 近似符号数,进而在sin作用下给出近似符号数。
S2=sin(sym('3e-1')) % syms的输入量是字符串科学记述数。
eRS=vpa(abs(R1-S1),64);
disp(['S1属于什么类别?答:',class(S1)])
disp(['S1与R1是否相同?答: ',int2str(logical(R1==S1))])
disp('S1与R1的误差为')
disp(double(eRS))
S1 =
0.29552020666133957510532074568503
S2 =
0.29552020666133957510532074568503
S1属于什么类别?答:sym
S1与R1是否相同?答: 0
S1与R1的误差为
6.3494e-41
(3)产生具有16位精度的“近似”符号数字(杜绝使用!)
F1=sym(sin(3/10)) % sym的输入量为双精度表达式sin(3/10),
% 就只能创建出仅16位精度的近似符号数。
F2=sym(sin(0.3)) % 同上
eFS=vpa(abs(F1-S1),32);
disp(['F1属于什么类别?答:',class(F1)])
disp(['S1与F1是否相同?答: ',int2str(logical(F1==S1))])
disp('F1与S1的误差为')
disp(double(eFS))
F1 =
5323618770401843/18014398509481984
F2 =
5323618770401843/18014398509481984
F1属于什么类别?答:sym
S1与F1是否相同?答: 0
F1与S1的误差为
2.8922e-17
3.基本符号变量
经典教科书里,表达式e-ax sinbx中的a,b称为参数,x为变量。在MATLAB的符号计算中,a、b、x统称为基本符号变量,其中,x总被默认为“待解(自由)符号变量”,其他被作为“符号参数”处理。
定义基本符号变量的命令格式:
para=sym(' para') 定义单个复数域符号变量para
para=sym(' para', 'Flag') 定义单个Flag指定域符号变量para
syms para 定义单个复数域符号变量para的另一种方式syms para Flag 定义单个Flag指定域符号变量para的另一种方式
syms para1 para2 paraN 定义多个复数域符号变量para1 para2 paraN syms para1 para2 paraN Flag 定义多个Flag指定域符号变量para1 para2 paraN
●符号参数名不要用处于“字母表中小写字母x及其两侧的英文字母”开头。
●Flag表示数域的限定性假设,可具体取以下词条:
positive 正实数域;
real 实数域。
●默认值是复数域符号变量
●sym命令只能对单变量作用,syms不能用于对数值、常数相关的定义。