主要内容

单精度数学

这个例子展示了如何使用单一精度数据执行算术和线性代数。它还显示了如何根据输入适当地以单精度或双精度计算结果。

创建双精度数据

让我们首先创建一些数据,默认情况下是双精度的。

Ad = [1 20 0;2 5 -1;4 10 -1]
广告=3×31 2 0 2 5 -1 4 10 -1

转换为单精度

方法可以将数据转换为单精度函数。

A =单(Ad);% or A = cast(Ad,'single');

创建单一精度0和1

我们还可以用它们各自的函数创建单个精度0和1。

N = 1000;Z = 0 (n,1,“单一”);O = ones(n,1,“单一”);

让我们看看工作区中的变量。

一个广告OZn
名称大小字节分类属性A 3x3 36单Ad 3x3 72双O 1000x1 4000单Z 1000x1 4000单n 1x1 8双

我们可以看到一些变量是有类型的这就是变量一个(单精度版广告)需要存储一半字节的内存,因为单字节只需要4个字节(32位),而双字节需要8个字节(64位)。

算术与线性代数

我们可以对单个对象执行标准算术和线性代数。

B = a '%矩阵转置
B =3x3单矩阵1 2 4 2 5 10 0 -1 -1
B
名称大小字节类属性B 3x3 36单个

我们看到这个操作的结果,B,是单身。

C = a * b%矩阵乘法
C =3x3单矩阵5 12 24 12 30 59 24 59 117
C = a, * b%元素算术
C =3x3单矩阵1 4 0 4 25 -10 0 -10
X = inv(A)%矩阵逆
X =3x3单矩阵5 2 -2 -2 -1 1 0 -2 1
I = inv(A) * A确认结果为单位矩阵
我=3x3单矩阵1 0 0 0 1 0 0 0 1
I = a \ a这是做矩阵除法比求逆更好的方法。
我=3x3单矩阵1 0 0 0 1 0 0 0 1
E = eig(A)%特征值
E =3x1单列向量3.7321 0.2679 1.0000
F = fft(A(:,1))% FFT
F =3x1单列向量7.0000 + 0.0000i -2.0000 + 1.7321i -2.0000 - 1.7321i
S = svd(A%奇异值分解
S =3x1单列向量12.3171 0.5149 0.1577
P =圆(poly(A))一个矩阵的特征多项式
P =1x4单行向量1 -5 5 -1
R =根(P)多项式的%根
R =3x1单列向量3.7321 1.0000 0.2679
Q = conv(P,P)卷积两个向量
Q =1x7单行向量1 -10 35 -52 35 -10
R = conv(P,Q)
R =1x10的单行向量1 -15 90 -278 480 -480 278 -90 15 -1
阀杆(右);绘制结果

图中包含一个轴对象。axis对象包含一个stem类型的对象。

一个程序,工作为单一或双重精度

现在让我们看一个函数,计算斐波那契数列中足够多的项,使比值小于正确的机器(每股收益)用于单或双数据类型。

获得单个精度结果需要多少项?fibodemo (“单一”
Ans = 19
需要多少项才能获得双倍精度的结果? ?fibodemo (“双”
Ans = 41
现在让我们看看工作代码。类型fibodemo
function nterms = fibodemo(dtype) % fibodemo SINGLEMATH demo使用。计算斐波那契数列中的项数。The MathWorks, Inc. fcurrent = ones(dtype);Fnext = fcurrent;goldenMean = (ones(dtype)+根号(5))/2;tol = eps(goldenMean);Nterms = 2;而abs(fnext/fcurrent - goldenMean) >= tol nterms = nterms + 1;Temp = fnext;Fnext = Fnext + fcurrent; fcurrent = temp; end

注意,我们初始化了几个变量,活动fnext,goldenMean,其值取决于输入数据类型和公差托尔这也取决于类型。单精度要求我们计算的项比等效的双精度计算少。