实现Hardware-Efficient复杂Partial-Systolic矩阵与对角加载解决使用QR分解
这个例子展示了如何实现一个hardware-efficient的复数矩阵方程的最小二乘解
使用复杂Partial-Systolic矩阵解决使用QR分解块。这种方法被称为对角加载被称为一个正则化参数。
对角加载方法
当你将正则化参数设置为非零值块复杂Partial-Systolic矩阵解决使用QR分解,然后块计算最小二乘解
在哪里是一个n阶单位矩阵是一个数组大小n-by-p 0。
这种方法被称为对角加载被称为一个正则化参数。熟悉课本最小二乘解这个方程如下,导出的方程两边乘以和左边的逆矩阵。
复杂Partial-Systolic矩阵解决使用QR分解块计算解决方案有效地没有计算的逆计算QR分解,转变
就地上三角R和转换
就地来
和解决转换方程。
定义矩阵维度
指定的行数矩阵A和B,在矩阵的列数和列数矩阵B。
m = 300;%的行数矩阵A和Bn = 10;%的列数矩阵Ap = 1;%的列数矩阵B
定义正则化参数
正则化参数时零块复杂Partial-Systolic矩阵解决使用QR分解,然后对角加载的方法。当正则化参数为零,然后方程减少常规最小二乘方程AX = B。
regularizationParameter = 1 e - 3;
块的参数
生成随机矩阵最小二乘
对于这个示例,使用helper函数complexRandomLeastSquaresMatrices
生成随机矩阵A和B AX = B的最小二乘问题。矩阵生成这样的元素A和B - 1和+ 1之间,和r级。
rng (“默认”)r = 3;%的秩矩阵A[A, B] = fixed.example.complexRandomLeastSquaresMatrices (m, n, p, r);
选择定点数据类型
使用辅助函数complexQRMatrixSolveFixedpointTypes
选择输入矩阵A和B,定点数据类型和输出X,这样有一个低概率的计算溢出。
元素的实部和虚部的A和B是1 - 1,因此,最大可能的任何元素的绝对值是sqrt (2)。
max_abs_A = sqrt (2);%上限马克斯(abs ((:))max_abs_B = sqrt (2);%上限马克斯(abs (B (:))precisionBits = 24;%的比特数的精度T = fixed.complexQRMatrixSolveFixedpointTypes (m, n, max_abs_A、max_abs_B precisionBits);一个=投(,“喜欢”,T.A);B =投(B,“喜欢”、肺结核);OutputType = fixed.extractNumericType (T.X);
打开模型
模型=“ComplexPartialSystolicQRDiagonalLoadingMatrixSolveModel”;open_system(模型);
在这个模型中,数据处理程序子系统需要复杂的矩阵A和B作为输入。的准备好了
端口触发数据处理程序。后发送一个真正validIn
信号,可能会有一些延迟准备好了
设置为false。当数据处理程序检测到的前缘准备好了
信号,块集validIn
为true并发送下一行的A和b,该协议允许数据发送时的前缘准备好了
检测到信号时,确保所有的数据处理。
设置变量在模型中工作区
使用辅助函数setModelWorkspace
上面定义的变量添加到模型空间。这些变量对应的块参数复杂Partial-Systolic矩阵解决使用QR分解块。
numSamples = 1;%的样本矩阵fixed.example.setModelWorkspace(模型,“一个”一个,“B”B“米”米,“n”n“p”、磷、…“regularizationParameter”regularizationParameter,…“numSamples”numSamples,“OutputType”,OutputType);
模拟模型
= sim(模型);
构建解决方案从输出数据
复杂Partial-Systolic矩阵解决使用QR分解输出数据块一次一行。当一个结果行输出,块集validOut
为true。X的行输出的顺序计算,最后一排第一,所以你必须重建数据解释结果。重建矩阵X从输出数据,使用helper函数matrixSolveModelOutputToArray
。
X = fixed.example.matrixSolveModelOutputToArray (out.X, n, p, numSamples);
验证输出结果的准确性
评估的准确性复杂Partial-Systolic矩阵解决使用QR分解块,计算相对误差。
A_lambda = [regularizationParameter *眼(n); A];B_0 =(0(氮、磷);B);relative_error =标准(双(A_lambda * X - B_0)) /规范(双(B_0))% #好< NOPTS >
relative_error = 1.0386 e-04