在matlab中求解矩阵方程

use*_*554 3 matlab matrix linear-algebra

我有所述类型的方程c = Ax + By,其中c,xy是维度矢量说50000 X 1,和AB与尺寸50000 X 50000矩阵.

有没有在Matlab任何方式找到矩阵ABc,xy被称为?

我有10万的样本c,xy.A并且B仍然是一样的.

Sha*_*hai 5

让我们X将所有100,000收集x你有S(使得i的列处X等于x_i个向量).
以同样的方式,我们可以分别定义Y和分别Cys和cs的2D集合.

你想解决什么是对AB这样

C = AX + BY
Run Code Online (Sandbox Code Playgroud)

你有2个·50,000 ^ 2未知(的所有条目AB)和numel(C)公式.

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

重新书写:

C = [A B] * [X ; Y]  ==>  [X' Y'] * [A';B'] = C'
Run Code Online (Sandbox Code Playgroud)

所以,我想

[A' ; B'] = pinv( [X' Y'] ) * C'
Run Code Online (Sandbox Code Playgroud)

在matlab中:

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

如我错了请纠正我...

编辑:
这里的维度似乎有点大惊小怪.所以,我会尽量让它变得清晰.

型号:有两个(未知)矩阵AB,每个尺寸的50,000x50,000(总5E9未知).
观察是的三重态矢量:( ,x,y)c每个这样的载体具有50000层的元件(总共为150,000观测点在每个样品).潜在的模型假设是c = Ax + By在该模型中生成观察.
任务:给定n的观察(即n三联矢量 {( ,,x_i )} _ )的任务是发现和.y_ic_ii=1..nAB

现在,将各样品(x_i,y_i,c_i)诱导50000个方程形式的c_i = Ax_i + By_i在未知AB.如果样本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';
Run Code Online (Sandbox Code Playgroud)

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

ABt - [A' ; B']
Run Code Online (Sandbox Code Playgroud)

产量

  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
Run Code Online (Sandbox Code Playgroud)

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