主要内容

用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);

选择定点数据类型

使用helper函数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(模型);

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

在模型工作区中设置变量

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

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

模拟模型

= sim(模型);

从输出数据构造解决方案

采用QR分解的实突发矩阵求解模块一次输出一行数据。当输出结果行时,块设置validOut为true。X的行是按照计算的顺序输出的,最后一行在前面,因此必须重构数据来解释结果。要从输出数据重建矩阵X,请使用helper函数matrixSolveModelOutputToArray

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

验证输出的准确性

评价QR分解块实际突发矩阵求解的准确性,计算相对误差。

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