主要内容

利用QR分解实现硬件高效的真实突发矩阵求解

这个例子展示了如何使用QR分解块的真实突发矩阵求解实现实值矩阵方程AX=B的硬件高效的最小二乘解。

定义矩阵维度

指定矩阵A和B的行数,矩阵A的列数和矩阵B的列数。

m = 50;%矩阵A和B中的行数n = 10;%矩阵A的列数p = 1;%矩阵B的列数

生成随机最小二乘矩阵

对于本例,使用helper函数realRandomLeastSquaresMatrices为最小二乘问题AX=B生成随机矩阵A和B。矩阵的生成使得A和B的元素在-1和+1之间,并且A的秩是r。

rng (“默认”) r = 3;A的秩[A, B] = fixed.example.realRandomLeastSquaresMatrices (m, n, p, r);

选择定点数据类型

使用助手函数realQRMatrixSolveFixedpointTypes为输入矩阵A和B选择定点数据类型,为输出矩阵X选择定点数据类型,以便在计算过程中有较低的溢出概率。有关如何选择数据类型的更多信息,请参阅当前目录中的文档FixedPointMatrixLibraryDatatypesExample.pdf。

max_abs_A = 1;%马克斯(abs ((:))max_abs_B = 1;%马克斯(abs (B (:))f = 24;分数长度(精度位数)T = fixed.example.realQRMatrixSolveFixedpointTypes (m, n, max_abs_A max_abs_B f);一个=投(,“喜欢”, T.A);B =投(B,“喜欢”、肺结核);OutputType = fixed.extractNumericType (T.X);

打开模型

模型=“RealBurstQRMatrixSolveModel”;open_system(模型);

该模型中的数据处理程序子系统将实际矩阵A和B作为输入。的准备好了端口触发数据处理程序。发送一个true后validIn信号,之前可能会有延迟准备好了设置为false。当数据处理程序检测到准备好了信号,块集validIn设置为true,并发送A和b的下一行准备好了检测到信号,确保所有数据都得到处理。

在模型工作区中设置变量

使用助手函数setModelWorkspace将上面定义的变量添加到模型工作区中。这些变量对应于实际突发矩阵的块参数,使用QR分解块求解。

numSamples = 1;%样本矩阵的个数fixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、...“numSamples”numSamples,“OutputType”, OutputType);

模拟模型

= sim(模型);

从输出数据构造解决方案

使用QR分解的真实突发矩阵求解块每次输出一行数据。当输出结果行时,块集合validOut为true。X的行按照计算的顺序输出,最后一行在前面,因此必须重新构造数据来解释结果。要从输出数据重构矩阵X,请使用辅助函数matrixSolveModelOutputToArray

X = fixed.example.matrixSolveModelOutputToArray (out.X, n, p, numSamples);

验证输出的准确性

为了评价利用QR分解块求解真实突发矩阵的精度,计算相对误差。

相对误差= norm(double(A*X - B))/norm(double(B))% #好< NOPTS >
relative_error = 3.5192 e-06