第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

相关文章
|
7月前
|
C语言
杂项运算符
杂项运算符。
47 1
|
7月前
|
C语言
c语言编程练习题:7-16 计算符号函数的值
请编写程序计算该函数对任一输入整数的值。
124 0
第7章 符号计算——7.5 符号函数的操作
第7章 符号计算——7.5 符号函数的操作
|
6月前
|
编译器 C语言
【C语言】:中移位操作符,位操作符详运算规则详解
【C语言】:中移位操作符,位操作符详运算规则详解
54 1
|
6月前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
56 3
|
6月前
|
存储 编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
45 1
|
7月前
|
C语言
算术操作符、赋值操作符、复合赋值符
这篇文档介绍了算术和赋值操作符。算术操作符包括加&quot;+&quot;、减&quot;-&quot;、乘&quot;×&quot;、除&quot;/&quot;和求余&quot;%”,其中求余只适用于整数,结果正负由第一个运算数决定。赋值操作符有&quot;=&quot;用于给变量赋值,而复合赋值符如&quot;+=&quot;、&quot;-=&quot;等则结合了运算和赋值功能,简化代码编写。
42 1
|
7月前
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
104 5
|
7月前
|
C++
c++逻辑和杂项运算符
c++逻辑和杂项运算符
51 0
第7章 符号计算——7.2 符号对象和符号表达式(1)
第7章 符号计算——7.2 符号对象和符号表达式(1)