【问题标题】:Left matrix divide with vectors左矩阵除以向量
【发布时间】:2019-01-10 13:37:46
【问题描述】:

Matlab 如何明确求解c1 中最右边的方程,具体来说是((x-1)\y)

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

问题:

x = (1:3)';
y = ones(3,1);
c1 = ((x-1)\y) % why does this =0.6?

【问题讨论】:

  • 我觉得the documetstion很清楚。只需将 N 向量视为 N×1 矩阵。
  • 我没有完全看到它。您是否可以提供任何数学方程式或步骤来阐明答案如何等于 0,6?

标签: matlab matrix vector solver backslash


【解决方案1】:

你正在做[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 ) 

【讨论】:

  • 优秀的答案。另外:x = linspace(0,1,200); plot(x, sum( ([0;1;2]*x - [1;1;1]).^2 ))
  • 感谢@Cris,这是以图形方式展示最终想法的好方法。
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2018-06-13
相关资源
最近更新 更多