Matlab符号计算(含作业)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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不能用于对数值、常数相关的定义。

相关文档
最新文档