使用Matlab进行拉格朗日多项式

时间:2016-10-18 20:21:13

标签: matlab interpolation

这是我必须解决的问题:

  

编写一个程序,评估并绘制Iu(x)u(x) = 1/(1+x^2)之间x的{​​{1}}的拉格朗日插值-5。对5点插值(5,7,9等数据点,包括-5和5)进行此操作。您的结果应显示函数和插值。

这是我到目前为止提出的代码:

5,7,9,11,13,15

我认为我走在正确的轨道上,但我真的开始陷入如何提取数据并很好地绘制所有内容的过程中。我到处搜索过,但大多数代码似乎只想输出拉格朗日多项式的值用于某些数字,即P(2)= ...

1 个答案:

答案 0 :(得分:0)

在大多数情况下,您所开发的内容可以帮助您找到解决问题的正确途径。

您遇到的一些小问题是:

1)您错过了for循环。

在拉格朗日插值中,您应该有n个项的总和,其中n是您拥有的数据点数。 并且这些术语由乘积乘以数据点的y分量,即yj *Π{(x-xi)/(xj-xi)},其中如果i = j则跳过该术语(这样做是为了确保分母永远不为零)

2)您的内部for循环和if声明无法很好地协同发挥。

只要您的脚本到达if语句的末尾,for循环就会中断,并且会继续显示下一个k值。

这应该替换为else后跟continue

3)当您生成numerdenom变量时,您无意中只是将新值平方并将其存储到变量中。

您有numer = numer * numer这应该是numer = numer * numer_temp

以下是解决方案的快速伪代码:

for n equals 'number of data points'

    Generate the n data points, P(x,y)

    for i equals 1 to n

        for j equals 1 to n

            if i is not equal to j
                Calculate Product of Numerators <- Function of x
                Calculate Product of Denominators
            else
                Continue to next iteration of loop
            endIf

        endFor

        Calculate Lagrange Polynomial < Function of x
    endFor

    Plot Lagrange
    Plot Original Function

endFor

由此您可以更新代码以正确确定拉格朗日多项式。

u = @(x) 1./(1+x.^2); % The function we are interested in
number_of_data_Points = [5,7,9,11,13,15];


syms x; % Initializes x to be symbolic

for n = number_of_data_Points

    xn = linspace(-5,5,n);      % Creates x values
    yn = u(xn);                 % Creates y values

    L=0; % Re/Initializes Langrange Polynomial
    for j = 1:n
        numer = 1; % Re/Initializes Numerator
        denom = 1; % Re/Initializes Denominator
        for i = 1:n
            if j~=i
                denom_temp = xn(j) - xn(i);

                numer_temp = x - xn(i);    

                numer =  numer * numer_temp;
                denom = denom * denom_temp;
            else
                continue
            end
        end
        L = L + yn(j) * numer / denom;
    end
    L = matlabFunction(L);
end

我将保留更改代码,以便输出您需要的结果。