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

