用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
成为所有100000X
的集合(这样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中失败的非法语法。