在 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 其中 x 和 w 是二维向量,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 会更改其符号,因此您可以通过符号更改来注册信号图与线的交点。
让我们想象一下,一方面我有一个等式
y = 5x + 3
另一方面,我有两个相同大小的向量 - 一个代表 x 值,另一个代表 y 值(只是随机值,不幸的是不是函数,否则这会很简单 - 就像信号)。如何从这两个向量中找到最接近或几乎符合方程式的一对值 x-y?用图形表示我正在寻找方程线与信号图相交的点。
我要回答的问题是:给定一组点 D = {(x1,y1), (x2,y2), ..., (xN,yN)},找到 D 中的点最接近直线 y=5x+3.
解法:一条线可以描述为满足0=w的所有x ' x + b 其中 x 和 w 是二维向量,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 会更改其符号,因此您可以通过符号更改来注册信号图与线的交点。