matlab:找到减少两个系列之间标准差的乘数

Sam*_*att 0 matlab

我想找到C的值,使得使用matlab(A和B是向量),AB*C的标准偏差最小,其中C将是标量.有任何想法吗 ?

Chr*_*lor 6

这不是一个编程问题,这是一个数学问题.你想找到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)