牛顿插值法实验报告
- 格式:doc
- 大小:55.00 KB
- 文档页数:3
牛顿插值法实验报告篇一:牛顿插值法实验报告牛顿插值法一、实验目的:学会牛顿插值法,并应用算法于实际问题。
二、实验内容:给定函数f?x,已知:f?? f?f??三、实验要求:(1)用牛顿插值法求4次Newton 插值多项式在处的值,以此作为函数的近似值?N。
在MATLAB中用内部函数ezplot绘制出4次Newton插值多项式的函数图形。
(2)在MATLAB中用内部函数ezplot可直接绘制出以上函数的图形,并与作出的4次Newton插值多项式的图形进行比较。
四、实验过程:1、编写主函数。
打开Editor编辑器,输入Newton插值法主程序语句:function [y,L]=newdscgn=length; z=x; A=zeros;A=Y’;s=; p=;for j=2:nfor i=j:nA=- A)/-X);endendC=A;for k=:-1:1C=conv));d=length;C=C+A;endy= polyval;L=poly2sym;%%%%%%%%%%%%%%%%%%t=[2,,,,];fx=sqrt;wucha=fx-Y;以文件名保存。
2、运行程序。
(1)在MATLAB命令窗口输入:>> X=[2,,,,]; Y=[,,,,];x=;[y,P]=newdscg回车得到:y =wucha = *-P = - /2305843009213693952 +/288230376151711744 -/1125899906842624 +/2251799813685248 + 1865116246031207/4503599627370496(2)在MATLAB命令窗口输入:>> v=[0,6,-1,3];>> ezplot,axis,grid>> hold on>> x=0::6;>> yt=sqrt;plot>> legend>> xlabel>> ylabel>>title回车即可得到图像1-1。
数值计算实验二姓名:方小开学号:20060810202 班级:计科0602一. 实验目的:1、差分的matlab实现;2、Newton插值的matlab实现;二. 实验原理:MATLAB在线性代数,矩阵分析,数值及优化,数理统计和随机信号分析,电路系统,系统动力学,信号与图像处理,控制理论分析和系统设计,过程控制,建模和仿真,通信系统,等有广泛的应用。
它具有功能强大,界面友好,语言自然即开放性等特点。
三.试验环境MATLAB7.0四. 试验过程及现象:1、牛顿插值公式:把下面的matlab程序在matlab中建立M-file文件并保存;function [d,v1]=newtonjz(x,y,v) %d 插商表 v是要插入x v1是插入的y值n=length(x);d=zeros(n,n);d(:,1)=y';for j=2:nfor i=j:nd(i,j)=(d(i,j-1)-d(i-1,j-1))/(x(i)-x(i-j+1));endendw=1;v1=d(1,1);for i=2:nw=w*(v-x(i-1));v1=v1+d(i,i)*w;end分别给x,y赋初值,并调用Newton插值函数得到结果如下:x=[0.40,0.55,0.65,0.80,0.90,1.05];y=[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382];[z,xy]=newtonjz(x,y,0.596);z =0.4108 0 0 0 0 00.5782 1.1160 0 0 0 00.6967 1.1860 0.2800 0 0 00.8881 1.2757 0.3589 0.1973 0 01.0265 1.3841 0.4335 0.2130 0.0312 01.2538 1.5153 0.5249 0.2287 0.0314 0.0003xy =0.63192Newton前插公式:把Newton前插公式的matlab程序写在matlab中建立M-file文件并保存;function [d,v1]=newtonBefore(x,y,t)n=length(x);d=zeros(n,n);d(:,1)=y';for j=2:nfor i=1:n-j+1d(i,j)=(d(i+1,j-1)-d(i,j-1));endendw=1;m=1;v1=d(1,1);for i=2:nw=w*(t-i+2);m=m*(i-1);v1=v1+d(1,i)*(w/m);end分别给x,y赋初值,并调用Newton前插函数得到结果如下;x=[1 1.05 1.10 1.15 1.20 1.25 1.30];y=[1 1.0247 1.04881 1.07238 1.09544 1.11803 1.14017];>> [z,qc]=newtonBefore(x,y,0.2);qc =1.004992263808003、Newton后插公式:把Newton后插公式的matlab程序写在matlab中建立M-file文件并保存;function [d,v1]=newtonAfter(x,y,t)n=length(x);d=zeros(n,n);d(:,1)=y';for j=2:nfor i=j:nd(i,j)=(d(i,j-1)-d(i-1,j-1));endendw=1;m=1;v1=d(1,1);for i=2:nw=w*(t+i-2);m=m*(i-1);v1=v1+d(n,i)*(w/m);end分别给x,y赋初值,并调用Newton后插函数得到结果如下;x=[1 1.05 1.10 1.15 1.20 1.25 1.30];y=[1 1.0247 1.04881 1.07238 1.09544 1.11803 1.14017];>> [z,hc]=newtonAfter(x,y,-0.4);hc=1.13136982835200五.遇到的问题在调试的过程中也遇到了一些小小的问题,如输出的结果只显示4位有效数字,结果的精度太低了,不能满足要求,因此在matlab中把数据的格式从short型改成了long型,这样就大大的提高了结果的精确度,减少了误差。
竭诚为您提供优质文档/双击可除newton插值法实验报告篇一:牛顿插值法matlab程序《计算方法》数值实验报告篇二:数值分析实验报告(插值法)武汉理工大学学生实验报告书实验课程名称数值分析开课学院计算机科学与技术学院指导老师姓名学生姓名学生专业班级20XX—20XX学年第一学期实验课程名称:数值分析篇三:c++实现牛顿插值法实验报告数值实验用newton商差公式进行插值姓名:陈辉学号:13349006院系:数据科学与计算机学院专业:计算机科学与技术班级:计科一班日期:20XX-10-11指导老师:纪庆革目录一、二、三、四、五、六、七、八、实验目的................................................. .........................................3实验题目................................................. .........................................3实验原理与基础理论................................................. .......................3实验内容................................................. .........................................6实验结果................................................. .......................................10心得体会................................................. .......................................14参考资料................................................. .......................................14附录(源代码)............................................... (14)一、实验目的编写一个程序,用牛顿差商公式进行插值。
一、实习目的通过本次实习,我深入了解了牛顿插值法的基本原理,掌握了其计算方法,并能够熟练运用牛顿插值法解决实际问题。
实习过程中,我结合实际数据,运用牛顿插值法进行计算,分析了插值结果,并对插值方法进行了总结和评价。
二、实习内容1. 牛顿插值法的基本原理牛顿插值法是一种构建插值多项式的方法,通过计算差商(divided differences)来逐步构建插值多项式。
该方法具有较好的计算效率和承袭性,即在添加或删除数据点时,可以基于已有计算结果进行调整,无需完全重新计算。
2. 牛顿插值法的计算步骤(1)初始化差商表,第0列初始化为ypoints。
(2)计算i阶差商,根据差商计算插值多项式。
(3)根据计算出的差商构造最终的插值多项式。
(4)计算x的估计函数值。
3. 实际应用以一组实际数据为例,运用牛顿插值法进行计算。
(1)选取一组已知数据点,计算差商。
(2)根据差商构造牛顿插值多项式。
(3)利用牛顿插值多项式估算未知点的函数值。
三、实习结果与分析1. 插值结果通过对实际数据的计算,牛顿插值法得到了较为准确的插值结果。
与实际值相比,插值值具有较高的精度。
2. 插值误差分析(1)在数据点较少的情况下,牛顿插值法具有较高的精度。
(2)在数据点较多的情况下,牛顿插值法可能会出现误差,但总体上仍具有较高的精度。
(3)插值误差与数据点的分布、差商的计算精度等因素有关。
四、实习总结与评价1. 牛顿插值法是一种有效的插值方法,具有较好的计算效率和承袭性。
2. 在实际应用中,根据数据点的分布和精度要求,选择合适的插值方法。
3. 牛顿插值法在实际应用中具有较高的精度,但在某些情况下可能会出现误差。
4. 在后续的实习中,我将进一步学习其他插值方法,如拉格朗日插值法、样条插值法等,以便在实际问题中灵活运用。
五、实习体会通过本次实习,我对牛顿插值法有了更深入的了解,掌握了其计算方法,并能够将其应用于实际问题。
在实习过程中,我认识到理论知识与实际应用相结合的重要性,以及选择合适的插值方法对于提高计算精度的重要性。
牛顿插值法一、实验目的及要求1、掌握牛顿插值法的思想和解题方法;2、编程实现牛顿插值公式求函数值;3、会进行误差分析。
二、实验原理牛顿差商形式的多项式:+--+-+=))(](,,[)](,[)()(102100100x x x x x x x f x x x x f x f x P)()](,,,[1010---+n n x x x x x x x f牛顿插值多项式的余项:)(],,,[)(10x x x x f x R n n n +=ω三、研究、解答以下问题问题:1、已知27)4(=-f ,1)0(=f ,2)1(=f ,17)2(=f 作三次牛顿插值多项式,计算)345.2(-f 的近似值,并估计其误差。
2、给出节点03.37)15.3(=-f ,24.7)00.1(=-f ,05.1)01.0(=f ,03.2)02.1(=f ,06.17)03.2(=f ,05.23)25.3(=f ,分别构造一次、二次和四次牛顿插值多项式计算)09.1(f 的近似值。
3、求函数5/7)(x e x f --=在]6,2[上的五次牛顿插值多项式,计算)156.3(f ,并估计误差。
实验答案:1. 程序:a.function [A,C,L]=newtoncz(X,Y)n=length(X);A=zeros(n,n);A(:,1)=Y';for j=2:nfor i=j:nA(i,j)=(A(i,j-1)-A(i-1,j-1))/(X(i)-X(i-j+1)); endendC=A(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)));d=length(C);C(d)=C(d)+A(k,k);endL=poly2sym(C);b.X=[-4 0 1 2]Y=[27 1 2 17][A,C,L]=newtoncz(X,Y)M=polyval(C,-2.345)结果:X =-4 0 1 2Y =27 1 2 17A =27.0000 0 0 01.0000 -6.5000 0 02.0000 1.0000 1.5000 017.0000 15.0000 7.0000 0.9167C =0.9167 4.2500 -4.1667 1.0000L =11/12*x^3+17/4*x^2-25/6*x+1M =22.3211误差:function [R]=wucha(M,x,X)n=length(X);r=1;q=1;for i=1:n;r=i*r;q=(x-X(i))*q;endR=M*abs(q)/rb.syms Mx=-2.345X=[-4,0,1,2][R]=wucha(M,x,X)结果:x = -2.3450X =-4 0 1 2R =1323077530165133/562949953421312*MR =1323077530165133/562949953421312*M2.程序:a.function [A,C,L]=newtoncz(X,Y)n=length(X);A=zeros(n,n);A(:,1)=Y';for j=2:nfor i=j:nA(i,j)=(A(i,j-1)-A(i-1,j-1))/(X(i)-X(i-j+1));endendC=A(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)));d=length(C);C(d)=C(d)+A(k,k);endL=poly2sym(C);b. 一次牛顿插值多项式X=[1.02 2.03]Y=[2.03 17.06][A,C,L]=newtoncz(X,Y)M=polyval(C,1.09)结果:X =1.02002.0300Y =2.0300 17.0600A =2.0300 017.0600 14.8812C =14.8812 -13.1488L =1503/101*x-7402123036060447/562949953421312M = 3.0717c. 二次牛顿插值多项式X=[0.01 1.02 2.03]Y=[1.05 2.03 17.06][A,C,L]=newtoncz(X,Y)M=polyval(C,1.09)结果:X =0.0100 1.0200 2.0300Y =1.05002.0300 17.0600A =1.0500 0 02.0300 0.9703 017.0600 14.8812 6.8866C =6.8866 -6.1229 1.1105L =70250/10201*x^2-215429692038271/35184372088832*x+2500714087374863/2251799813685 248M =2.6185d. 四次牛顿插值多项式X=[-1.00 0.01 1.02 2.03 3.25]Y=[7.24 1.05 2.03 17.06 23.05][A,C,L]=newtoncz(X,Y)M=polyval(C,1.09)结果:X = -1.0000 0.0100 1.0200 2.0300 3.2500Y =7.2400 1.0500 2.0300 17.0600 23.0500A =7.2400 0 0 0 01.0500 -6.1287 0 0 02.0300 0.97033.5144 0 017.0600 14.8812 6.8866 1.1129 023.0500 4.9098 -4.4715 -3.5056 -1.0867C =-1.0867 3.3516 4.5230 -6.0453 1.1100L =-611762439748959/562949953421312*x^4+1886762043973075/562949953421312*x^3+50924 65223944159/1125899906842624*x^2-425397102392759/70368744177664*x+1249745430756 363/1125899906842624M = 2.70093.程序:a.function [A,C,L]=newtoncz(X,Y)n=length(X);A=zeros(n,n);A(:,1)=Y';for j=2:nfor i=j:nA(i,j)=(A(i,j-1)-A(i-1,j-1))/(X(i)-X(i-j+1));endendC=A(n,n);for k=(n-1):-1:1C=conv(C,poly(X(k)));d=length(C);C(d)=C(d)+A(k,k);endL=poly2sym(C);b.X=2:0.8:6Y=-7*exp(-X/5)[A,C,L]=newtoncz(X,Y)M=polyval(C,3.156)结果:X = 2.0000 2.8000 3.6000 4.4000 5.2000 6.0000Y =-4.6922 -3.9985 -3.4073 -2.9035 -2.4742 -2.1084A =-4.6922 0 0 0 0 0-3.9985 0.8672 0 0 0 0-3.4073 0.7390 -0.0801 0 0 0-2.9035 0.6297 -0.0683 0.0049 0 0-2.4742 0.5366 -0.0582 0.0042 -0.0002 0-2.1084 0.4573 -0.0496 0.0036 -0.0002 0.000C =0.0000 -0.0004 0.0089 -0.1389 1.3985 -6.9991L =9721799720875/1152921504606846976*x^5-3503994098647815/9223372036854775808*x^4+1607 42008798419/18014398509481984*x^3-1251152213853501/9007199254740992*x^2+62981319043 28647/4503599627370496*x-3940156929554013/562949953421312M = -3.7237误差:function [R]=wucha(M,x,X)n=length(X);r=1;q=1;for i=1:n;r=i*r;q=(x-X(i))*q;endR=M*abs(q)/rb.syms Mx=3.156X=2:0.8:6[R]=wucha(M,x,X)结果:x = 3.1560X = 2.0000 2.8000 3.6000 4.4000 5.2000 6.0000R = 5950883395542623/3242591731706757120*M。
第1篇一、实验目的1. 理解并掌握插值法的基本原理和常用方法。
2. 学习使用拉格朗日插值法、牛顿插值法等数值插值方法进行函数逼近。
3. 分析不同插值方法的优缺点,并比较其精度和效率。
4. 通过实验加深对数值分析理论的理解和应用。
二、实验原理插值法是一种通过已知数据点来构造近似函数的方法。
它广泛应用于科学计算、工程设计和数据分析等领域。
常用的插值方法包括拉格朗日插值法、牛顿插值法、样条插值法等。
1. 拉格朗日插值法拉格朗日插值法是一种基于多项式的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等。
2. 牛顿插值法牛顿插值法是一种基于插值多项式的差商的插值方法。
其基本思想是:给定一组数据点,构造一个次数不超过n的多项式,使得该多项式在这些数据点上的函数值与已知数据点的函数值相等,并且满足一定的差商条件。
三、实验内容1. 拉格朗日插值法(1)给定一组数据点,如:$$\begin{align}x_0 &= 0, & y_0 &= 1, \\x_1 &= 1, & y_1 &= 4, \\x_2 &= 2, & y_2 &= 9, \\x_3 &= 3, & y_3 &= 16.\end{align}$$(2)根据拉格朗日插值公式,构造插值多项式:$$P(x) = \frac{(x-x_1)(x-x_2)(x-x_3)}{(x_0-x_1)(x_0-x_2)(x_0-x_3)}y_0 + \frac{(x-x_0)(x-x_2)(x-x_3)}{(x_1-x_0)(x_1-x_2)(x_1-x_3)}y_1 + \frac{(x-x_0)(x-x_1)(x-x_3)}{(x_2-x_0)(x_2-x_1)(x_2-x_3)}y_2 + \frac{(x-x_0)(x-x_1)(x-x_2)}{(x_3-x_0)(x_3-x_1)(x_3-x_2)}y_3.$$(3)计算插值多项式在不同点的函数值,并与实际值进行比较。
拉格朗日牛顿插值法实验报告-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN标题:实验一拉格朗日插值法算法与牛顿插值算法一、实验目的:1.体会并了解拉格朗日插值法,用计算机插入x值,输出相应的y值。
2.体会并了解牛顿插值法,用计算机插入x值,输出相应的y值。
二、实验原理:1.拉格朗日插值法的插值公式:L n(x)=∑y knk=0(x−x0)(x−x1)?(x−x n)(x−x k)(x k−x0)?(x k−x k−1)(x k−x k+1)?(x k−x n)2.牛顿插值法的插值公式:P n(x)=f(x0)+f[x0,x1](x−x0)+f[x0,x1,x2](x−x0)(x−x1)+?+f[x0,x1,?,x n](x−x0)?(x−x n−1)f[x0,x1,?,x k]=∑f(x j)(x j−x0)?(x j−x j−1)(x j−x j+1)?(x j−x k)kj=0三、算法设计与程序流程图:1.拉格朗日插值法算法分析:a.输入节点的个数j。
b.输入节点的横纵坐标。
c.输入新插入的节点的横坐标。
d.通过两次循环求得新插入节点的纵坐标。
程序流程图:2.牛顿插值算法分析:a.输入节点的个数j。
b.输入节点的横纵坐标。
c.输入新插入的节点的横坐标。
d.通过两次循环求得新插入节点的纵坐标。
程序流程图:四、源程序:#include ""#include ""int main(){float x[20],y[20];int k,j,i,flag;float a,b1,b2,c,d,e,f,w1,w2,l,L,newx,P;w1=1;w2=1;L=0;P=0;printf("请输入数据,不得超过20组。
\n");printf("输入的数据为几组:");scanf("%d",&j);for(i=0;i<=j-1;i++){printf("第%d组为:\n",i+1);printf("x=");scanf("%f",&x[i]);printf("y=");scanf("%f",&y[i]);}printf("请选择:1,拉格朗日插值。
实验一报告拉格朗日插值法一、实验目的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 <n; 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值。
牛顿插值法
一、实验目的:学会牛顿插值法,并应用算法于实际问题。
二、实验内容:给定函数 x x f =)(,已知:
414214.1)0.2(=f 449138.1)1.2(=f 483240.1)2.2(=f
516575.1)3.2(=f 549193.1)4.2(=f
三、实验要求:
(1)用牛顿插值法求4次Newton 插值多项式在2.15处的值,以此作为函数的近似值)15.2(15.2N ≈。
在MATLAB 中用内部函数ezplot 绘制出4次Newton 插值多项式的函数图形。
(2)在MATLAB 中用内部函数ezplot 可直接绘制出以上函数的图形,并与作出的4次Newton 插值多项式的图形进行比较。
四、实验过程:
1、编写主函数。
打开Editor 编辑器,输入Newton 插值法主程序语句: function [y,L]=newdscg(X,Y,x)
n=length(X); z=x; A=zeros(n,n);A(:,1)=Y';s=0.0; p=1.0;
for j=2:n
for i=j:n
A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));
end
end
C=A(n,n);
for k=(n-1):-1:1
C=conv(C,poly(X(k)));
d=length(C);C(d)=C(d)+A(k,k);
end
y(k)= polyval(C, z);
L(k,:)=poly2sym(C);
%%%%%%%%%%%%%%%%%%
t=[2,2.1,2.2,2.3,2.4];
fx=sqrt(t);
wucha=fx-Y;
以文件名newdscg.m保存。
2、运行程序。
(1)在MATLAB命令窗口输入:
>> X=[2,2.1,2.2,2.3,2.4]; Y
=[1.414214,1.449138,1.483240,1.516575,1.549193];
x=2.15;[y,P]=newdscg(X,Y,x)
回车得到:
y =1.4663
wucha =1.0e-06 *
-0.4376 -0.3254 -0.3026 0.0888 0.3385
P = - (4803839603609061*x^4)/2305843009213693952 + (7806239355294329*x^3)/288230376151711744 - (176292469178709*x^2)/1125899906842624 + (1624739243112817*x)/2251799813685248 + 1865116246031207/4503599627370496
(2)在MATLAB命令窗口输入:
>> v=[0,6,-1,3];
>> ezplot(P),axis(v),grid
>> hold on
>> x=0:0.1:6;
>> yt=sqrt(x);plot(x,yt,':')
>> legend('插值效果','原函数')
>> xlabel('X')
>> ylabel('Y')
>>title('Newton插值与原函数比较')
回车即可得到图像1-1。
图1-1牛顿插值效果
五、实验结果分析:
由上运行(1)的程序可得,用牛顿插值法求4次Newton 插值多项式在2.15处函数的近似值)15.2(15.2N =1.4663。
由在MATLAB 中用内部函数ezplot 直接绘制出出的4次Newton 插值图形与原函数的图形知,4次Newton 插值图形在区间[0,1]与区间[4,5]内与原函数存在一定的偏差,而在区间[1,4]内误差在10的-6次方,这个精度是非常高的。
因此,在计算区间[1,4]内的值时结果是比较准确的。