如何在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
相关产品推荐
相关产品推荐

