《拉格朗日和牛顿插值法》 …

一、实验名称:  插值问题

 

二、实验目的:

     用拉格朗日插值和牛顿差值的方法,在已知函数在点x0,x1,xn的函数值y0,y1,yn的情况下,求插值节点x的函数值y,即求f(x)。并比较结果,说明为什么相等。

 

三、实验方法:

1)拉格朗日插值

根据x0,x1,xny0,y1,yn构造插值多项式

[转载]《拉格朗日和牛顿插值法》 <wbr> <wbr>实验报告
将插值点x代入上式,就可得到函数f(x)在点x处的函数值的近似值。

2)牛顿插值.

根据x0,x1,xny0,y1,yn构造插值多项式

Nn(x)=f(x0)+f(x0,x1)(x-x0)++f(x0,x1,xn)(x-x0)(x-x1)(x-xn-1)

牛顿差值公式中各项的系数就是函数f(x)的各阶均差(差商)f(x0)f(x0,x1)f(x0,x1,xn),因此,在构造牛顿差值公式时,常常先把均差列成一个表,此表称为均差表。

 

四.实验内容:   

从函数表

x

0.4

0.55

0.8

0.9

1

f(x)

0.41075

0.57815

0.88811

1.02652

1.17520

 

出发,计算f(0.5),f(0.7),f(0.85)的近似值。

五、实验程序:

5.1程序编译

5.1.1 拉格朗日插值法:

function f=agui_lagrange(x0,y0,x)

n=length(x0);  m=length(x);

format long

s=0.0;

for k=1:n

    p=1.0;

    for j=1:n

        if j~=k

            p=p*(x-x0(j))/(x0(k)-x0(j));

        end

    end

    s=p*y0(k)+s;

end

f=s;

end

 

5.1.2 牛顿插值法:

function f=agui_newton(x0,y0,x)

n=length(x0);  m=length(x);

format long

N=0.0; p=1.0;

for k=1:n

    p=p*(x-x0(k));

    T=0.0;

    for i=1:k

        q=1.0;

        for j=1:k

            if j~=i

                q=q*(x0(i)-x0(j));

            end

        end

        T=y0(i)/q + T;

    end 

    N=T*p/(x-x0(k))+N;

end

f=N;

end

 

 

5.2程序实现:

>> x0=[0.4 0.55 0.8 0.9 1]

 

x0 = 0.4000    0.5500    0.8000    0.9000    1.0000

 

>> y0=[0.41075  0.57815 0.88811 1.02656 1.17520 ]

 

y0 = 0.4108    0.5782    0.8881    1.0266    1.1752

 

//拉格朗日插值法求值

>> f=agui_lagrange(x0,y0,0.5)

 

f = 0.52110682539683

 

>> f=agui_lagrange(x0,y0,0.7)

 

f = 0.75855804761905

 

>> f=agui_lagrange(x0,y0,0.85)

 

f = 0.95614258928571

 

//牛顿插值法求值

>> f=agui_newton(x0,y0,0.5)

 

f = 0.52110682539683

 

>> f=agui_newton (x0,y0,0.7)

 

f = 0.75855804761905

 

>> f=agui_newton (x0,y0,0.85)

 

f = 0.95614258928571

 

 

六.实验结果

通过软件求解容易发现,两种算法求出的结果一样,即有:

     [转载]《拉格朗日和牛顿插值法》 <wbr> <wbr>实验报告

 

七、结果分析

[转载]《拉格朗日和牛顿插值法》 <wbr> <wbr>实验报告

