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

Matlab样条插值绘图异常求助:仅显示星号线,无法正常生成曲线

Matlab样条插值绘图异常问题解决

问题描述

尝试在Matlab同一张图中绘制不同插值方法的曲线,求解x=5时的y值并用红色星号标记。线性插值绘图正常,但样条插值仅显示一串星号,无法生成正常曲线。

用户原始代码

clc;
clear;
close all;

%variables
y = [101.3 106.6 109.4 114.7 116.9 118.2 123.7];
x = [1.69 3.67 4.37 5.45 5.84 6.05 6.90];

%Linear interpolate to get pressure at v = 5 [m/s]
pressure = interp1(x,y,5)

%Spline interpolate to get pressure at v = 5 [m/s]
xx = 1.69:6.90;
yy = spline(x,y,5)

s = interp1(x,y,xx,"spline");

%linear plot output
hold on;
plot(x,y,'b.-')
plot(5,pressure,'*')
grid on;

%spline plot output
hold on;
plot(x,y,'o')
plot(xx,yy,'*')

原因分析

  1. 样条曲线绘图数据错误:yy = spline(x,y,5)仅计算了x=5处的单个插值结果(标量),而xx是包含多个点的区间数组。执行plot(xx,yy,'*')时,标量yy会被自动广播为和xx长度一致的数组,导致每个xx位置都绘制星号,而非样条曲线。
  2. 冗余绘图操作:重复绘制了原始数据点,且未使用已经计算好的样条插值曲线数据s。

修正后的代码

clc;
clear;
close all;

% 原始数据
y = [101.3 106.6 109.4 114.7 116.9 118.2 123.7];
x = [1.69 3.67 4.37 5.45 5.84 6.05 6.90];

% 线性插值求x=5的y值
pressure_linear = interp1(x,y,5);
% 样条插值求x=5的y值
pressure_spline = spline(x,y,5);

% 生成更密集的x轴区间,让曲线更平滑
xx = linspace(min(x), max(x), 100);
% 计算线性插值曲线
y_linear = interp1(x,y,xx,"linear");
% 计算样条插值曲线
y_spline = interp1(x,y,xx,"spline");

% 绘图
hold on;
plot(x,y,'ko','MarkerFaceColor','k'); % 原始数据点
plot(xx,y_linear,'b-','DisplayName','线性插值'); % 线性插值曲线
plot(xx,y_spline,'r--','DisplayName','样条插值'); % 样条插值曲线
plot(5,pressure_linear,'r*','MarkerSize',12); % 标记线性插值x=5的点
plot(5,pressure_spline,'r*','MarkerSize',12); % 标记样条插值x=5的点
grid on;
legend;
xlabel('x');
ylabel('y');
title('不同插值方法对比');

修正效果说明

修正后会显示:

  • 黑色实心圆点标记的原始数据点
  • 蓝色实线的线性插值曲线
  • 红色虚线的样条插值曲线
  • x=5处用红色大星号标记两个插值结果,曲线平滑正常显示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:22:47