给定y和x的一组值,是否存在解决此问题的标准方法/函数?
对于1D变量y和x,似乎存在,但对于N-D变量y和x,我们将有A是NxN矩阵,B是Nx1向量。
我看到的唯一的解决方案是假设y是一维的,这显然没有帮助。
目前,我唯一的解决方案是进行N^2线性多项式拟合,以获得形式的系数集
y(j(=a_jk x(k(+b_jk
然后通过取B_ jk的平均值得到向量B。我不相信这是这个问题的最佳解决方案。
一种方法是使用最小二乘法找到A和B,以最小化
Q = Sum{ (A*x[i]+B - y[i])'*(A*x[i] + B - y[i])}
(这里'表示转置,我假设你有向量x[0]..x[N-1]和y[0]..y[N-1](
虽然你可以用标准的线性最小二乘解算器做到这一点,但这里有另一种方法:
计算x的平均xbar和y的平均ybar,即
xbar = Sum{ x[i]}/N
ybar = Sum{ y[i]}/N
计算以下矩阵
C = Sum{ (x[i]-xbar)*(x[i]-xbar)'}
D = Sum{ (y[i]-ybar)*(x[i]-xbar)'}
计算A和B
A = D*inv(C)
B = A*xbar-ybar
注意,我们只能在C可逆的情况下计算A。这意味着x[]向量必须跨越它们所在的空间。如果它们不跨越,那么A就不是唯一确定的。
上述配方解决问题的证据并不那么有启发性;如果你想看,请告诉我。
Cris Luengo在评论中确实是正确的。函数mldivide
兼作最小二乘解算器
如果A是具有m~=n的矩形m-by-n矩阵,而B是具有m行的矩阵,则A\B返回方程组A*x=B 的最小二乘解
所以如果你有方程
y == A * x + B
然后你必须首先从两边减去B
,然后应用mldivide
,所以类似
xhat = A(y-B);