我正在尝试为我的插值程序制作一个图形(基本上它需要一个测试函数并使用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');
答案 0 :(得分: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
值必须单调或在一个方向上增加/减少。