我正在研究一个函数,该函数将为给定的有序对集合生成多项式插值。您当前在一个向量中输入节点的索引,并在第二个向量中插入要插入的函数的值。然后,我为拉格朗日多项式生成一个符号表达式,插入该组点。我希望能够从这个符号形式转到矢量形式,以便与测试函数等进行比较。也就是说,我有一些东西可以根据某个符号变量x生成一些多项式P(x)。我想将此多项式采样到一个向量,并获得多项式的值(例如)linspace(-1,1,1000)。如果可以,我该怎么做?
我想我会包含到目前为止的代码:
function l_poly = lpoly(x,f)
% Returns the polynomial interpolant as computed by lagrange's formula
syms a
n=size(x,2);
l_poly_vec = 1;
l_poly=0;
for k=1:n,
for l=1:n,
if (k ~= l)
l_poly_vec=l_poly_vec*(a-x(l))/(x(k)-x(l));
end
end
l_poly=l_poly+f(k)*l_poly_vec;
l_poly_vec = 1;
end
我计划添加第三个(或可能是第四个)输入,具体取决于我如何解决此问题。我猜我只需要我要采样的矢量长度和端点。
答案 0 :(得分:2)
如果我理解正确,你使用符号工具箱构建了拉格朗日插值多项式,现在希望通过值向量来评估它。一种方法是使用函数 sym2poly 来提取符号多项式的系数,然后使用 polyval 来评估它。或者,您可以使用matlabFunction将符号表达式转换为常规Matlab函数;或使用subs替换'x'的数值。
但是,你可能最好完全避免使用符号工具箱并直接构造拉格朗日插值多项式的系数,或者更好的是,完全使用不同的插值方案。功能 interp1 可能是一个很好的起点。