主要内容

用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选择定点数据类型,以便在计算过程中有较低的溢出概率。

max_abs_A = 1;% max上限(abs(A(:)))max_abs_B = 1;% max的上限(abs(B(:)))precisionBits = 24;%精度位数T = fixed.realQRMatrixSolveFixedpointTypes (m, n, max_abs_A、max_abs_B precisionBits);一个=投(,“喜欢”,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“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 >
相对误差=3.5192e-06