繁体   English   中英

在matlab中求解矩阵方程

[英]Solve matrix equation in matlab

我有一个类型c = Ax + By的等式,其中cxy是尺寸为50,000 X 1的向量, AB是尺寸为50,000 X 50,000的矩阵。

cxy已知时,Matlab中是否有任何方法可以找到矩阵AB

我有大约100,000个cxy样本。 AB对所有人保持不变。

X是你得到的所有100,000 x s的集合(这样X的第i列等于x_i -th向量)。
以相同的方式,我们可以将YC分别定义为y s和c s的2D集合。

你想要解决的是AB这样的

C = AX + BY

您有2 * 50,000 ^ 2个未知数( AB所有条目)和numel(C)方程。

因此,如果您拥有的数据向量数为100,000,则您只有一个解决方案(最多取决于线性相关的样本)。 如果您有超过100,000个样本,您可以寻求最小二乘解。

重新书写:

C = [A B] * [X ; Y]  ==>  [X' Y'] * [A';B'] = C'

所以,我想

[A' ; B'] = pinv( [X' Y'] ) * C'

在matlab中:

ABt = pinv( [X' Y'] ) * C';
A = ABt(1:50000,:)';
B = ABt(50001:end,:)';

如我错了请纠正我...

编辑:
这里似乎有很大的维度。 所以,我会尽量让它变得清晰。

模型:有两个(未知)矩阵AB ,每个矩阵大小为50,000x50,000(总共5e9个未知数)。
观察是向量的三元组:( xyc )每个这样的载体具有50,000个元素( 每个样品总共150,000个观察点)。 基础模型假设是在该模型中由c = Ax + By生成观测值。
任务:给定n观测值(即n三元组的向量 {( x_iy_ic_i )} _ i=1..n ),任务是揭示AB

现在,每个样本( x_iy_ic_i )在未知AB c_i = Ax_i + By_i形式为c_i = Ax_i + By_i 50,000个方程。 如果样本数n 大于 100,000,则存在超过50,000 * 100,000(> 5e9)个方程,并且系统超出约束

为了以矩阵形式编写系统,我建议将所有观察结果堆叠到矩阵中:

  • 矩阵X的大小为50,000 x n ,其第i列等于观察到的x_i
  • 矩阵Y的大小为50,000 x n ,其第i列等于观察到的y_i
  • 矩阵C的大小为50,000 x n ,其第i列等于观察到的c_i

使用这些矩阵,我们可以将模型编写为:

C = A * X + B * Y.

我希望这可以解决一些问题。

感谢@Dan和@woodchips的兴趣和启发性评论。

编辑(2):
提交以下代码到八度 在这个例子而不是50,000维度我只使用2,而不是n=100,000观察我确定n=100

n = 100;
A = rand(2,2);
B = rand(2,2);
X = rand(2,n);
Y = rand(2,n);
C = A*X + B*Y + .001*randn(size(X)); % adding noise to observations 
ABt = pinv( [ X' Y'] ) * C';

检查地面实况模型( AB )与恢复的ABt之间的差异:

ABt - [A' ; B']

产量

  ans =

   5.8457e-05   3.0483e-04
   1.1023e-04   6.1842e-05
  -1.2277e-04  -3.2866e-04
  -3.1930e-05  -5.2149e-05

哪个足够接近零。 (记住,观察结果是嘈杂的,解决方案是最不正方形的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM