2011-02-09 138 views
0

我正在研究一個函數,該函數將爲給定的一組有序對生成多項式插補。您目前在一個矢量中輸入節點的索引,並在第二個矢量中插入函數的值。然後,我爲拉格朗日多項式生成一個符號表達式,用於內插這組點。我希望能夠從這個符號形式轉換爲矢量形式,以便與測試功能等進行比較。也就是說,我有一些根據某個符號變量x產生多項式P(x)的東西。然後,我想將這個多項式抽樣到一個向量上,並獲取多項式的值(例如)linspace(-1,1,1000)。如果這是可能的,我該怎麼做?如何從符號表達式轉換爲MATLAB中的矢量

我想我會包括我到目前爲止的代碼:我打算根據我怎麼能解決這個問題,添加第三(或可能第四)輸入

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 

。我猜我只需要我想要採樣的矢量長度和端點。

回答

1

如果我理解正確,您已經使用符號工具箱構造了拉格朗日插值多項式,並且現在希望通過值向量對其進行評估。一種方法是使用函數sym2poly來提取符號多項式的係數,然後使用來評估它。或者,您可以使用matlabFunction將您的符號表達式轉換爲常規的Matlab函數;或使用subs以數字值替換'x'。

但是,您最好避免使用符號工具箱,直接構造拉格朗日插值多項式的係數,或者更好的是完全使用不同的插值方案。功能interp1可能是一個很好的開始。

相關問題