2、当插值多项式从n-1次增加到n次时,拉格朗日型插值必须重新计算所有的基本差值多项式;二对于牛顿插值,只需要表格再计算一个n阶均差,然后加上一项就可以了。这样大大减少了计算量,特别在计算结构复杂的多项式的时候,当然本实验中的数据组很少,计算机的计算速度快慢不明显而难以比较两种方法的优劣。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 牛顿插值是一种用于拟合多项式的方法,它能够根据已知的数据点来估算未知点的值。 在 C 语言中实现牛顿插值的步骤如下: 1. 首先,定义一个函数,用于计算牛顿插值多项式的系数。函数参数应该包括所有已知数据点的横坐标和纵坐标。 2. 在函数内部,定义一个数组用于存储每个数据点的纵坐标值。 3. 使用一个循环,按照牛顿插值的公式来计算多项式的系数。 4. 在函数的最后,返回计算得到的多项式系数。 5. 定义另一个函数,用于根据已知的多项式系数和给定的横坐标,计算纵坐标。 6. 在函数内部,使用一个循环按照牛顿插值的公式来计算纵坐标。 7. 在函数的最后,返回计算得到的纵坐标。 示例代码如下: ``` #include <stdio.h> #include <stdlib.h> #define N 3 // 已知数据点的个数 // 计算牛顿插值多项式的系数 double* NewtonInterpCoeff(double* x, double* y) { double* a = (double*)malloc((N + 1) * sizeof(double)); // 存储多项式系数的数 ### 回答2: 牛顿插值是一种用于估算函数在某一点上的值的数值计算方法。它基于拉格朗日插值法,但使用了差商的概念,从而减少了计算的复杂性。 下面是用C语言实现牛顿插值的步骤: 1. 定义函数f(x):首先,需要确定你要估算的函数f(x)。可以通过计算出函数在一系列已知点上的值来确定。 2. 计算差商:用差商来表示已知点的斜率。差商可以通过以下公式计算得出: f[x0] = f(x0) f[x1,x0] = (f[x1] - f[x0]) / (x1 - x0) f[x2,x1,x0] = (f[x2,x1] - f[x1,x0]) / (x2 - x0) ... 这些差商可以使用递归的方式计算出来。 3. 插值多项式:根据牛顿插值的公式,插值多项式可以表示为: Pn(x) = f[x0] + f[x1,x0](x - x0) + f[x2,x1,x0](x - x0)(x - x1) + ... 其中,Pn(x)表示估算函数f(x)在点x上的值。 4. 使用插值多项式计算:将需要估算的点x带入插值多项式中,计算得到估算值y。 通过以上步骤,就可以用C语言实现牛顿插值。可以使用循环来计算差商,递归来计算多项式的每一项,并将所需参数传递给相应的函数。总而言之,牛顿插值是一种高效而准确的数值计算方法,在实际应用中具有广泛的用途。 ### 回答3: 牛顿插值是一种用于多点数据的插值方法,基本思想是通过给定的数据点找到一个合适的多项式函数来逼近这些数据点。用C语言实现牛顿插值可以通过以下步骤进行: 1. 定义一个结构体来表示数据点,包含两个成员:x和y,分别表示横纵坐标。 2. 创建一个数组来存储数据点,可以手动输入数据点的个数和坐标,或者通过文件读取。 3. 定义一个函数来计算差商,输入参数为数据点数组和数据点个数,返回一个差商数组。差商的计算可以使用递归的方法,根据牛顿插值公式:f[x0, x1, ..., xn] = (f[x1, ..., xn] - f[x0, ..., xn-1]) / (x[n] - x[0]),其中f[xi, ..., xj]表示以数据点xi, ..., xj对应的函数值为节点的差商。 4. 定义一个函数来计算插值多项式的系数,输入参数为数据点数组和差商数组,返回一个系数数组。插值多项式的系数可以通过递归公式解得到:a[i] = f[x0, ..., xi]。 5. 定义一个函数来进行插值计算,输入参数为插值点的横坐标、数据点数组、差商数组和系数数组,返回插值点对应的纵坐标。插值计算的公式为:P(x) = a[0] + a[1](x - x0) + a[2](x - x0)(x - x1) + ... + a[n](x - x0)(x - x1)...(x - xn-1),其中P(x)表示在给定数据点上的插值结果。 通过以上步骤,即可使用C语言实现牛顿插值。在实际应用中,可以根据具体的需对代码进行优化和封装,以提高计算效率和代码可复用性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值