第7章 符号计算——7.2 符号对象和符号表达式(2)

简介: 第7章 符号计算——7.2 符号对象和符号表达式(2)

7.2  符号对象和符号表达式(2)


7.2.4  符号对象的类别识别函数


数值计算对象、符号计算对象、字符串作为MATLAB中最常使用的数据对象,它们遵循着各自不同的运算法则,但有时在外形上却十分相似。

为管理和使用方便,MATLAB提供了一些识别不同数据对象的函数,常用的有class函数、isa函数和whos函数。

class函数的返回值S是对象OBJ的数据类型。S的值参见表7-1,其调用格式如下:

S = class(OBJ)

7-1  数据类型

数据类型

描述

double

双精度浮点数组

single

单精度浮点数组

logical

逻辑数组

char

字符数组

cell

单元数组

struct

结构体数组

function_handle

函数句柄

int8

8位有符号整型数组

uint8

8位无符号整型数组

int16

16位有符号整型数组

uint16

16位无符号整型数组

int32

32位有符号整型数组

uint32

32位无符号整型数组

uint64

64位无符号整型数组

<class_name>

MATLAB对象的MATLAB类名

<java_class>

Java对象的Java类名


7-10class类别识别函数示例。

在命令行窗口中输入:

a = pi;
b = 'pi';
c = sym('3.14159826');
d = sym('d');
syms e;
classa = class(a)
classb = class(b)
classc = class(c)
classd = class(d)
classe = class(e)

输出结果:

classa =
    'double'
classb =
    'char'
classc =
    'sym'
classd =
    'sym'
classe =
    'sym'


isa函数的调用格式如下。

● isa(OBJ,'classname'):该函数判断输入参数是否是某种类型的对象。函数返回值为1true)表示OBJclassname类型的;函数返回值为0false)表示OBJ不是classname类型的。


7-11isa类别识别函数示例。

在命令行窗口中输入:

syms x;
R = isa(x, 'sym')

输出结果:

R =
  logical
   1


在命令行窗口中输入:

R = isa(x, 'double')

输出结果:

R =
  logical
   0


在命令行窗口中输入:

y = double(2);
R = isa(y, 'char')

输出结果:

R =
  logical
   0


在命令行窗口中输入:

R = isa(y, 'double')

输出结果:

R =
  logical
   1

whos函数用来列出当前工作区中的变量名及它们的详细信息,如size(大小)、bytes(字节)及class(数据类型)等。whos函数的调用格式如下。

● whos:列出当前工作区内的所有变量及其信息。

● whos VAR1 VAR2:列出当前工作区内的变量VAR1VAR2的信息。



7-12whos类别识别函数示例。

在命令行窗口中输入:

clear
x = 0.5;
syms y;
whos

输出结果:

Name      Size            Bytes  Class     Attributes
  x         1x1                 8  double             
  y         1x1                 8  sym

在命令行窗口中输入:

whos y

输出结果:

Name      Size            Bytes  Class    Attributes
  y         1x1                 8  sym


7.2.5  符号表达式中的变量确定


MATLAB中的符号对象可以表示符号常量和符号变量。symvar函数可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式如下:

● symvar(S)

● symvar(S,N)

函数返回符号表达式S中的所有符号变量;当指定N后,函数返回符号表达式S中距离符号变量xX最接近的N个符号变量。


7-13symvar变量确定函数示例。

在命令行窗口中输入:

syms x y z u v w
f = sym(3 * x^2 + 2 * y + z + u^-1 + v^-2 + w^-3);
symvar(f)

输出结果:

ans =
[ u, v, w, x, y, z]


在命令行窗口中输入:

symvar(f, 1)

输出结果:

ans =
x

在命令行窗口中输入:

symvar(f, 2)

输出结果:

ans =
[ x, y]


在命令行窗口中输入:

symvar(f, 3)

输出结果:

ans =
[ w, x, y]


7.2.6  符号精度计算


符号计算的一个非常显著的特点是,由于计算过程中不会出现舍入误差,从而可以得到任意精度的数值解。如果希望计算结果精确,那么可以牺牲计算时间和存储空间,用符号计算来获得足够高的计算精度。

在符号运算工具箱中有3种不同类型的算术运算。

数值类型:MATLAB的浮点算术运算。

