这个例子展示了如何使用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