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

如何在MatLab中线性扩展绘图并查找y最大值50%对应的x值

问题描述

我有一组包含x、y值的数据集,绘制出的图像如下:
原始曲线
我需要将图像的下降段近似为线性并外推,把y的最大值(此处为404)降至其50%(即202),同时找到该50%值对应的x值,最终效果如下:
目标效果
目前我的MatLab代码如下:

Array=csvread("tek00008.csv");
col1=Array(:,1);
col2=Array(:,2);
plot(col1,col2);
grid on;
hold on;
解决方案

以下是实现需求的完整MatLab代码,包含线性拟合、外推计算和结果可视化:

% 读取数据集
Array = csvread("tek00008.csv");
x = Array(:,1);
y = Array(:,2);

% 绘制原始曲线
plot(x, y);
grid on;
hold on;

% 计算目标y值(最大值的50%)
max_y = max(y);
target_y = max_y * 0.5;

% 定位y最大值的位置,提取下降段数据
max_idx = find(y == max_y, 1, 'last'); % 取最后一个最大值点,规避平台段干扰
x_descend = x(max_idx:end);
y_descend = y(max_idx:end);

% 对下降段进行线性拟合
p = polyfit(x_descend, y_descend, 1); % p(1)为斜率,p(2)为截距

% 计算目标y值对应的x值
target_x = (target_y - p(2)) / p(1);

% 生成线性外推线的坐标点
fit_x = linspace(x_descend(1), target_x, 100);
fit_y = polyval(p, fit_x);

% 绘制外推线和目标点
plot(fit_x, fit_y, 'r--', 'LineWidth', 1.5);
plot(target_x, target_y, 'bo', 'MarkerSize', 8, 'DisplayName', ['y=202 对应x: ', num2str(target_x, 4)]);

% 添加图表标注
legend('原始曲线', '线性外推线', '目标点');
xlabel('X');
ylabel('Y');
title('曲线线性外推至Y最大值的50%');

hold off;

关键步骤说明

  • 定位下降段:通过find(y == max_y, 1, 'last')找到最后一个y最大值的位置,确保只提取后续的下降趋势数据,避免平台段干扰拟合结果;
  • 线性拟合:使用polyfit对下降段做一次多项式拟合,得到直线方程参数;
  • 外推计算:通过直线方程反推得到y=202对应的x值;
  • 可视化:用红色虚线绘制外推线,蓝色圆点标记目标点,清晰展示结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:02:13