use*_*554 3 matlab matrix linear-algebra
我有所述类型的方程c = Ax + By,其中c,x和y是维度矢量说50000 X 1,和A和B与尺寸50000 X 50000矩阵.
有没有在Matlab任何方式找到矩阵A和B时c,x和y被称为?
我有10万的样本c,x和y.A并且B仍然是一样的.
让我们X将所有100,000收集x你有S(使得i的列处X等于x_i个向量).
以同样的方式,我们可以分别定义Y和分别C为ys和cs的2D集合.
你想解决什么是对A和B这样
C = AX + BY
Run Code Online (Sandbox Code Playgroud)
你有2个·50,000 ^ 2未知(的所有条目A和B)和numel(C)公式.
因此,如果您拥有的数据向量数量为100,000,则您只有一个解决方案(最多取决于线性相关的样本).如果您有超过100,000个样本,您可以寻求最小二乘解.
重新书写:
C = [A B] * [X ; Y] ==> [X' Y'] * [A';B'] = C'
Run Code Online (Sandbox Code Playgroud)
所以,我想
[A' ; B'] = pinv( [X' Y'] ) * C'
Run Code Online (Sandbox Code Playgroud)
在matlab中:
ABt = pinv( [X' Y'] ) * C';
A = ABt(1:50000,:)';
B = ABt(50001:end,:)';
Run Code Online (Sandbox Code Playgroud)
如我错了请纠正我...
编辑:
这里的维度似乎有点大惊小怪.所以,我会尽量让它变得清晰.
型号:有两个(未知)矩阵A和B,每个尺寸的50,000x50,000(总5E9未知).
观察是的三重态矢量:( ,x,y)c每个这样的载体具有50000层的元件(总共为150,000观测点在每个样品).潜在的模型假设是c = Ax + By在该模型中生成观察.
任务:给定n的观察(即n三联矢量 {( ,,x_i )} _ )的任务是发现和.y_ic_ii=1..nAB
现在,将各样品(x_i,y_i,c_i)诱导50000个方程形式的c_i = Ax_i + By_i在未知A和B.如果样本n数大于 100,000,那么有超过50,000*100,000(> 5e9)个方程且系统超出约束.
为了以矩阵形式编写系统,我建议将所有观察结果堆叠到矩阵中:
X尺寸为50,000 x n且矩阵i等于观察到的矩阵x_iY尺寸为50,000 x n且矩阵i等于观察到的矩阵y_iC尺寸为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';
Run Code Online (Sandbox Code Playgroud)
检查地面实况模型(A和B)之间的差异并恢复ABt:
ABt - [A' ; B']
Run Code Online (Sandbox Code Playgroud)
产量
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
Run Code Online (Sandbox Code Playgroud)
哪个足够接近零.(记住,观察结果是嘈杂的,解决方案是最不正方形的).