我有一张包含一系列数据的图表,其中有一条趋势线和一个相关的趋势线方程(y = mx + b)
。我还有另一系列数据,但只有 y 值。我想通过查看 y 值在趋势线上的相交位置来找到这组数据的 x 值。如何在 Excel 中执行此操作?
答案1
尽管我无法具体告诉您如何让 Excel 执行此操作,但我可以告诉您一般如何操作。
您首先需要的是每条线上的两个点,因此总共会有四个点。有了这些点的 x 和 y 值,总共会有 8 个值。如果我们将第一条线上的两个点称为点 1 和点 2,将第二条线上的两个点称为点 3 和点 4,最终会得到 x1、y1、x2、y2、x3、y3、x4、y4。现在您可以找到这两条线可能相交的点。我们将交点的 x 坐标称为 px,将交点的 y 坐标称为 py。以下将提供它们:
px = ((x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4)) / ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
py = ((x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4)) / ((x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4));
现在你只需要测试一下这个交点是否真的落在了两条线上。如果两条线都是无限的,那么你就找到了答案。否则,类似下面的方法就可以了:
//check x
if (x3 < x4) {
if (px > x3 && px < x4) {
xInRange1 = true;
}
} else {
if (px > x4 && px < x3) {
xInRange1 = true;
}
}
//check y
if (y3 < y4) {
if (py > y3 && py < y4) {
yInRange1 = true;
}
} else {
if (py > y4 && py < y3) {
yInRange1 = true;
}
}
//same for other line
//check x
if (x1 < x2) {
if (px > x1 && px < x2) {
xInRange2 = true;
}
} else {
if (px > x2 && px < x1) {
xInRange2 = true;
}
}
//check y
if (y1 < y2) {
if (py > y1 && py < y2) {
yInRange2 = true;
}
} else {
if (py > y2 && py < y1) {
yInRange2 = true;
}
}
最后,如果所有四个 InRange 值均为真,则确实存在一个交点。否则,交点位于线端点之外的某个位置。
if (xInRange1 && yInRange2 && xInRange2 && yInRange2) --Hurray, intersection point!