用matlab求解矩阵方程

用matlab求解矩阵方程,matlab,matrix,linear-algebra,Matlab,Matrix,Linear Algebra,我有一个类型为c=Ax+By的方程,其中c,x和y是维数为50000 x 1的向量,A和B是维数为50000 x 50000的矩阵 当c、x和y已知时,在Matlab中有没有办法找到矩阵A和B 我有大约100000个c、x和y的样本A和B对所有人来说都是一样的。让X成为所有100000X的集合(这样X的i第列等于X\U i-th向量)。 同样,我们可以将Y和C分别定义为Ys和Cs的二维集合 您希望解决的是A和B的问题 C = AX + BY 你有2*50000^2个未知数(A和B的所有条目)和

我有一个类型为
c=Ax+By
的方程,其中
c
x
y
是维数为50000 x 1的向量,
A
B
是维数为50000 x 50000的矩阵

c
x
y
已知时,在Matlab中有没有办法找到矩阵
A
B


我有大约100000个
c
x
y
的样本
A
B
对所有人来说都是一样的。

X
成为所有100000
X
的集合(这样
X
i
第列等于
X\U i
-th向量)。
同样,我们可以将
Y
C
分别定义为
Y
s和
C
s的二维集合

您希望解决的是
A
B
的问题

C = AX + BY
你有2*50000^2个未知数(
A
B
的所有条目)和
numel(C)
方程

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

重写:

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,:)';
如果我错了,请纠正我

编辑:
这里似乎有很多关于维度的小题大做。所以,我会尽量把它弄清楚

型号:有两个(未知)矩阵
A
B
,每个矩阵的大小为50000x50000(总共5e9个未知)。
观测是三组向量:(
x
y
c
)每个这样的向量有50000个元素(每个样本总共有150000个观测点)。基本的模型假设是,在该模型中,观测值由
c=Ax+by
生成。
任务:给定
n
观察值(即
n
三组向量{(
xi
yi
ci
)}任务是发现
A
B

现在,每个样本(
x_i
y_i
c_i
)在未知的
A
B
中导出50000个形式为
c_i=Ax_i+的方程如果样本数
n
大于100000,则存在50000*100000(>5e9)个以上的方程,且系统过约束

为了以矩阵形式编写系统,我建议将所有观测值叠加到矩阵中:

  • 大小为50000 X
    n
    的矩阵
    X
    ,其
    i
    第列等于观察到的
    X\u i
  • 大小为50000 x
    n
    的矩阵
    Y
    ,其
    i
    第列等于观察到的
    Y\u i
  • 大小为50000 x
    n
    的矩阵
    C
    ,其
    i
    第列等于观察到的
    C\u i
利用这些矩阵,我们可以将模型写成:

C=A*X+B*Y

我希望这能把事情弄清楚一点

感谢@Dan和@woodchips的关注和启发性评论

编辑(2):
将以下代码提交到。在这个例子中,我只处理了2个维度,而不是50000个维度,而不是
n=100000
观察值,我确定为
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';
检查地面真值模型(
A
B
)和恢复的
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

接近于零。(请记住,观测值是有噪声的,而解是最小二乘法)。

从数学上讲这可能吗?除非我很蠢,否则听起来你的未知数比方程还多……丹:这是两个未知数,十万个方程。我想应该是这样:)。在我看来好像有500万个未知数?矩阵A和B的每个元素?如果A和B都是矩阵,并且都是未知的,那么它肯定是50亿个未知量(5e9)。这个问题是无法解决的,至少如果你想要一个唯一的答案。@Wli-不。它不是两个未知数。这是两个未知矩阵,每个大小为50000x50000,因此有5e9个未知。@woodchips:(1)请随意编辑
pinv
行,以便语法正确。(2) 更重要的是,如果有超过100000个
x
y
c
的三元组,为什么会有不止一个解呢?你有比方程更多的未知数。它是一个线性系统,所以问题是欠定的,所以有无穷多个解。稍后我会回来修理你的线路。@woodchips-你有未知数2*50000^2=5E9未知数(A
和B中的元素数)。你有
numel(C)
equations=50000(dim)x~100000(样本数)=5E9。如果样本数大于100000,则方程数大于未知数!这是一个过度确定的系统,没有无限多的解决方案。@woodchips-这个主题似乎对你来说非常敏感。你的评论很有攻击性。(1) 我仔细检查了Matlab中的
pinv
语法,我仍然相信我的代码是正确的。(2) 正如我在回答中已经指出的那样,如果有超过100000个样本(每个样本是50000个向量),那么系统就被过度确定了。请查看您的评论,并随时删除那些具有误导性的评论。pinv返回一个简单数组。再乘以另一个数组,它就是一个数组。不能将数组填充到[a';B']这样的表单中。这是在MATLAB中失败的非法语法。