作业帮 > 数学 > 作业

如何求解矩阵方程的最接近解(算法,C库均可)

来源:学生作业帮 编辑:大师作文网作业帮 分类:数学作业 时间:2024/11/12 23:34:55
如何求解矩阵方程的最接近解(算法,C库均可)
我有一个矩阵方程A=BC,其中A是一个3X1矩阵(3阶向量),B是一个3X4矩阵,C是4X1矩阵(4阶向量),其中A和C有许多已知,B是未知的,要解出B的所有参数.请问应该如何求解B的最接近的解(描述一下算法,或者提供可以解这个问题的算法的名称,或者已经存在的C++库等等)?
(其中A和C有很多,比如A1=B*C1, A2=B*C2,..., 但是有一定误差,所以不能解出一个B就停下,所以需要是能随着A和C的对应数量能提升B的解的精确度,比如有20对A和C求解出的B,与200对A和C解出的B的精确度应该是后者更为精确)
高分求助,能帮忙解决问题的追加加分,谢谢~~~
如何求解矩阵方程的最接近解(算法,C库均可)
本人学过点计算数学,跟你的问题有点相像,但是这个只是理论,不知道实际能不能解决.当然了你这个问题应该叫反问题,如果你不限定条件,会有无数组解.我只是提供一种解法,如果有实际背景会有约束条件.
利用矩阵的拉直(下面设为vec(.),一般是按列拉直,就是把第一列第二列.,按顺序放到一个向量里),可以将矩阵方程变为向量方程.下面矩阵大写,向量小写
a(3*1)=B(3*4)c(4*1)其中ai,ci,i=1...N.那么按照i列放第i个向量成矩阵A=(ai)3*N,C=(ci)4*N.方程就变成A(3*N)=B(3*4)C(4*N).一般我会把未知量写右面,所以转置这个矩阵方程,还用原来的符号变成C(N*4)B(4*3)=A(N*3).拉直有个性质:vec(ABC)=(A⊙C)vec(B)
所以那个方程就变成(C(N*4)⊙I(3*3))(3N*12)vec(B)(12*1)=vec(A)(3N*1),这是一个向量方程矩阵的规模是:3N*12*12*1=3N*1,一般都是3N>>12,所以要解个超定方程,一般我用最小二乘法.这个你会吧.推导就不说了,直接上方程
(C⊙I)'(C⊙I)vec(B)=(C⊙I)'vec(A)
这种方程求解规模比较大,如果有特殊结构可以快速计算,比如(C⊙I)是什么结构我就忘了,可以用fft2算.当年用的是matlab,应该可以算出来一组解.对于N=20,200..会更精确我不敢保证.这个相当于拟合,你认为在平面上拟合直线会因为点多而收敛到比较好的结果吗,估计每次结果都不太一样.废话多了,大致步骤如下:
1.用矩阵拉直的性质,把矩阵方程(求B)化为向量方程(求vec(B‘)):
(C’⊙I)vec(B‘)=vec(A’)
2.用最小二乘法求那个向量方程得到结果,即求下面这个方程:(C⊙I)'(C⊙I)vec(B)=(C⊙I)'vec(A)
还是不知道讲明白没,具体细节可以hi我,工作日白天都在.