在matlab中求解矩阵方程

时间:2013-01-24 13:10:38

标签: matlab matrix linear-algebra

我有c = Ax + By类型的等式,其中cxy是尺寸为50,000 X 1的矢量,A和{ {1}}是尺寸为50,000 X 50,000的矩阵。

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

我有大约100,000个ycx的样本。 yA对所有人保持不变。

1 个答案:

答案 0 :(得分:5)

X成为您获得的所有100,000 x的集合(这样i的{​​{1}}列等于X - 向量)。
我们也可以将x_iY分别定义为Cy的2D集合。

您希望解决的问题是cA

B

您有2 * 50,000 ^ 2个未知数(C = AX + BY A)和B等式的所有条目。

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

重新写作:

numel(C)

所以,我想

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

在matlab中:

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

如果我错了,请纠正我......

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

型号:有两个(未知)矩阵ABt = pinv( [X' Y'] ) * C'; A = ABt(1:50000,:)'; B = ABt(50001:end,:)'; A,每个矩阵大小为50,000x50,000(总共5e9个未知数)。
观察是向量的三元组 :( Bxy)每个这样的向量有50,000个元素(总共150,000个观察点每个样本)。基本模型假设是在此模型中由c生成观察 任务:给出c = Ax + By观察结果(向量的n三元组 {(nx_i,{ {1}})} _ y_i)任务是揭开c_ii=1..n

现在,每个样本(ABx_i)在未知y_i和{{1}中诱导了c_i形式的50,000个等式}。 如果样本数量c_i = Ax_i + By_i 更大超过100,000,那么有超过50,000 * 100,000(> 5e9)个等式,系统过度约束

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

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

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

C = A * X + B * Y

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

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

编辑(2):
将以下代码提交给octave。在此示例中,我只使用了2个而不是n次观察而不是i来确定c_i

n=100,000

检查地面实况模型(n=100n = 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'; )之间的差异并恢复A

B

产量

ABt

足够接近于零。 (记住,观察结果是嘈杂的,解决方案是最小二乘的。)