主要内容

使用QR分解实现硬件有效的真实突发矩阵求解

此示例显示如何使用QR分解块使用真实突发矩阵求解实值矩阵方程AX = B的硬件有效的最小二乘解。

定义矩阵尺寸

指定矩阵A和B中的行数,矩阵A中的列数以及矩阵B中的列数。

m = 50;矩阵A和B中的数量的行数n = 10;矩阵A中的列数p = 1;矩阵B中的列数

生成随机最小二乘矩阵

对于此示例,请使用辅助功能Realrandomleastsquaresmatrices.为了为最小二乘问题生成随机矩阵A和B,问题x = b。生成矩阵使得A和B的元素在-1和+1之间,并且A具有等级R。

RNG('默认')r = 3;%排名[a,b] = fixed.example.realrandomleastsquaresmatrices(m,n,p,r);

选择固定点数据类型

使用辅助功能RealQrmatrixsolvefixedPointTypes.选择输入矩阵A和B的固定点数据类型,并且输出X使得计算期间存在低溢出概率。有关在当前目录中选择了数据类型如何选择数据类型的详细信息,请参阅“ClipedPointMatrixLibraryDataTypeSxample.pdf”。

max_abs_a = 1;%max(abs(a(:))max_abs_b = 1;%max(abs(b(:))f = 24;%分数长度(精度比特)t = fixed.example.realqrmatrixsolvefixedPointTypes(m,n,max_abs_a,max_abs_b,f);a =施放(a,'像',t.a);B =施法(B,'像',T.B);outputType = fixed.extractnumerictype(t.x);

打开模型

模型='realburstqrmatrixsolvemodel';Open_System(型号);

该模型中的数据处理程序子系统将真实矩阵A和B作为输入。这准备好端口触发数据处理程序。发送真实后vidmin信号,可能会有一些延迟准备好设置为false。当数据处理程序检测到的前沿准备好信号,块集vidmin为true并发送下一行A和B.本协议允许每当前沿时发送数据准备好检测到信号,确保处理所有数据。

在模型工作区中设置变量

使用辅助功能setmodelworkspace.将上面定义的变量添加到模型工作区。这些变量对应于使用QR分解块的真实突发矩阵求解的块参数。

numsamples = 1;%样本矩阵数fixed.example.setModelWorkspace(模型,'一种',一种,'B'B,B,'M',m,'n',n,'P',p,......'numsamples',numsamples,'OutputType',OutputType);

模拟模型

Out = SIM(型号);

从输出数据构造解决方案

使用QR分解块求解实际突发矩阵一次一次输出数据一行。输出结果行时,块集验证为真。x的行是按照计算的顺序输出的,最后一行首先,因此您必须重建数据以解释结果。要从输出数据重建矩阵X,请使用辅助功能matrixsolvemodeloutputporay.

x = fixed.example.matrixsolvemodeloutputtoArray(out.x,n,p,numsamples);

验证输出的准确性

要使用QR分解块评估真实突发矩阵求解的准确性,计算相对误差。

action_error = norm(双(a * x-b))/ norm(double(b))%#OK 
相对_误差= 3.5192E-06