左矩阵除以向量

时间:2019-01-10 13:37:47

标签: matlab matrix vector solver backslash

Matlab如何明确解决def timeit(func, *args, **kwargs): a = time.clock() func(*args, **kwargs) b = time.clock() print(b - a) 中最右边的方程,特别是c1

我很清楚当您使用矩阵(例如A \ b(其中A是矩阵,b是列向量),但是当对具有相等行的两个向量使用反斜杠时会发生什么?

问题:

((x-1)\y)

1 个答案:

答案 0 :(得分:3)

您正在做[0;1;2]\[1;1;1]。本质上x=0.6

的最小二乘解
[0;1;2]*x=[1;1;1]

您来自documentation的情况如下:

  

如果A是m〜= n的矩形m×n矩阵,而B是m行的矩阵,则 A \ B将最小二乘解返回到方程A * x的系统= B

(具体来说,您有m=3, n=1)。

A = (1:3).' - 1; % = [0;1;2]
B = ones(3,1);   % = [1;1;1]

x = A\B; % = 0.6

从代数上看,很容易看出这是最小二乘最小化的解决方案

% Calculate least squares
leastSquares = sum( ((A*x) - B).^2 )
             = sum( ([0;1;2]*x - [1;1;1]).^2 )
             = sum( [-1; x-1; 2x-1].^2 )
             = 1 + (x-1)^2 + (2x-1)^2
             = 1 + x^2 - 2*x + 1 + 4*x^2 - 4*x + 1
             = 5*x^2 - 6*x + 3
% Minimum least squares -> derivative = 0
d(leastSquares)/dx = 10*x - 6 = 0
              10*x = 6
                 x = 0.6

毫无疑问,MATLAB使用更复杂的算法得出相同的结论,但这以相当简单的方式对数学进行了布局。


通过实验可以看到x的各种值,没有更好的解决方案……0.6给出最小的误差:

sum( ([0;1;2]*x - [1;1;1]).^2 )