此示例显示如何使用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