我有c = Ax + By
类型的等式,其中c
,x
和y
是尺寸为50,000 X 1的矢量,A
和{ {1}}是尺寸为50,000 X 50,000的矩阵。
当B
,A
和B
已知时,Matlab中是否有任何方法可以找到矩阵c
和x
?
我有大约100,000个y
,c
和x
的样本。 y
和A
对所有人保持不变。
答案 0 :(得分:5)
让X
成为您获得的所有100,000 x
的集合(这样i
的{{1}}列等于X
- 向量)。
我们也可以将x_i
和Y
分别定义为C
和y
的2D集合。
您希望解决的问题是c
和A
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个未知数)。
观察是向量的三元组 :( B
,x
,y
)每个这样的向量有50,000个元素(总共150,000个观察点每个样本)。基本模型假设是在此模型中由c
生成观察
任务:给出c = Ax + By
观察结果(向量的n
三元组 {(n
,x_i
,{ {1}})} _ y_i
)任务是揭开c_i
和i=1..n
。
现在,每个样本(A
,B
,x_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=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
足够接近于零。 (记住,观察结果是嘈杂的,解决方案是最小二乘的。)