У меня есть график с одной серией данных, с линией тренда и соответствующим уравнением линии тренда (y = mx + b) . У меня есть другая серия данных, но только из значений у. Я хочу найти значения x этого набора данных, увидев, где значение y будет пересекаться на линии тренда. Как мне сделать это в Excel?

1 ответ1

-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 имеют значение true, то у вас есть точка пересечения. В противном случае существует точка пересечения, которая находится где-то за пределами конечных точек линий.

if (xInRange1 && yInRange2 && xInRange2 && yInRange2) --Hurray, intersection point!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .