在Matlab中求解矩阵方程 [英] Solve matrix equation in matlab
问题描述
我有一个c = Ax + By
类型的方程,其中c
,x
和y
是维数为50,000 X 1的向量,而A
和B
是维数为50,000 X 50,000的矩阵.
I have an equation of the type c = Ax + By
where c
, x
and y
are vectors of dimensions say 50,000 X 1, and A
and B
are matrices with dimensions 50,000 X 50,000.
在已知c
,x
和y
的情况下,Matlab中是否可以找到矩阵A
和B
?
Is there any way in Matlab to find matrices A
and B
when c
, x
and y
are known?
我有大约100,000个c
,x
和y
样本. A
和B
都保持不变.
I have about 100,000 samples of c
, x
, and y
. A
and B
remain the same for all.
推荐答案
让X
为您获得的所有100,000个x
的集合(这样,X
的第i
列等于x_i
-th向量).
以相同的方式,我们可以将Y
和C
分别定义为y
s和c
s的2D集合.
Let X
be the collection of all 100,000 x
s you got (such that the i
-th column of X
equals the x_i
-th vector).
In the same manner we can define Y
and C
as 2D collections of y
s and c
s respectively.
您要解决的是A
和B
这样的
C = AX + BY
您有2 * 50,000 ^ 2个未知数(A
和B
的所有条目)和numel(C)
方程.
You have 2 * 50,000^2 unknowns (all entries of A
and B
) and numel(C)
equations.
因此,如果您拥有的数据向量数量为100,000,则您只有一个解(最多取决于线性样本).如果样本数量超过100,000,则可以寻求最小二乘解.
So, if the number of data vectors you have is 100,000 you have a single solution (up to linearly dependent samples). If you have more than 100,000 samples you may seek for a least-squares solution.
重写:
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,:)';
如果我错了,请纠正我...
Correct me if I'm wrong...
似乎在这里围绕维数大惊小怪.因此,我将尝试使其尽可能清晰.
It seems like there is quite a fuss around dimensionality here. So, I'll try and make it as clear as possible.
模型:有两个(未知)矩阵A
和B
,每个矩阵的大小为50,000x50,000(总共5e9个未知数).
观察结果是个向量的三元组:(x
,y
,c
)每个这样的向量都有50,000个元素(每个样本 总共有150,000个观察点) ).模型的基本假设是,在此模型中,c = Ax + By
生成了一个观测值.
任务:给出了n
个观测值(即个向量的n
个三元组 {(x_i
,y_i
,c_i
)} _ i=1..n
)的任务是发现A
和B
.
Model: There are two (unknown) matrices A
and B
, each of size 50,000x50,000 (total 5e9 unknowns).
An observation is a triplet of vectors: (x
,y
,c
) each such vector has 50,000 elements (total of 150,000 observed points at each sample). The underlying model assumption is that an observation is generated by c = Ax + By
in this model.
The task: given n
observations (that is n
triplets of vectors { (x_i
, y_i
, c_i
) }_i=1..n
) the task is to uncover A
and B
.
现在,每个样本(x_i
,y_i
,c_i
)在未知的A
和B
中产生50,000个形式为c_i = Ax_i + By_i
的方程. 如果样本n
的数量大于超过100,000,则表示方程组超过50,000 * 100,000(> 5e9),并且系统超出约束.
Now, each sample (x_i
,y_i
,c_i
) induces 50,000 equations of the form c_i = Ax_i + By_i
in the unknown A
and B
. If the number of samples n
is greater than 100,000, then there are more than 50,000 * 100,000 ( > 5e9 ) equations and the system is over constraint.
要以矩阵形式编写系统,我建议将所有观察结果堆叠到矩阵中:
To write the system in a matrix form I proposed to stack all observations into matrices:
- 第
i
列的大小为50,000 xn
的矩阵X
等于观察到的x_i
- 第
i
列的大小为50,000 xn
的矩阵Y
等于观察到的y_i
- 第
i
列的大小为50,000 xn
的矩阵C
等于观察到的c_i
- A matrix
X
of size 50,000 xn
with itsi
-th column equals to observedx_i
- A matrix
Y
of size 50,000 xn
with itsi
-th column equals to observedy_i
- A matrix
C
of size 50,000 xn
with itsi
-th column equals to observedc_i
有了这些矩阵,我们可以将模型编写为:
With these matrices we can write the model as:
C = A * X + B * Y
C = A*X + B*Y
我希望这可以使事情变得清晰起来.
I hope this clears things up a bit.
感谢@Dan和@woodchips对您的关注和启发性的评论.
Thank you @Dan and @woodchips for your interest and enlightening comments.
编辑(2):
将以下代码提交到八度.在此示例中,我只使用2个而不是50,000个维,而不是我为n=100
确定的n=100,000
个观测值:
EDIT (2):
Submitting the following code to octave. In this example instead of 50,000 dimension I work with only 2, instead of n=100,000
observations I settled for 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
之间的差异:
Checking the difference between ground truth model (A
and B
) and recovered 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
哪个足够接近零. (请记住,观察结果很嘈杂,解决方案是最小二乘法).
Which is close enough to zero. (remember, the observations were noisy and solution is a least-square one).
这篇关于在Matlab中求解矩阵方程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!