我正在尝试编写一些执行多项式插值的代码,但我无法让它工作。我是一名学生,我正在遵循此视频中的逻辑https://www.youtube.com/watch?v=VpI-wC94RKw以便在 Matlab 中以代码形式重新创建它,但每当我尝试创建我的视频中显示的矩阵的自己版本我得到了一个几乎完全用零填充的矩阵(一个元素除外)。我不明白为什么会这样。
我的代码:
x=[150, 200, 300, 500, 1000, 2000, 99999]';
y=[2, 3, 4, 5, 6, 7, 8]';
function f = interPoly(x,y)
% Skapar en matris A var varje rad är [x_1^6, x_1^5,..., 1] till [x_n^6, x_n^5,..., 1]
A = [x.^6 x.^5 x.^4 x.^3 x.^2 x ones(numel(x),1) y];
% Gaussar matris A
R = rref(A);
% Plockar sista kolumnen ur R
c = R(:,end);
f = c(1)*x.^6+c(2)*x.^5+c(3)*x.^4+c(4)*x.^3+c(5)*x.^2+c(6)*x+c(7);
end
(矩阵'A'是这里有问题的矩阵。我最后得到的函数也只是用零作为值填充。也很抱歉评论是瑞典语)
我在 x 和 y 中有 7 个值,因此是 6 阶多项式,但我真的不知道倒数第二列中的常数应该是什么,所以我只是在那里放了一堆(我是新手,所以我我有点不确定逻辑)。
无论如何,我已经尝试将相同的功能与其他一些输入数据一起使用,并且效果很好。
替代输入数据:
x=[0, 0.5, 1, 1.5, 2, 2.99, 3]';
y=[0, 0.52, 1.09, 1.75, 2.45, 3.5, 4]';
它是否因为元素溢出而给我零(例如 99999^6 是一个非常高的数字)?我真的不明白这里发生了什么以及为什么它与一组不同的输入数据工作得很好。帮助?
谢谢!
编辑:这项任务的全部要点(由我的学校给出)是将“最小二乘法”方法(我也编写了代码但未发布)与多项式插值方法(上面代码中的方法)进行比较。上面'x'中的最后一个值应该是无穷大(f(inf)= 8),所以我只是用一个非常高的数字替换它,因此它不是“均匀”分布的。有一个更好的方法吗?