数值分析实验报告:拉格朗日插值法和牛顿插值法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一报告

拉格朗日插值法

一、实验目的

1、学习和掌握拉格朗日插值多项式

2、运用拉格朗日插值多项式进行计算

二、实验原理

根据x0,x1,…xn;y0,y1,…yn构造插值多项式其表达式为:

将插值点x代入上式,就可得到函数f(x)在点x处的函数值的近似值。

三、运行结果

四、代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication3

{

class Program

{

static double lglr(double[] x, double[] y, double x1, int n) {

double result = 0.0;

for (int i = 0; i

{

double temp = y[i];

for (int j = 0; j < n; j++)

{

if (j == i)

continue;

temp = temp * (x1 - x[j]);

temp = temp / (x[i] - x[j]);

}

result = result + temp;

}

return result;

}

static void Main(string[] args)

{

double[] x;

double[] y;

Console.WriteLine("请输入插值点数:");

int length = Convert.ToInt32(Console.ReadLine());

x = new double[length];

y = new double[length];

for (int i = 0; i < length; i++)

{

Console.Write("请输入第{0}个点的x值:", i + 1);

x[i] = Convert.ToDouble(Console.ReadLine());

Console.Write("请输入第{0}个点的y值:", i + 1);

y[i] = Convert.ToDouble(Console.ReadLine());

}

Console.WriteLine("请输入x1值:");

double x1 = Convert.ToDouble(Console.ReadLine());

double result=lglr(x,y,x1,length);

Console.Write("插值计算结果为:{0}:", result);

Console.ReadLine();

}

牛顿插值法

一、实验目的

体会并了解牛顿插值法,用计算机插入x值,输出相应的y值。

二、实验原理

根据x0,x1,…x n;y0,y1,…y n构造插值多项式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),因此,在构造牛顿差值公式时,常常先把均差列成一个表,此表称为均差表。

三、运行结果

四、代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace newton

{

class Program

{

static double chashang(int n, double[] x, double[] y) {

double f = 0;

double temp = 0;

for (int i = 0; i < n + 1; i++)

{

temp = y[i];

for (int j = 0; j < n + 1; j++)

if (i != j) temp /= (x[i] - x[j]);

f += temp;

}

return f;

}

static double niudun(double[] x, double[] y, double x1) {

double result = 0.0;

for (int i = 0; i < x.Length; i++)

{

double f = chashang(i, x, y);

double temp = 1.0;

for (int j = 0; j < i; j++)

{

temp = temp * (x1 - x[j]);

}

result = result + f * temp;

}

return result;

}

static void Main(string[] args)

{

double[] x;

double[] y;

Console.WriteLine("请输入插值点数:");

int length = Convert.ToInt32(Console.ReadLine());

x = new double[length];

y = new double[length];

for (int i = 0; i < length; i++)

{

Console.Write("请输入第{0}个点的x值:", i + 1);

x[i] = Convert.ToDouble(Console.ReadLine());

Console.Write("请输入第{0}个点的y值:", i + 1);

y[i] = Convert.ToDouble(Console.ReadLine());

}

Console.WriteLine("请输入x1值:");

double x1 = Convert.ToDouble(Console.ReadLine());

double result = niudun(x, y, x1);

Console.Write("插值计算结果为:{0}:", result);

Console.ReadLine();

}

}

}

五、分析

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

相关文档
最新文档