这不是一个编程问题,这是一个数学问题.你想找到c这样的
Var(A - c * B)
Run Code Online (Sandbox Code Playgroud)
最小化.但
Var(A - c*B) = Var(A) - 2 * c * Cov(A,B) + c^2 * Var(B)
Run Code Online (Sandbox Code Playgroud)
区分和设置为零
-2 * Cov(A,B) + 2 * c * Var(B) = 0
Run Code Online (Sandbox Code Playgroud)
这意味着
c = Cov(A,B) / Var(B)
Run Code Online (Sandbox Code Playgroud)
你可以在Matlab中实现这一点
M = cov(A, B); # Now M = [varA, covAB; covAB, varB]
covAB = M(1,2);
varB = M(2,2);
c = covAB / varB;
Run Code Online (Sandbox Code Playgroud)