有理数类型:Maple的精确符号计算。

● VPA类型:Maple的任意精度算术运算。

3种运算各有利弊,在计算时应根据计算精度、时间、存储空间的要求进行合理的选择。浮点算术运算是最快的运算,需要的计算机内存最小,但是结果不精确。

MATLAB双精度数输出的数字位数由format命令控制,但它内部采用的是由计算机硬件提供的8位浮点的表示方法。

符号运算中的有理数算术运算所需要的时间和内存开销都是最大的。只要有足够的内存和足够长的计算时间,总能产生精确的结果。

一般符号计算的结果都是字符串,特别是一些符号计算结果从形式上来看是数值,但从变量类型上看,它们仍然是字符串。要从精确解中获得任意精度的解,并改变默认精度,把任意精度符号解变成真正的数值解,就需要用到如下几个函数。

1digits()函数。

digits()函数的调用格式如下。

● digits(d):调用该函数后的近似解的精度变成d位有效数字。d的默认值是32位。

2vpa()函数。

vpa()函数的调用格式如下。

● vpa(A,d):求符号解A的近似解,该近似解的有效位数由参数d来指定。

3double()函数。

double()函数的调用格式如下。

● double(A):把符号矩阵或任意精度表示的矩阵A转换为双精度矩阵。


7-14:符号精度计算示例。

在命令行窗口中输入:

syms x;
f = sym(2 * x^2 + 3 * x - 4)
s = solve(f)
digits(4);
vpa(s)

输出结果:

f =
2*x^2 + 3*x - 4
s =
 - 41^(1/2)/4 - 3/4
   41^(1/2)/4 - 3/4
ans =
 -2.351
 0.8508


在命令行窗口中输入:

vpa(s, 6)

输出结果:

ans =
 -2.35078
 0.850781

相关文章
|
机器学习/深度学习 人工智能 安全
平均每天有一个隐私计算专利在提交,他们是怎么做到的?
平均每天有一个隐私计算专利在提交,他们是怎么做到的?
366 0
|
5月前
|
传感器 算法
船舶运动控制,PID控制算法,反步积分控制器
船舶运动控制,PID控制算法,反步积分控制器
|
5月前
|
缓存 前端开发 NoSQL
如何开发工程项目部管理系统中的进度管理板块(附架构图+流程图+代码参考)
本文介绍如何构建一个高效的工程项目进度管理板块,涵盖系统架构、数据模型、核心功能、业务流程及开发技巧。内容包含四个关键代码示例,便于快速落地开发,帮助解决进度不准与沟通不畅两大工程难题。
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
自监督学习:引领机器学习的新革命
自监督学习的思想可以追溯到几年前,最早是在图像处理领域被提出。随着深度学习的快速发展,研究者们逐渐认识到未标注数据的巨大潜力。尤其是在大规模数据集的爆炸式增长下,获取标注数据的成本越来越高,而利用自监督学习的方法来减少对标注数据的依赖变得越来越重要。
|
JavaScript 前端开发 Java
JavaScript中的面向对象编程(OOP) - 终极指南
本文介绍了 JavaScript 的面向对象编程 (OOP) 概念,包括继承、多态、封装和抽象等关键要素,并通过代码示例帮助开发者理解和应用 OOP 思维。
292 5
|
安全 Java
掌握 Java IO 流:常见问题与解决方案
【4月更文挑战第4天】Java IO 流问题详解:文件读写失败(检查路径与权限)、字符编码错误(指定正确编码)、缓冲区使用不当(优化性能)、异常处理缺失(捕获并处理异常)、资源未释放(及时关闭流或用try-with-resources)、并发访问冲突(使用同步机制)和文件锁定(处理锁文件异常)。解决这些问题可提升程序稳定性与性能。
392 1
|
机器学习/深度学习 数据采集 人工智能
干财务的学Python到底有没有用?
干财务的学Python到底有没有用?
552 5
|
JavaScript 前端开发
CSDN--MD编辑器学习--图片插入尺寸和对齐方式
CSDN--MD编辑器学习--图片插入尺寸和对齐方式
458 0
|
机器学习/深度学习 自然语言处理 算法
NLP之文档向量化算法综述
NLP之文档向量化算法综述
781 2