matlab - Matlab poly() 函数的奇怪行为
问题描述
我目前正在处理有关查找给定数据点的拉格朗日插值的 matlab 代码。
这是我的代码:
X=1998:1:2008;
Y=[21300 23057 24441 25917 27204 28564 29847 31200 32994 34800 36030];
plot(X,Y,'-o'); %intuitive interpolation
hold on
I=zeros(1,length(X));
for k=1:1:length(X)
r=X;
r(k)=[];
p=poly(r);
m=polyval(p,X(k));
m=1/m;
p=p*m;
p=p*Y(k);
I=I+p;
end
t=1997:0.001:2010;
funcval=polyval(I,t);
plot(t,funcval)
hold on
如您所见,(X,Y) 的点是指定的数据点,I 是插值多项式的多项式系数向量。此代码运行良好,直到有 5 个点
X=1998:1:2002
Y=[21300 23057 24441 25917 27204]
但是当添加更多数据点时,p=poly(r) 突然产生奇怪的输出,这导致我们得到具有复根的多项式。例如,当有 6 个数据点时
X=1998:1:2003;
Y=[21300 23057 24441 25917 27204 28564];
plot(X,Y,'-o'); %intuitive interpolation
hold on
I=zeros(1,length(X));
for k=1:1:length(X)
r=X;
r(k)=[];
p=poly(r);
m=polyval(p,X(k));
m=1/m;
p=p*m;
p=p*Y(k);
I=I+p;
end
n=roots(I);
n 必须是根向量,它是
2006.55014379998 + 0.00000000000000i
2002.53696731502 + 5.24636347412357i
2002.53696731502 - 5.24636347412357i
1995.63481881447 + 3.41460653963521i
1995.63481881447 - 3.41460653963521i
这肯定不是预期的结果
[1998 1999 2000 2001 2002 2003]
我怀疑这可能与溢出错误有关,但不确定。
有没有人遇到过类似的情况?任何建议都会很有帮助。
谢谢。
解决方案
推荐阅读
- html - 非登录状态时不会出现来自静态文件夹的图像 [Spring MVC & Thymeleaf]
- matrix - 从基本矩阵解释相机矩阵?
- laravel - Guzzle POST 请求总是返回 400 Bad Request
- python - Python Pygame 按两个方向键和另一个键射击没有子弹
- php - 使用 symfony 进程运行 mjml cli
- python - 如何在 PySpark 中进行聚合和转置?
- android - 有时getcount函数在firebase android中返回0
- bash - 无法通过 bash osascript shell 脚本传递名称中带有空格的变量
- audio - 如何让 Safari 播放本地音频资源?
- python - 如何将文件中的字符串数据转换为公式的整数形式