我有一个类型的方程,c = Ax + By
其中和是尺寸为 50,000 X 1 的向量,c
并且是尺寸为 50,000 X 50,000 的矩阵。x
y
A
B
Matlab 中是否有任何方法可以找到矩阵A
以及B
何时c
和是已知的x
?y
我有大约 100,000 个c
、x
和的样本y
。A
并B
保持不变。
我有一个类型的方程,c = Ax + By
其中和是尺寸为 50,000 X 1 的向量,c
并且是尺寸为 50,000 X 50,000 的矩阵。x
y
A
B
Matlab 中是否有任何方法可以找到矩阵A
以及B
何时c
和是已知的x
?y
我有大约 100,000 个c
、x
和的样本y
。A
并B
保持不变。
让X
成为你得到的所有 100,000 s 的集合x
(使得i
-th 列X
等于x_i
-th 向量)。
以同样的方式,我们可以分别将 和 定义Y
为s 和s 的C
2D 集合。y
c
你想解决的是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
, ) 每个这样的向量有 50,000 个元素(每个样本c
总共有 150,000 个观察点)。基本模型假设是在此模型中生成观察值。任务:给定观察值(即向量{ ( , , ) }_的三元组),任务是发现和。c = Ax + By
n
n
x_i
y_i
c_i
i=1..n
A
B
现在,每个样本 ( x_i
, y_i
, c_i
) 导出 50,000 个形式c_i = Ax_i + By_i
为未知A
和的方程B
。如果样本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):
将以下代码提交给octave。在这个例子中,我只使用 2 个维度而不是 50,000 个维度,而不是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
这足够接近于零。(请记住,观察结果很嘈杂,解决方案是最小二乘解决方案)。