计算方法上机作业插值与拟合实验报告
matlab插值与曲线拟合实验报告
湖南大学电气与信息工程学院 《数值计算》课程 上机实验报告姓名: 班级: 学号: 日期:指导老师:本次实验题号:第 3 次实验1) 实验目的:1) 用MATLAB 实现拉格朗日插值和分段线性插值。
2) 了解matlab 实现曲线拟合方法的实际应用。
二. 实验内容:1) 插值算法的应用:题目:用拉格朗日插值程序,分段线形插值函数分别研究f (X )的数据表,计算f(0.472) X 0.46 0.47 0.48 0.49 Y0.48465550.49375420.50274980.51166832) 曲线拟合方法的实际应用用电压V=10V 的电池给电容器充电,电容器上t 时刻的电压v(t)=V-(V-V0)e^(-t/T),其中V0是电容器的初始电压,T 是充电常数。
实验测量了一组数据如下,请根据数据表确定V0和T 的大小。
t 0.5 1 2 3 4 5 7 9 V(t) 6.366.487.268.228.668.999.439.63三. 算法介绍或方法基础1.1 拉格朗日插值法对于已给定的点 00(,),...,(,)k k x y x y 和待估计的点的横坐标x ,如上述理论,将其值代入1100,011()()()()():......()()()()kj j i k j i i j j i j j j j j j kx x x x x x x x x x l x x x x x x x x x x x -+=≠-+-----==-----∏计算出插值基函数的值,然后根据公式:():()ki i j L x y l x ==∑计算出纵坐标的估计值,由此完成对该点的插值过程,其中k 为该点插值的阶数。
1.2 线性分段插值利用已给定的点 00(,),...,(,)k k x y x y 对插值区间分为1k -段,将每段的端点(,)i i x y 与 11(,)i i x y ++作为数据点利用公式100010()()()()()f x f x p x f x x x x x -=+--在所构成的区间进行线性插值。
实验2插值与拟合
数值分析实验报告实验2 插值与拟合2.1 实验目的掌握牛顿插值法的基本思路和步骤;掌握最小二乘法的基本思路和拟合步骤。
培养编程与上机调试能力。
2.2 算法描述2.2.1 牛顿插值法基本思路给定插值点序列())(,i i x f x ,,,1,0,n i =构造牛顿插值多项式)(u N n 。
输入要计算的函数点,x 并计算)(x N n 的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面)(x N n 的各项系数恰好又是各阶差商,而各阶差商可用差商公式来计算。
2.2.2 牛顿插值法计算步骤1. 输入n 值及())(,i i x f x ,,,1,0,n i =;要计算的函数点x 。
2. 对给定的,x 由[][][]00010101201101()()(),()(),,()()(),,n n n N x f x x x f x x x x x x f x x x x x x x x x f x x x -=+-+--++--- 计算()n N x 的值。
3. 输出()n N x 。
2.2.3 最小二乘法基本思路已知数据对()(),1,2,,j j x y j n = ,求多项式0()()m ii i p x a x m n ==<∑使得20110(,,,)n m in i j j j i a a a a x y ==⎛⎫Φ=- ⎪⎝⎭∑∑ 为最小,这就是一个最小二乘问题。
2.2.4 最小二乘法计算步骤用线性函数()p x a bx =+为例,拟合给定数据(),,1,2,,i i x y i m = 。
算法描述:步骤1:输入m 值,及(),,1,2,,i i x y i m = 。
步骤2:建立法方程组TA AX AY =。
步骤3:解法方程组。
步骤4:输出()p x a bx =+。
2.3 实验内容1. 给定sin110.190809,sin120.207912,sin130.22491,o o o ===构造牛顿插值函数计算'sin1130o 。
计算方法第五章拟合上机报告
实验报告名称班级:学号:姓名:成绩:1实验目的1)了解最小二乘法的基本原理,通过计算机解决实际问题。
2)了解超定方程组的最小二乘法。
2 实验内容已知实验数据如下试用形如y=a+b*x^2的抛物线进行最小二乘拟合。
3实验步骤1)根据插值公式的算法编写相应的函数程序;2)将题目中所给参数带入到插值函数中得出结果;3 程序设计function zyecf(x,y,m)%mΪËùÒªÇóµÄÄâºÏÇúÏߵĴÎÊýS=zeros(1,2*m+1);T=zeros(m+1,1);for k=1:2*m+1S(k)=sum(x.^(k-1));endfor k=1:m+1T(k)=sum(x.^(k-1).*y);endA=zeros(m+1,m+1);a=zeros(m+1,1);for i=1:m+1for j=1:m+1A(i,j)=S(i+j-1);endenda=A\T;for k=1:m+1fprintf('a[%d]=%f\n',k,a(k));endfprintf('Å×ÎïÏß·½³ÌΪy=%.6f+%.6f*x.^2\n',a(1),a(k));4实验结果及分析zyecf(x.^2,y,1)a[1]=-3.495708a[2]=2.205150抛物线方程为y=-3.495708+2.205150*x.^2将x=[1.0 2.5 3.5 4.0] 代入y=-3.495708+2.205150*x.^2,发现y =[-1.290558000000000 10.286479500000000 23.517379500000001 31.786692000000002];在样本点上的数据yi(1),yi(2)误差超过了5.0,精确度很低,但从整个函数走势曲线来看平均误差比较小。
《计算方法》实验报告材料
{
b=b+1;
}
result=Y[b]*(1-(x-X[b])/c)+Y[b+1]*((x-X[b])/c);
return result;
};
(3)牛顿插值法
#include<iostream>
#include<string>
#include<vector>
using namespace std;
cin>>b;
c=b-p;
c=c/(N-1);
for(int i=0;i<N;i++){
X[i]=p;
Y[i]=1/(1+p*p);
p=p+c;
}
cout<<"请输入要求值x的值:"<<endl;
double x;
cin>>x;
double result=Lagrange(N,X,Y,x);
cout<<"由拉格朗日插值法得出结果:"<<result<<endl;
B.分段线性插值
Xy(精确)y(拉格朗日) y(分段线性)误差(拉)误差(分)
0.5000000.8000000.8434070.750000-0.0542590.050000
4.5000000.0470591.578720 0.0486425 -32.547674-0.033649
(2)输出:
Xy(精确)y(牛顿插值)误差(牛顿插值)
cout<<"是否要继续?(y/n):";
数值分析实验报告--插值与拟合及其并行算法
《数值分析》实验报告实验五、插值与拟合及其并行算法一.实验目的:1.学会拉格朗日插值, 分段线性插值或三次样条插值以及曲 线拟合等数值分析问题,通过 MATLAB 编程解决这些数 值分析问题,并且加深对此次实验内容的理解。
2.加强编程能力和编程技巧,练习从数值分析角度看问题, 同时用 MATLAB 编写代码。
二.实验要求:学会在计算机上实现拉格朗日插值,分段线性插值或三次 样条插值以及曲线拟合等数值分析问题,分析几种插值方法的异 同。
三.实验内容:分别用下列题目完成①:拉格朗日插值及其误 差分析 ②:三次样条 ③: 曲线拟合及其误差分析,实验要求。
四.实验题目: (1)已知 sin 30 D = 0.5 , sin 45D = 0.707 1 ,sin 60 D = 0.866 0 ,用拉格朗日插值及其误差估计的MATLAB主程序求 sin 20D 的近似值,并估计其误差。
(2)观测得出函数 y=f(x)在若干点处的值为 f(0)=0, f(2)=16, f(4)=36, f(6)=54, f(10)=82 和 f'(0)=8, f'(10)=7, 试求 f(x)的三次样条函数,并计算 f(3)和 f(8)的近似值. ( 3 ) t=[2.1 7.9 10.1 13 14.5 15.3];r=[13.5 36.9 45.7 求出 r 与 t 之间的关系, 及三 57.3 62.78 74.9];根据给出数据, 种误差,并作出拟合曲线。
五.实验原理:(1)拉格朗日插值公式:P5 ( x) = ∑ y i l i ( x)i =05li ( x) =( x − x 0 ) " ( x − xi −1 )( x − xi +1 ) " ( x − x n ) ( xi − x0 ) " ( xi − xi −1 )( xi − xi +1 ) " ( xi − x n )(2)三次样条插值公式:Sn(x)={Si(x)=a i x +b i x +c i x+d i , x ∈ [x i −1 ,x i ] ,i=1,2,….,n}32(3)曲线拟合: 最小二乘法并不只限于多项式,也可以用于任何具体给出的函数 形式。
清华大学_计算方法(数学实验)实验2插值与拟合
实验 2 插值与拟合系班姓名学号【实验目的】1、掌握用MATLAB计算拉格朗日、分段线性、三次样条三种插值的方法,改变节点的数目,对三种插值结果进行初步分析。
2、掌握用MATLAB作线性最小二乘的方法。
3、通过实例学习如何用插值方法与拟合方法解决实际问题,注意二者的联系和区别。
【实验内容】预备:编制计算拉格朗日插值的M文件:以下是拉格朗日插值的名为y_lagrl的M文件:function y=y_lagr1(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end第1题(d)选择函数y=exp(-x2) (-2≤x≤2),在n个节点上(n不要太大,如5~11)用拉格朗日、分段线性、三次样条三种插值方法,计算m个插值点的函数值(m要适中,如50~100)。
通过数值和图形输出,将三种插值结果与精确值进行比较。
适当增加n,在作比较,由此作初步分析。
运行如下程序:n=7;m=61;x=-2:4/(m-1):2;y=exp(-x.^2);z=0*x;x0=-2:4/(n-1):2;y0=exp(-x0.^2);y1=y_lagr1(x0,y0,x);y2=interp1(x0,y0,x);y3=interp1(x0,y0,x,'spline');[x'y'y1'y2'y3']plot(x,z,'w',x,y,'r--',x,y1,'b:',x,y2,'m',x,y3,'b') gtext('y=exp(-x^2)'),gtext('Lagr.'),gtext('Piece.-linear.'),gtext ('Spline'),将三种插值结果y1,y2,y3与精确值y 项比较,显然y1在节点处不光滑,拉格朗日插值出现较大的振荡,样条插值得结果是最好的.增加n 值(使n=11),再运行以上程序,得到的图形如右图所示,比较这两个图可发现,节点增加后,三种插值方法结果的准确度均有所提高,因此可近似地认为:增加节点个数可以提高插值结果的准确程度。
插值与拟合实验报告
学生实验报告了解插值与拟合的基本原理和方法;掌握用MATLAB计算插值与作最小二乘多项式拟合和曲线拟合的方法;通过范例展现求解实际问题的初步建模过程;通过动手作实验学习如何用插值与拟合方法解决实际问题,提高探索和解决问题的能力。
这对于学生深入理解数学概念,掌握数学的思维方法,熟悉处理大量的工程计算问题的方法具有十分重要的意义。
二、实验仪器、设备或软件:电脑,MATLAB软件三、实验内容1.编写插值方法的函数M文件;2.用MATLAB中的函数作函数的拟合图形;3.针对实际问题,试建立数学模型,并求解。
四、实验步骤1.开启软件平台——MATLAB,开启MATLAB编辑窗口;2.根据各种数值解法步骤编写M文件;3.保存文件并运行;4.观察运行结果(数值或图形);5.写出实验报告,并浅谈学习心得体会。
五、实验要求与任务根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→数学模型→算法与编程→计算结果→分析、检验和结论→心得体会)。
1.天文学家在1914年8月的7次观测中,测得地球与金星之间距离(单位:米),并取得常用对数值,与日期的一组历史数据如下表:由此推断何时金星与地球的距离(米)的对数值为9.93518?解:输入命令days=[18 20 22 24 26 28 30];distancelogs=[9.96177 9.95436 9.94681 9.93910 9.93122 9.92319 9.91499]; t1=interp1(distancelogs,days,9.93518) %线性插值t2=interp1(distancelogs,days,9.93518,'nearest') %最近邻点插值t3=interp1(distancelogs,days,9.93518,'spline') %三次样条插值t4=interp1(distancelogs,days,9.93518,'cubic') %三次插值计算结果:t1 =24.9949t2 =24t3 =25.0000t4 =25.0000综上所得,可推断25日金星与地球的距离(米)的对数值为9.93518。
实验4多项式、曲线拟合与插值
1
实验要求
• 给出实验报告,形式如下 • 实验题目: • 实验目的 : • 实验内容: • 实验结果:(无需抄题,指定题目序号)
2
实验内容
• 一.上机操作本讲义(4-5)页的练习1-6 • 二.拟合曲线
– 题目见本讲义第6页和第7页 – 要求:给出代码,并附上拟合曲线对比图
6
ห้องสมุดไป่ตู้
插值
• 在某山区测得一些地点的高程如下表所示。平面区域为 1200<=x <=4000,1200 <=y <=3600. 试做出该山区的地貌图和等高线图,并对 几种插值方法('nearest' 'linear' 'spline' 'cubic‘)进行比较。
7
• 三.插值
– 题目见本讲义第8页 – 要求:给出程序代码,比较结果图以及分析结
果
3
4
5
曲线拟合
• 有一组实测数据如下表,而且已知该数据可 能满足的原型函数为 y(x)=a*x+b*x^2*e^(cx)+d,试求满足下面数据的最小二乘解 a,b,c,d的值 x= 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 与x相对应的y=2.3201 2.6470 2.9707 3.2885 3.6008 3.9090 4.2147 4.5191 4.8232 5.1275
插值法和拟合实验报告
插值法和拟合实验报告一、实验目的1.通过实验了解插值法和拟合法在数值计算中的应用;2.掌握拉格朗日插值法、牛顿插值法和分段线性插值法的原理和使用方法;3.学会使用最小二乘法进行数据拟合。
二、实验仪器和材料1.一台计算机;2. Matlab或其他适合的计算软件。
三、实验原理1.插值法插值法是一种在给定的数据点之间“插值”的方法,即根据已知的数据点,求一些点的函数值。
常用的插值法有拉格朗日插值法、牛顿插值法和分段线性插值法。
-拉格朗日插值法:通过一个n次多项式,将给定的n+1个数据点连起来,构造出一个插值函数。
-牛顿插值法:通过递推公式,将给定的n+1个数据点连起来,构造出一个插值函数。
-分段线性插值法:通过将给定的n+1个数据点的连线延长,将整个区间分为多个小区间,在每个小区间上进行线性插值,构造出一个插值函数。
2.拟合法拟合法是一种通过一个函数,逼近已知的数据点的方法。
常用的拟合法有最小二乘法。
-最小二乘法:通过最小化实际观测值与拟合函数的差距,找到最优的参数,使得拟合函数与数据点尽可能接近。
四、实验步骤1.插值法的实验步骤:-根据实验提供的数据点,利用拉格朗日插值法、牛顿插值法、分段线性插值法,分别求出要插值的点的函数值;-比较三种插值法的插值结果,评价其精度和适用性。
2.拟合法的实验步骤:-根据实验提供的数据点,利用最小二乘法,拟合出一个合适的函数;-比较拟合函数与实际数据点的差距,评价拟合效果。
五、实验结果与分析1.插值法的结果分析:-比较三种插值法的插值结果,评价其精度和适用性。
根据实验数据和插值函数的图形,可以判断插值函数是否能较好地逼近实际的曲线。
-比较不同插值方法的计算时间和计算复杂度,评价其使用的效率和适用范围。
2.拟合法的结果分析:-比较拟合函数与实际数据点的差距,评价拟合效果。
可以使用均方根误差(RMSE)等指标来进行评价。
-根据实际数据点和拟合函数的图形,可以判断拟合函数是否能较好地描述实际的数据趋势。
插值法和拟合实验报告(数值计算)
插值法和拟合实验报告一、实验目的1.通过进行不同类型的插值,比较各种插值的效果,明确各种插值的优越性;2.通过比较不同次数的多项式拟合效果,了解多项式拟合的原理;3.利用matlab 编程,学会matlab 命令;4.掌握拉格朗日插值法;5.掌握多项式拟合的特点和方法。
二、实验题目1.、插值法实验将区间[-5,5]10等分,对下列函数分别计算插值节点kx 的值,进行不同类型的插值,作出插值函数的图形并与)(x f y =的图形进行比较:;11)(2x x f += ;arctan )(x x f = .1)(42x x x f +=(1) 做拉格朗日插值; (2) 做分段线性插值; (3) 做三次样条插值.2、拟合实验给定数据点如下表所示:分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数),(i i y x 和拟合函数的图形。
三、实验原理1.、插值法实验∏∑∏∏∏∑∑≠==≠=≠=≠=+-==--==-===-=-=----==++==ji j ji i i i i ni i n nji j jnji j ji i nji j jn i i i ni i n nn o i ni i n x x x x x y x l x L x x c ni x x c x x x cx x x x x x x x c y x l x L y x l y x l y x l x L ,00,0,0,0110000)(l )()()(1,1,0,1)()(l )()())(()()()()()()()(,故,得再由,设2、拟合实验四、实验内容1.、插值法实验1.1实验步骤:打开matlab软件,新建一个名为chazhi.m的M文件,编写程序(见1.2实验程序),运行程序,记录结果。
1.2实验程序:x=-5:1:5;xx=-5:0.05:5;y1=1./(1+x.^2);L=malagr(x,y1,xx);L1=interp1(x,y1,x,'linear');S=maspline(x,y1,0.0148,-0.0148,xx);hold on;plot(x,y1,'b*');plot(xx,L,'r');plot(x,L1,'g');plot(xx,S,'k');figurex=-5:1:5;xx=-5:0.05:5;y2=atan(x);L=malagr(x,y2,xx);L1=interp1(x,y2,x,'linear');S=maspline(x,y2,0.0385,0.0385,xx);hold on;plot(x,y2,'b*');plot(xx,L,'r');plot(x,L1,'g');plot(xx,S,'k');figurex=-5:1:5;xx=-5:0.05:5;y3=x.^2./(1+x.^4);L=malagr(x,y3,xx);L1=interp1(x,y3,x,'linear');S=maspline(x,y3,0.0159,-0.0159,xx);hold on;plot(x,y3,'b*');plot(xx,L,'r');plot(x,L1,'g');plot(xx,S,'k');1.3实验设备:matlab软件。
实验1—插值与拟合
《计算方法》实验报告二级学院:计算机学院专业:指导教师:班级学号:姓名:实验一 插值与拟合1、 实验目的:① 通过编程和插值与拟合中的某种具体算法解决具体问题,更深一步的体会 计算方法这门课的重要性,并加深对插值与拟合公式某种具体算法的理解。
② 熟悉编程环境。
2、实验要求:实现插值与拟合中的某种具体算法编写并执行 3、实验内容:1)用牛顿法求解01553=-x 的根,取初始值为10。
2)用弦截法求解数学方程。
x*x*x-x-1=0 ,x=[1,1.5] 4、题目: 插值与拟合5、原理:(1)用牛顿法求01553=-x 的根的原理:牛顿迭代法是以微分为基础的,由于曲线不规则,微分就是用直线代替曲线, 牛顿迭代法是取x0之后,找比x0更近的方程的根,多次迭代后,找更近似 的根。
(2)用弦截法求解 x*x*x-x-1=0设x0,x1是f(x)=0的近似值,利用f(x0),f(x1)构造一次插值多项式f1,并用f1 =0作为f(x)=0的新的近似根。
其几何意义:依次用弦线代替曲线,用线性函 数的零点作为函数零点的近似值。
6、设计思想:(1)用牛顿法求01553=-x 的根的思想:用直线代替曲线,用线性函 数的零点作为函数零点的近似值。
(2)用弦截法求根思想:依次用弦线代替曲线,用线性函 数的零点作为函数零点的近似值。
7、对应程序:用牛顿法求解01553=-x 的根,取初始值为10。
#include<stdio.h> #include<math.h> void main(void) {float x0=10;float f0=x0*x0*x0-155; float f1=3*x0*x0; float x1=x0-f0/f1; while(fabs(x0-x1)>1e-6) {x0=x1;f0=x0*x0*x0-155; x1=x0-f0/f1;}printf("%.3f\n",x1); }弦截法求根 x*x*x-x-1=0 ,x=[1,1.5] #include<stdio.h> #include<math.h> void main(void) {float x0=1.5; float x1=1;float f0=x0*x0*x0-x0-1; float f1=x1*x1*x1-x1-1;float x=x0-(x1-x0)/(f1-f0)*f0; while(fabs(x-x1)>1e-6) {x1=x;f1=x1*x1*x1-x1-1;x=x0-(x1-x0)/(f1-f0)*f0; }printf("%.3f\n",x); }8、实验结果:01553=-x 的根是5.372 x*x*x-x-1=0 ,的根是 1.325 9、图形10、实验体会:通过编程,切身感到计算方法这门课绝不仅仅是数学,是图形的观察和实际计算方法的应用,从而解决一些复杂的数值问题。
实验报告-插值法
实验报告-插值法计算机上机实验报告专业和班级姓名成绩学号课程名称数值计算⽅法实验名称插值法实验⽬的和要求实验⽬的1、掌握⽤MATLAB计算拉格朗⽇、分段线性、三次样条三种插值的⽅法,改变节点的数⽬,对三种插值结果进⾏初步分析。
2、掌握⽤MAT L AB作线性最⼩⼆乘的⽅法。
3、通过实例学习如何⽤插值⽅法与拟合⽅法解决实际问题,注意⼆者的联系和区别。
实验内容和步骤实验的主要内容1、编制拉格朗⽇、⽜顿插值程序,并运⾏⼀个简单的实例。
(1)拉格朗⽇插值程序:function v=polyinterp(x,y,u)n=length(x);v=zeros(size(u));for k=1:nw=ones(size(u));for j=[1:k-1 k+1:n]w=(u-x(j))./(x(k)-x(j)).*w;endv=v+w*y(k);end实例:当x=144,169,225时,y=12,13,15,⽤拉格朗⽇差值法求根号175。
如下:(2)⽜顿插值程序:function y=newinterp(X,Y,x)% ⽜顿插值函数m=length(X);for k=2:mfor j=1:k-1Y(k)= (Y(k)- Y(j))/(X(k)-X(j));endendy=Y(m);for j=m-1:-1:1y=y.*(x-X(j))+Y(j);end实例:当x=144,169,225时,y=12,13,15,⽤⽜顿差值法求根号175。
如下:2、给定函数xxf=)(,已知:414214.1.)0.2(=f449138.1.)1.2(=f483240.1.)2.2(=f516575.1.)3.2(=f549193.1.)4.2(=f⽤⽜顿插值法求4次Newton插值多项式在2.15处的值,以此作为函3.选择函数y=exp(-x2) (-2≤x≤2),在n个节点上(n不要太⼤,如5~11)⽤拉格朗⽇、分段线性、三次样条三种插值⽅法,计算m 个插值点的函数值(m要适中,如50~100)。
插值与曲线拟合实验报告
插值与曲线拟合实验报告实验目的:1. 了解插值和曲线拟合的原理和方法;2. 掌握梯形公式的应用;3. 掌握拉格朗日插值多项式和牛顿插值多项式的构造方法;4. 掌握用MATLAB进行数据拟合的方法。
实验仪器:1. 计算机;2. MATLAB软件。
实验原理:插值:给定一组数据点,插值就是在这些数据点之间插入某些值,以尽量接近原函数的方式得到一个新的函数。
插值方法有很多种,其中比较常用的是拉格朗日插值多项式和牛顿插值多项式。
拉格朗日插值多项式:以一种通用的方式构造多项式,使其通过给定的一组数据点。
构造方法是依据n个数据点(x1,y1),(x2,y2),…,(xn,yn)构造n-1次函数L(x),使得L(xi)=yi且有L(xj)=0(j不等于i)。
该多项式的形式为:L(x)=y1*L1(x)+y2*L2(x)+…+yn*Ln(x)其中,Lk(x)的构造方法是:Lk(x)=(x-x1)(x-x2)…(x-xk-1)(x-xk+1)…(x-xn) /(xk-x1)(xk-x2)…(xk-xk-1)(xk-xk+1)…(xk-xn)牛顿插值多项式:采用递推公式构造,其形式为:其中,f(x0,x1)表示在x0和x1之间的斜率,f(x0,x1,x2)表示在x0、x1和x2之间的曲率,以此类推。
曲线拟合:给定一组数据点,拟合就是寻找一个函数或者曲线,以最优化的方式拟合这些数据点,从而对未知的数据点进行预测。
拟合方法有很多种,其中比较常用的是线性方程、最小二乘法和多项式拟合。
最小二乘法:使用这种方法时,需要有一个数学模型,以此作为拟合函数。
当给定输入-输出数据时,使用最小二乘法以最小化误差平方和的方式来确定函数中未知的参数。
在MATLAB中使用polyfit函数实现多项式拟合。
实验结果:选择数据点如下:x = [1,2,3,4,5];y = [0.7652, 0.6347, 0.4496, 0.2499, 0.0621];使用梯形公式计算插值结果为 0.3865;使用拉格朗日插值多项式计算插值结果为 0.3865;使用牛顿插值多项式计算插值结果为 0.3865。
插值与拟合的实验报告心得
插值与拟合的实验报告心得1.引言1.1 概述插值与拟合是数值分析和数据处理领域中常见的重要技术方法,通过对已知数据点进行插值计算,得到未知点的数值估计。
插值方法可以帮助我们填补数据间的空缺、平滑曲线和预测未来趋势,因此在科学研究、工程建模和数据分析中具有广泛的应用价值。
本实验报告将对插值的基本概念进行介绍,探讨插值方法的分类和在实际应用中的意义。
同时,我们将总结实验结果,评述插值与拟合的优缺点,并提出对进一步研究的建议,希望通过本报告对插值与拟合的方法和应用有一个全面的了解。
1.2文章结构文章结构部分的内容可以包括:在本报告中,将包括以下几个部分的内容:1. 引言:介绍插值与拟合的基本概念,以及本实验的目的和意义。
2. 正文:包括插值的基本概念、插值方法的分类以及插值在实际应用中的意义。
我们将深入探讨这些内容,并解释它们在实验中的具体应用。
3. 结论:总结本次实验的结果,分析插值与拟合的优缺点,并提出对进一步研究的建议。
通过以上内容的分析和探讨,我们希望能够全面地了解插值与拟合的理论基础和实际应用,为进一步的研究和实践提供一定的参考和启发。
1.3 目的本实验的目的在于通过对插值和拟合的实验研究,探索和了解这两种数学方法在现实生活中的应用。
通过实验,我们将深入了解插值的基本概念和分类方法,以及插值在实际应用中的意义。
同时,我们还将对插值和拟合的优缺点进行分析,为进一步的研究提供建议和启示。
通过本实验,我们的目的是掌握插值与拟合方法的应用和特点,为实际问题的求解提供更多的数学工具和思路。
2.正文2.1 插值的基本概念插值是指通过已知数据点构建出一个函数,该函数经过这些数据点,并且在每个数据点上都有相应的函数值。
换句话说,插值是一种通过已知离散数据点来推断未知数据点的方法。
在数学上,插值可以用于近似未知函数的值,或者用于填补数据间的空隙。
在插值过程中,我们通常会选择一个合适的插值函数,比如多项式函数、三角函数或者样条函数等,来拟合已知的数据点。
数值分析实验报告插值与拟合
结果分析:高次插值稳定性差,而低次插值对于较大区间逼近精度又不够,而且,随着节点的加密,采用高次插值,插值函数两端会发生激烈震荡。解决这一矛盾的有效方法就是采用分段低次代数插值。
(2)
通过采用分段线性插值得到以下结果:
结果分析:通过采用分段线性插值,发现随着插值节点增多,插值计算结果的误差越来越小,而且分段线性插值的优点是计算简单,曲线连续和一致收敛,但是不具有光滑性。
拟合是指通过观察或测量得到一组离散数据序列 ,i=1,2,…,m,构造插值函数 逼近客观存在的函数 ,使得向量 与 的误差或距离最小。
可知当基函数的选择不同时,拟合函数的误差也会不同,所以在对数据进行拟合时应选择适合的基函数。
三、练习思考
整体插值有何局限性?如何避免?
答:整体插值的过程中,若有无效数据则整体插值后插值曲线的平方误差会比较大,即在该数据附近插值曲线的震动幅度较大。在插值处理前,应对原始数据进行一定的筛选,剔除无效数据。
②相同点:通过已知一些离散点集M上的约束,求取一个定义在连续集合S(M包含于S)的未知连续函数,从而达到获取整体规律目的
四、本次实验的重点难点分析
答:加强了对插值和拟合的认识,了解了其算法思想,并使用matlab将其实现。学会了观察插值拟合后的图形,并分析其问题。
画图进行比较:
通过观察图像,经比较可知两结果是很接近的。
2.区间 作等距划分: ,以 ( )为节点对函数 进行插值逼近。(分别取 )
(1)用多项式插值对 进行逼近,并在同一坐标系下作出函数的图形,进行比较。写出插值函数对 的逼近程度与节点个数的关系,并分析原因。
(2)试用分段插值(任意选取)对 进行逼近,在同一坐标下画出图形,观察分段插值函数对 的逼近程度与节点个数的关系。
计算方法上机作业插值与拟合实验报告
计算方法实验题目:班级:学号:姓名:目录计算方法实验 (1)1 实验目的 (3)2 实验步骤 (3)2.1环境配置: (3)2.2添加头文件 (3)2.3主要模块 (3)3 代码 (4)3.1主程序部分 (4)3.2多项式方程部分 (4)3.3核心算法部分 (8)3.4数据结构部分 (13)4运行结果 (19)4.1拉格朗日插值法运行结果 (19)4.2牛顿插值法运行结果 (20)4.3多项式拟合运行结果 (20)5总结 (21)拉格朗日插值法 (21)牛顿插值法 (21)多项式拟合 (21)6参考资料 (22)1 实验目的1.通过编程对拉格朗日插值法、牛顿插值法以及多项式拟合数据的理解2.观察上述方法的计算稳定性和求解精度并比较各种方法利弊2 实验步骤2.1环境配置:VS2013,C++控制台程序2.2添加头文件#include "stdio.h"#include "stdlib.h"#include "stdafx.h"2.3主要模块程序一共分成三层,最底层是数据结构部分,负责存储数据,第二层是交互部分,即多项式方程部分,负责输入输出获得数据,最上层是核心的算法部分,负责处理已获得的数据。
具体功能如下:●数据结构部分数据结构部分是整个程序的最底层,负责存储部分。
因方程系数作为数据元素插入和删除操作较少,而顺序表空间利用率大且查看方便,故此程序选用顺序表保存系数。
数据结构文件中写的是有关顺序表的所有基本操作以供其他文件调用。
本次实验使用列主元高斯消元法作为求解方程组的方法,所以也用了二维顺序表存储数组。
综上,数据结构部分文件是前两个试验的文件内容和,稍作修改。
●常系数微分方程部分多项式方程部分是程序的第二层,内容主要是常系数微分方程导数的计算和显示菜单部分。
●算法部分算法部分分为两个文件,一个是插值部分,一个是拟合部分。
插值部分文件负责有关插值的核心算法,处于整个程序最上层部分,负责拉格朗日插值法和牛顿插值法的具体实现过程。
计算方法第四章插值上机报告
实验报告名称班级:学号:姓名:成绩:1实验目的1)熟悉拉格朗日插值多项式和牛顿插值多项式,注意其不同特点;2)会用三次样条插值解决一些实际问题;2 实验内容做二次插值,并求x1=-2,x2=0,x3=2.75时的函数近似值。
采用拉格朗日分段插值算法。
2)按下列数据做五次插值,并求x1=0.46,x2=0.55,x3=0.60时的函数近似值。
采用拉格朗日五次插值多项式3)编写一个用牛顿前插公式计算函数值的程序,要求先输出差分表,再计算x点的函数值,采用牛顿前插公式的算法。
3实验步骤1)根据插值公式的算法编写相应的函数程序;2)将题目中所给参数带入到插值函数中得出结果;3 程序设计1)2)拉格朗日插值算法function yi=Lagran(x,y,xi)m=length(xi);n=length(x);for i=1:mz=xi(i);s=0;for k=1:np=1;for j=1:nif j~=kp=p*(z-x(j))/(x(k)-x(j));endends=p*y(k)+s;endyi(i)=s;endend分段插值clcclearx=[-3.0 -1.0 1.0 2.0 3.0];y=[1.0 1.5 2.0 2.0 1.0];yi1=Lagran(x(1,1:3),y(1,1:3),-2);yi2=Lagran(x(1,2:4),y(1,2:4),0);3)function N=forwardchafennewton(x,y,xi)%Newton»ù±¾²åÖµ·½·¨format longn=length(x);m=length(y);t=ff(x,xi);if m~=nerror('x or y ÊäÈëÓÐÎó£¬ÔÙÀ´~');endA=zeros(n);Z=1.0;A(:,1)=y; %AµÚÒ»ÁÐÊÇyN=A(1,1);for k=2:n % k ΪÁбêfor i=k:n % i ΪÐбêA(i,k)=A(i,k-1)-A(i-1,k-1); %±ØÐëÊǺó-Ç°endZ=Z*(t-(k-2))/(k-1);N=N+Z*A(k,k);enddisp('²îÉ̱í');disp(A);fprintf('t=%d',t);fprintf('Newton²åÖµµÄ½á¹û±£Áô6λСÊýÊÇ %10.6f\n',N); %function ni=ni(k)%ni=1;%if k==0% ni=1;%else if k<0% disp('error');% else% for i=1:k% ni=ni*i;% end% end%endfunction t=ff(x,xi)h=x(2)-x(1);t=(xi-x(1))/h;4实验结果及分析1)2)Lagran(x,y,[0.46 0.55 0.60])ans =1.1007 1.1413 1.16623)5总结通过本实验我掌握了拉格朗日和牛顿插值多项式的算法,拉格朗日插值多用于理论推导,而牛顿插值算法计算比较方便,特别对于等距节点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法实验题目:班级:学号:姓名:目录计算方法实验 (1)1 实验目的 (3)2 实验步骤 (3)2.1环境配置: (3)2.2添加头文件 (3)2.3主要模块 (3)3 代码 (4)3.1主程序部分 (4)3.2多项式方程部分 (4)3.3核心算法部分 (8)3.4数据结构部分 (13)4运行结果 (19)4.1拉格朗日插值法运行结果 (19)4.2牛顿插值法运行结果 (20)4.3多项式拟合运行结果 (20)5总结 (21)拉格朗日插值法 (21)牛顿插值法 (21)多项式拟合 (21)6参考资料 (22)1 实验目的1.通过编程对拉格朗日插值法、牛顿插值法以及多项式拟合数据的理解2.观察上述方法的计算稳定性和求解精度并比较各种方法利弊2 实验步骤2.1环境配置:VS2013,C++控制台程序2.2添加头文件#include "stdio.h"#include "stdlib.h"#include "stdafx.h"2.3主要模块程序一共分成三层,最底层是数据结构部分,负责存储数据,第二层是交互部分,即多项式方程部分,负责输入输出获得数据,最上层是核心的算法部分,负责处理已获得的数据。
具体功能如下:●数据结构部分数据结构部分是整个程序的最底层,负责存储部分。
因方程系数作为数据元素插入和删除操作较少,而顺序表空间利用率大且查看方便,故此程序选用顺序表保存系数。
数据结构文件中写的是有关顺序表的所有基本操作以供其他文件调用。
本次实验使用列主元高斯消元法作为求解方程组的方法,所以也用了二维顺序表存储数组。
综上,数据结构部分文件是前两个试验的文件内容和,稍作修改。
●常系数微分方程部分多项式方程部分是程序的第二层,内容主要是常系数微分方程导数的计算和显示菜单部分。
●算法部分算法部分分为两个文件,一个是插值部分,一个是拟合部分。
插值部分文件负责有关插值的核心算法,处于整个程序最上层部分,负责拉格朗日插值法和牛顿插值法的具体实现过程。
调用方程文件的函数,将获得的数据进行处理运算,将结果返回给方程主函数和输出的第二层。
每种方法有两个函数,一个为仅仅实现一次插值的算法,另一个是和方程部分联系的函数,负责交互中想实现的整体的算法。
拟合部分文件主要负责多项式拟合的算法实现,因为要用到列主元高斯消去法所以也将此部分算法移入其中。
主函数负责获取方程系数并显示,算法和方程作为后台程序,顺序表作为存储手段。
3 代码3.1主程序部分// Interpolationandfitting.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include"equation.h"#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){GetEquation();while (Exflag){ShowMenu();}return 0;}3.2多项式方程部分方程部分头文件#ifndef _EQUATION_H#define _EQUATION_H#include "squencelist.h"#include "stdio.h"#include "stdlib.h"extern int Numberx;extern int Exflag;extern sequenlist *B;extern sequenlist *D;extern sequenlist *L;void GetEquation(void);void ShowMenu(void);void printres(sequenlist *A);void printfunction2(datacoa *A);void printfunctionf(datacoa *A);void Tip(void);#endif方程部分CPP文件#include "stdafx.h"#include "equation.h"#include "math.h"#include "alfitting.h"#include "alinterpolation.h"#include "squencelist.h"#include "stdio.h"#include<iostream>#include <iomanip>//全局变量int Numberx=0;int Exflag = 1;sequenlist *B;sequenlist *D;sequenlist *L;////////////////////////获得给定数据///////////////////////// void GetEquation(void){int j = 0;datatype x = 0;B = InitList();D = InitList();cout << "输入给定数据的个数:" << endl;cin >> Numberx;cout << "从小到大输入x,输入00结束(如y=x^2+2x+1输入1 2 1 00):" << endl;cin >> x;while (x != 00){for (j = 1; j <= Numberx; j++){if (!Insert(B, x, j))exit(0);cin >> x;}}cin.clear();cout << "输入f(x),输入00结束(如y=x^2+2x+1输入1 2 1 00):" << endl;cin >> x;while (x != 00){for (j = 1; j <= Numberx; j++){if (!Insert(D, x, j))exit(0);cin >> x;}}printres(B);printres(D);}//////////////////////////显示交互/////////////////////////////void ShowMenu(void){int c1, c2;cout << "选择插值的方法:" << endl;cout << "1.拉格朗日插值法" << endl;cout << "2.牛顿插值法" << endl;cout << "3.直接拟合" << endl;cout << "0.退出" << endl;cin >> c1;switch (c1){case 0:Tip();break;case 1:Langmethod();break;case 2:Newtonmethod();break;case 3:break;default:break;}cout << "选择拟合方式:" << endl;cout << "1.多项式拟合" << endl;cout << "2.返回插值" << endl;cout << "0.退出" << endl;cin >> c2;switch (c2){case 0:Tip();break;case 1:Fpolynomial();Tip();break;case 2:break;default:break;}}////////////////////////打印结果/////////////////////////// void printres(sequenlist *A){int i;for (i = 1; i <= A->last; i++){cout << setw(12) << A->data[i];}cout << endl;}////////////////////////打印输出矩阵/////////////////////////// void printfunction2(datacoa *A){int i, j;cout << "矩阵=" << endl;for (i = 1; i <= A->m; i++){for (j = 1; j <= A->n; j++){cout << setw(12) << A->data[i][j];}cout << endl;}}////////////////////////打印输出函数/////////////////////////// void printfunctionf(datacoa *A){int i = 1;cout << "f=";cout << A->data[i][A->n];for (i = 2; i <= A->m; i++){if (A->data[i][A->n]< 0)cout << A->data[i][A->n] << "*" << "x^" << i - 1;else cout << "+" << A->data[i][A->n] << "*" << "x^" << i - 1;}cout << endl;}////////////////////////返回提示///////////////////////////void Tip(void){int flag;cout << "输入000退出,其余返回:" << endl;cin >> flag;if (flag == 000)Exflag = 0;}3.3核心算法部分插值部分头文件#ifndef _ALINTERPOLATION_H#define _ALINTERPOLATION_H#include "stdio.h"#include "stdlib.h"void Langmethod(void);datatype Langarange(sequenlist *X, sequenlist *F, datatype x);datatype Newtoninterpolation(sequenlist *X, sequenlist *F, datatype x);void Newtonmethod(void);#endif插值部分CPP文件#include "alinterpolation.h"#include "stdafx.h"#include "squencelist.h"#include "equation.h"#include "math.h"//////////////////////////拉格朗日插值//////////////////////////// datatype Langarange(sequenlist *X, sequenlist *F, datatype x){int i, j;datatype temp = 0;L = InitList();for (i = 1; i <= Numberx; i++){Insert(L, F->data[i], i);for (j = 1; j <= Numberx; j++){if (j == i)continue;L->data[i] = L->data[i] * ((x - X->data[j]) / (X->data[i] - X->data[j]));}temp = temp + L->data[i];}return temp;}void Langmethod(void){int i;datatype x, f;cout << "请输入插值点:" << "\t";cin >> x;f = Langarange(B, D, x);i = Findi(B, x);Insert(B, x, i);Insert(D, f, i);printres(B);printres(D);}//////////////////////////牛顿多项式插值//////////////////////////// datatype Newtoninterpolation(sequenlist *X, sequenlist *F, datatype x) {int i, j, k;datacoa *FX;datatype temp1 = 0, temp2 = 0, Nn = 0;double temp = 1;FX = InitStruct();for (i = 1; i <= Numberx; i++){InsertA2(FX, X->data[i], i, 1);InsertA2(FX, F->data[i], i, 2);}for (j = 3; j <= Numberx + 1; j++){for (i = 1; i <= Numberx - j + 2; i++){temp1 = FX->data[i + 1][j - 1] - FX->data[i][j - 1];temp2 = FX->data[i + j - 2][1] - FX->data[i][1];InsertA2(FX, temp1 / temp2, i, j);}}Nn = FX->data[1][2];for (j = 3; j <= Numberx + 1; j++){for (k = 1; k <= j - 2; k++)temp = temp*(x - FX->data[k][1]);Nn = Nn + temp*FX->data[1][j];temp = 1;}return Nn;}void Newtonmethod(void){int i;datatype x, f;cout << "请输入插值点:" << "\t";cin >> x;f = Newtoninterpolation(B, D, x);i = Findi(B, x);Insert(B, x, i);Insert(D, f, i);printres(B);printres(D);}●拟合部分头文件#ifndef _ALFITTING_H#define _ALFITTING_H#include "stdio.h"#include "stdlib.h"void ColumnGaussmethod(datacoa *A, int Xnumbers);void Fpolynomial(void);#endif●拟合部分CPP文件#include "alfitting.h"#include "stdafx.h"#include "squencelist.h"#include "equation.h"#include "math.h"//////////////////////////列主元高斯消元法//////////////////////////// void ColumnGaussmethod(datacoa *A, int Xnumbers){int i, j, i2, flagc, k, j2;int Fnumber = Xnumbers - 1;datatype temp, res;for (i = 1; i < Fnumber; i++){flagc = i;for (i2 = i + 1; i2 <= Fnumber; i2++)if ((fabs(A->data[i2][i]))>(fabs(A->data[flagc][i])))flagc = i2;if (flagc != i)for (k = i; k <= Xnumbers; k++){temp = A->data[i][k];A->data[i][k] = A->data[flagc][k];A->data[flagc][k] = temp;}for (i2 = i + 1; i2 <= Fnumber; i2++){temp = A->data[i2][i] / A->data[i][i];for (j2 = i; j2 <= Xnumbers; j2++)A->data[i2][j2] = A->data[i2][j2] - temp*A->data[i][j2];}}for (i = Fnumber; i >= 1; i--){for (j = Fnumber; j >= i + 1; j--)A->data[i][Xnumbers] = A->data[i][Xnumbers] - A->data[i][j] * A->data[j][Xnumbers + 1];res = A->data[i][Xnumbers] / A->data[i][i];InsertA2(A, res, i, Xnumbers + 1);}}//////////////////////////多项式拟合////////////////////////////void Fpolynomial(void){int Xnumbers;int i, j, k;datatype s = 0, t = 0;datacoa *A;A = InitStruct();cout << "请输入拟合次数:" << "\t";cin >> Xnumbers;for (i = 1; i <= Xnumbers + 1; i++){for (j = 1; j <= Xnumbers + 1; j++){for (k = 1; k <= B->last; k++)s = s + pow(B->data[k], j + i - 2);InsertA2(A, s, i, j);s = 0;}for (k = 1; k <= B->last; k++)t = t + pow(B->data[k], i - 1)*D->data[k];InsertA2(A, t, i, Xnumbers + 2);t = 0;}ColumnGaussmethod(A, A->n);printfunctionf(A);}3.4数据结构部分数据结构头文件#ifndef _SQUENCELIST_H#define _SQUENCELIST_H#include "stdio.h"#include "stdlib.h"#include "stdafx.h"#include<iostream>using namespace std;#define maxsize 1024/***sequenlist*/typedef double datatype;typedef struct{datatype data[maxsize][maxsize];int m, n;}datacoa;typedef struct{datatype data[maxsize];int last;}sequenlist;sequenlist *InitList();int Length(sequenlist*);int Insert(sequenlist*, datatype, int);int Delete(sequenlist*, int);int Locate(sequenlist*, datatype);void del_node(sequenlist*, datatype); void PrintList(sequenlist*);int Compare_L(sequenlist*, sequenlist*); int Findi(sequenlist*L, datatype x);void Invert(sequenlist*);datacoa *InitStruct();int InsertA2(datacoa*, datatype, int, int);void DeleteLie(datacoa*L, int j);void DeleteLine(datacoa*L, int i);/***linklist*/typedef char linkdatatype;typedef struct node{linkdatatype data;struct node*next;}linklist;linklist* CreateListF();#endif数据结构CPP文件#include "stdafx.h"#include "squencelist.h"///////////////////////////////////数据结构部分//////////////////////////////////////////////////////////////////////////////sequenlist/////////////////////////////////////////// sequenlist *InitList(){sequenlist*L = (sequenlist*)malloc(sizeof(sequenlist));L->last = 0;return L;// sequenlist*L = new sequenlist;}int Length(sequenlist*L){return L->last;}int Insert(sequenlist*L, datatype x, int i){int j;if (L->last >= maxsize - 1)cout << "表已满" << endl;return 0;}for (j = L->last; j >= i; j--)L->data[j + 1] = L->data[j];L->data[i] = x;L->last++;return 1;}int Delete(sequenlist*L, int i){int j;if ((i<1) || (i>L->last)){cout << "非法删除位置" << endl;return 0;}for (j = i; j <= L->last; j++)L->data[j] = L->data[j + 1];L->last--;return 1;}int Locate(sequenlist*L, datatype x){int i = 1;while (i <= L->last){if (L->data[i] != x)i++;else return i;}return 0;}/*顺序表中删除所有元素为x的结点*/ void del_node(sequenlist*L, datatype x) {int i = Locate(L, x);while (i != 0)if (!Delete(L, i))break;i = Locate(L, x);}}void PrintList(sequenlist*L){int i = 1;for (i = 1; i <= L->last; i++)cout << L->data[i] << ' ';cout << endl;}int Compare_L(sequenlist*A, sequenlist*B) {int j = 1;int i = 0;int n, m;n = A->last;m = B->last;while ((j <= n) && (j <= m)){if (A->data[j] == B->data[j])i = 0;if (A->data[j] < B->data[j]){i = -1;break;}if (A->data[j] > B->data[j]){i = 1;break;}j++;}if (i != 0)return i;else{if (m < n)i = 1;if (n < m)i = -1;if (m == n)i = 0;return i;}int Findi(sequenlist*L,datatype x){int i;for (i = 1; i < L->last; i++)if (L->data[i]>x)break;return i;}void Invert(sequenlist*L){int i;datatype temp;for (i = 1; i <= L->last / 2; i++){temp = L->data[i];L->data[i] = L->data[L->last + 1 - i];L->data[L->last + 1 - i] = temp;}}///////////////////////////////////ARRAY[][]/////////////////////////////////////////// datacoa *InitStruct(){datacoa*L = (datacoa*)malloc(sizeof(datacoa));L->m = 0;L->n = 0;return L;// datacoa*L = new datacoa;}int InsertA2(datacoa*L, datatype x, int i, int j){int k;if ((L->m >= maxsize - 1) || (L->n >= maxsize - 1)){cout << "表已满" << endl;return 0;for (k = L->n; k >= j; k--)L->data[i][k + 1] = L->data[i][k];L->data[i][j] = x;if (i > L->m)L->m++;if (j > L->n)L->n++;return 1;}void DeleteLie(datacoa*L, int j){int k, i;if ((j<1) || (j>L->n)){cout << "非法删除位置" << endl;}for (i = 1; i <= L->m; i++){for (k = j; k <= L->n; k++)L->data[i][j] = L->data[i][j + 1];}L->n--;}void DeleteLine(datacoa*L, int i){int k, j;if ((i<1) || (i>L->m)){cout << "非法删除位置" << endl;}for (j = 1; j <= L->n; j++){for (k = i; k <= L->m; k++)L->data[i][j] = L->data[i + 1][j];}L->m--;}///////////////////////////////////linklist/////////////////////////////////////////// linklist* CreateListF(){linklist *head, *p;char ch;head = (linklist*)malloc(sizeof(linklist));head->next = NULL;cin >> ch;while (ch != '\n'){p = (linklist*)malloc(sizeof(linklist));p->data = ch;p->next = head->next;head->next = p;}return head;}4运行结果4.1拉格朗日插值法运行结果4.2牛顿插值法运行结果4.3多项式拟合运行结果5总结拉格朗日插值法拉格朗日插值法和牛顿算法比起来比较简单,注意迭代的次序。