[英]Solve matrix equation in matlab
我有一个类型c = Ax + By
的等式,其中c
, x
和y
是尺寸为50,000 X 1的向量, A
和B
是尺寸为50,000 X 50,000的矩阵。
当c
, x
和y
已知时,Matlab中是否有任何方法可以找到矩阵A
和B
?
我有大约100,000个c
, x
和y
样本。 A
和B
对所有人保持不变。
设X
是你得到的所有100,000 x
s的集合(这样X
的第i
列等于x_i
-th向量)。
以相同的方式,我们可以将Y
和C
分别定义为y
s和c
s的2D集合。
你想要解决的是A
和B
这样的
C = AX + BY
您有2 * 50,000 ^ 2个未知数( A
和B
所有条目)和numel(C)
方程。
因此,如果您拥有的数据向量数为100,000,则您只有一个解决方案(最多取决于线性相关的样本)。 如果您有超过100,000个样本,您可以寻求最小二乘解。
重新书写:
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
,每个矩阵大小为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
现在,每个样本( x_i
, y_i
, c_i
)在未知A
和B
c_i = Ax_i + By_i
形式为c_i = Ax_i + By_i
50,000个方程。 如果样本数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';
检查地面实况模型( 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
哪个足够接近零。 (记住,观察结果是嘈杂的,解决方案是最不正方形的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.