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