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

如何在Matlab中获取多条多项式拟合曲线的精确峰值坐标

解决多项式拟合曲线精确峰值提取与展示问题

我来帮你搞定这个需求!要获取拟合曲线的精确峰值坐标(不是原始数据的最大值),我们可以通过多项式求导找临界点、筛选最大值点的方式实现,同时支持灵活调整拟合阶数。下面是修改后的完整MATLAB代码,附带详细注释:

% 原始数据定义
x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; 
z1 = [1, 4, 9, 16, 25, 36, 49, 36, 25, 16, 8, 1]; 
z2 = [1, 5, 10, 17, 26, 38, 26, 17, 10, 9, 7, 1]; 
z3 = [1, 8, 18, 30, 40, 30, 18, 8, 7, 4, 3, 1]; 
z_data = {z1, z2, z3}; % 把数据打包成cell数组,方便循环处理
marker_types = {'*', 's', 'd'}; % 原始数据标记类型
fit_colors = {'b', 'g', 'r'}; % 拟合曲线颜色

% 可调整的拟合阶数
fit_order = 5; 

figure('Position', [100, 100, 800, 600]); % 创建画布
hold on; grid on;
xlabel('X轴'); ylabel('Y轴'); title('多项式拟合曲线及峰值点');

% 循环处理每条数据
for i = 1:length(z_data)
    z = z_data{i};
    % 1. 多项式拟合
    p = polyfit(x, z, fit_order);
    z_fit = polyval(p, x);
    
    % 2. 绘制原始数据和拟合曲线
    plot(x, z, marker_types{i}, 'Color', fit_colors{i}, 'DisplayName', sprintf('原始数据%d', i));
    plot(x, z_fit, '-', 'Color', fit_colors{i}, 'DisplayName', sprintf('拟合曲线%d', i));
    
    % 3. 提取拟合曲线的精确峰值
    dp = polyder(p); % 对拟合多项式求导
    critical_points = roots(dp); % 找到导数为0的临界点(可能包含复数)
    critical_points = critical_points(imag(critical_points) == 0); % 只保留实数临界点
    critical_points = critical_points(critical_points >= min(x) & critical_points <= max(x)); % 筛选在原始x范围内的点
    
    if ~isempty(critical_points)
        % 计算临界点对应的拟合函数值
        critical_values = polyval(p, critical_points);
        % 找到最大值对应的索引
        [max_val, max_idx] = max(critical_values);
        peak_x = critical_points(max_idx);
        peak_y = max_val;
        
        % 4. 绘制峰值点并显示坐标
        plot(peak_x, peak_y, 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 10, 'DisplayName', sprintf('峰值点%d', i));
        text(peak_x + 0.2, peak_y + 1, sprintf('(%.2f, %.2f)', peak_x, peak_y), 'Color', fit_colors{i}, 'FontSize', 10);
    end
end

legend('Location', 'best');
hold off;

关键步骤说明:

  • 打包数据循环处理:把三组z数据放进cell数组,避免重复写三次相同的拟合、绘图代码,更易维护。
  • 多项式求导找临界点:用polyder生成拟合多项式的导数,再通过roots找到导数为0的点,这些点是拟合曲线的极值候选点。
  • 筛选有效临界点:剔除复数解和超出原始x范围的点,确保只关注我们关心的区间内的极值。
  • 提取峰值并可视化:计算所有有效临界点的拟合值,找到最大值对应的坐标,用醒目的黄色实心圆点标注,同时在旁边显示精确坐标值。

你只需要修改fit_order变量,就能轻松调整多项式拟合的阶数,代码会自动重新计算并展示对应拟合曲线的峰值点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:37:41