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

时间:2017-12-10 19:44:11

标签: matlab math plot equation

让我们想象一方面我有一个像

这样的等式
y = 5x + 3

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

2 个答案:

答案 0 :(得分:1)

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

解决方案:一行可以描述为 x ,其满足0 = w ' x + b其中 x w 是2D矢量,b是标量。这是一个有用的表示,因为任何点 y 与此线的距离与| w'单调相关。 y + b |。

在您的情况下,我们可以将等式重写为

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);

示例图

enter image description here

注意此方法也可以简单地推广到N维空间,其中0 = w' x + b描述N-D空间中的超平面。

答案 1 :(得分:0)

以表格

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

或一般情况下:

A * x + B * y + C = 0

然后签名距离(乘以L=Sqrt(A*A+B*B))从此行到点(px, py)

D = A * px + B * py + C

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

另请注意,当点移动到相对于线的另一半平面时,D会改变其符号,因此您可以逐行更改信号图交叉点。