You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MATLAB中如何确定两条曲线图的交点并按规则标注?

MATLAB 折线交点识别与差异化标注实现

直接给出可运行的完整实现代码,适配你描述的需求逻辑:

% 定义原始数据
a = [1, 3, 5, 3, 1];
b = [0, 4, 2, 4, 6];

% 绘制基础折线图,指定颜色避免默认配色歧义
plot(a, 'b', 'LineWidth', 1.5)
hold on
plot(b, 'r', 'LineWidth', 1.5)

% 计算蓝色曲线a与红色曲线b的差值
diff_ab = a - b;
n = length(diff_ab);

% 遍历所有相邻采样点判断是否存在交叉
for i = 1:n-1
    % 相邻点差值符号相反代表两条线在该区间内交叉
    if prod(diff_ab(i:i+1)) < 0
        % 线性插值计算交点精确坐标
        x1 = i; x2 = i+1;
        a1 = a(i); a2 = a(i+1);
        x_cross = x1 + (0 - diff_ab(i)) * (x2 - x1) / (diff_ab(i+1) - diff_ab(i));
        y_cross = interp1([x1,x2],[a1,a2],x_cross);
        
        % 判断穿越方向
        if diff_ab(i) > 0 && diff_ab(i+1) < 0
            % 红色曲线向上穿越蓝色曲线,标注实心红点
            plot(x_cross, y_cross, 'ro', 'MarkerFaceColor', 'r', 'MarkerSize', 8)
        elseif diff_ab(i) < 0 && diff_ab(i+1) > 0
            % 红色曲线向下穿越蓝色曲线,标注空心红点
            plot(x_cross, y_cross, 'ro', 'MarkerSize', 8)
        end
    end
end

hold off
grid on
legend('蓝色曲线a','红色曲线b','向上穿越交点','向下穿越交点','Location','best')

补充说明

  • 代码默认处理交点在两个采样点之间的场景,如果两条曲线正好在采样点位置重合相交,你可以额外增加diff_ab(i) == 0的分支,结合前后差值的符号判断穿越方向即可。
  • 运行你提供的示例数据,最终会得到3个交点,分别对应2次向上穿越、1次向下穿越,标注效果符合需求。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:15:04