插值错误,绘图功能在运行时不会生成正确的行

问题描述 投票:-1回答:1

我试图得到一个插图程序的图形(基本上它需要一个测试功能,并使用interpolation method创建线)

clear all;
close all; 
clc;

x1= [-1 0.75 -0.5 -0.25 0 0.25 0.5 0.75 1];
x2=-1:1001:1;

y1=1./(1+25.*x1.^2);
y2=1./(1+25.*x2.^2);
figure(777)
title('Figure 777')
for loop=1:1:6

    subplot(6,2,loop);
    plot(x2,y2,'linewidth',2);
    hold on
    plot(x1,y1,'r.','markersize',25);
    hold on
end
%%%(A)
[p1,s1,u1] = polyfit(x1,y1,4);
Y1=polyval(p1, x2, s1, u1);
subplot (6,2,1)
plot(x2,Y1,'b','linewidth',6);

%%%(B)
[p2, s2, u2] = polyfit(x1,y1,8);
Y2 = polyval(p2, x2, s2, u2);
subplot(6,2,1)
plot(x2,Y2, 'b', 'linewidth', 6);

%%%(C)
Y3 = interp1(x1, y1, x2, 'linear');
subplot(6,3,1)
plot(x2, Y3, 'b', 'linewidth', 6);

%%%(D)
Y4 = interp1(x1,y1,x2, 'nearest');
subplot(6,4,1)
plot(x2, Y4, 'b', 'linewidth', 6);

%%%(E)
Y5 = interp1(x1,y1,x2, 'spline');
subplot(6,5,1)
plot(x2, Y5, 'b', 'linewidth', 6);

%%%(F)%%%(This method does not exist for Matlab R2017a)
Y6 = interp1(x1,y1,x2, 'makima');
subplot(6,6,1)
plot(x2, Y6, 'b', 'linewidth', 6);

但是,运行程序时没有出现任何行。只有点。此外,我收到这些错误:

警告:多项式条件严重。添加具有不同X值的点或减少多项式的次数。在polyfit (line 73)HwSixTwo (line 27)

使用griddedInterpolant时出错网格向量必须包含唯一的点。

interp1(第149行)F = griddedInterpolant(X,V,method);出错

HwSixTwo(第33行)Y3 = interp1(x1, y1, x2, 'linear');出错

matlab plot interpolation
1个回答
3
投票

那么一个肯定不会产生预期结果的错误就在这里:

x2=-1:1001:1;

我假设你打算在-1到1之间均匀间隔创建1001个点。这段代码不是这样做的。中间数字指定连续数字之间的间距。 1001没有意义,它只生成一个-1的值。

linspace函数替换你的代码:

x2 = linspace(-1, 1, 1001);

此外,你在x1中的一个值中错过了一个减号 - 0.75:

x1= [-1 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 1];
    %    ^^^

正如克里斯指出的那样,你的x值必须是单调的,或者在一个方向上增加/减少。

© www.soinside.com 2019 - 2024. All rights reserved.