在 Matlab 中从线性方程的给定向量中找到最接近的解

Find closest solution from a given vector for a linear equation in Matlab

让我们想象一下,一方面我有一个等式

y = 5x + 3

另一方面,我有两个相同大小的向量 - 一个代表 x 值,另一个代表 y 值(只是随机值,不幸的是不是函数,否则这会很简单 - 就像信号)。如何从这两个向量中找到最接近或几乎符合方程式的一对值 x-y?用图形表示我正在寻找方程线与信号图相交的点。

我要回答的问题是:给定一组点 D = {(x1,y1), (x2,y2), ..., (xN,yN)},找到 D 中的点最接近直线 y=5x+3.

解法:一条线可以描述为满足0=w的所有x ' x + b 其中 xw 是二维向量,b 是标量。这是一个有用的表示,因为任何点 y 到这条线的距离与 |w' y + b|.[=13 单调相关=]

对于您的情况,我们可以将等式重写为

0 = 5x - y + 3
  = [5,-1].[x;y] + 3

所以 w = [5;-1]; b = 3.

这促使我们找到最近的点如下

% 10 random data points (column vector format)
D = rand(2,10)*10-5;

% line parameters
w = [5;-1];
b = 3;

% get the index of the closest point
d = abs(w'*D + b);
[~,idx] = min(d);

示例图

注意 这种方法也可以泛化到 N 维空间,其中 0 = w'x + b 描述了 N 维空间中的超平面.

在表格

中重写等式y = 5x + 3
5 * x - y + 3  = 0

或者一般来说:

A * x + B * y + C = 0

那么从这条线到点(px, py)的有符号距离(乘以L=Sqrt(A*A+B*B))是

D = A * px + B * py + C

要比较与给定线的相对距离,您可以忽略 L 尺度,只比较所有点的 D 的绝对值(对于绝对值,将所有方程系数除以 L)

另请注意,当点相对于线进入另一半平面时,D 会更改其符号,因此您可以通过符号更改来注册信号图与线的交点。