MATLAB金融风险管理师FRM(高阶实战)
上QQ阅读APP看书,第一时间看更新

1.1 符号数值

符号数值,是用符号表达数值。符号数值常用sym() 函数来定义。比如下例中1.5为一个双精度数。

class(1.5)
ans =
    'double'

1.5本身为双精度浮点数(double-precision)。所谓双精度浮点数指的是用8个字节(64位)来存储的一个数据,它表达十进制15或16位有效数字,表达正数范围大概是[2.23 × 10-308, 1.79 × 10308]。class()函数用于判定1.5的数据类型。

用sym() 函数将1.5转化成符号数值,如下。同样用class() 函数判断sym(1.5)的类型。符号数值精度要高于双精度数值。

sym(1.5)
% 3/2
class(sym(1.5))
ans =
    'sym'

更多有关MATLAB单精度和双精度浮点数的信息,请参考链接:

https://www.mathworks.com/help/matlab/matlab_prog/floating-point-numbers.html

一个符号数值与双精度值计算结果仍是符号数值,如下。

1/2 + 1/3
% 0.8333
% 0.833333333333333
sym(1/2) + 1/3
% 5/6
sym(1/2)-(1/3)
% 1/6
sym(1/2)*(1/3)
% 1/6

符号数值定义有四种格式,如表1.1所示。

表1.1 sym() 定义符号数值四种格式

下面用四个值举例说明如何使用sym() 定义符号数值。第一个例子是:

代码如下:

x1 = sqrt(2)
% 1.4142
x1 = sym(sqrt(2),'r')
% sqr_2 = 2^(1/2)
x1 = sym(sqrt(2),'d')
% 1.4142135623730951454746218587388
x1 = sym(sqrt(2),'e')
% (64*eps)/147 + 2^(1/2)
x1 = sym(sqrt(2),'f')
% 6369051672525773/4503599627370496

第二个例子是:

代码如下:

x2 = pi
% 3.1416
x2 = sym(pi)
% pi
x2 = sym(pi,'r')
% pi
x2 = sym(pi,'d')
% 3.1415926535897931159979634685442
x2 = sym(pi,'e')
% pi - (198*eps)/359
x2 = sym(pi,'f')
% 884279719003555/281474976710656

第三个例子是:

代码如下:

x3 = 1/7
% 0.1429
x3 = sym(1/7)
% 1/7
x3 = sym(1/7,'r')
% 1/7
x3 = sym(1/7,'d')
% 0.14285714285714284921269 268124888
x3 = sym(1/7,'e')
% 1/7 - eps/28
x3 = sym(1/7,'f')
% 2573485501354569/18014398509481984

第四个例子是:

代码如下:

x4 = log(2)
% 0.6931
x4 = sym(log(2))
% 6243314768165359/9007199254740992
x4 = sym(log(2),'r')
% 6243314768165359/9007199254740992
x4 = sym(log(2),'d')
% 0.69314718055994528622676398299518
x4 = sym(log(2),'e')
% 6243314768165359/9007199254740992
x4 = sym(log(2),'f')
% 6243314768165359/9007199254740992

double() 和eval() 把符号数值变成浮点数数值,例如:

eval(sym(1/7))
double(sym(1/7))

表1.2总结了更多数据转换函数。

表1.2 数据类型转换函数

format long设置命令行窗口输出显示格式,而并不影响MATLAB计算或者保存具体数值。long为众多数据显示样式中的一种。表1.3列出了几种常见数据显示格式。

表1.3 数据显示格式