实验一拉格朗日插值Matlab实验报告

合集下载

拉格朗日实验报告

拉格朗日实验报告

09信息郭凯 39号拉格朗日插值实验报告#include<stdio.h>int main(){int i,n,j;float a[50],b[50],x,l,y;printf("enter n:");scanf("%d",&n);for(i=0;i<=n;i++){printf("x[%d] y[%d]:",i,i);scanf("%f%f",&a[i],&b[i]);}printf("enter x:");scanf("%f",&x);y=0;for(i=0;i<=n;i++){l=1;for(j=0;j<=n;j++){if(j!=i)l=l*(x-a[j])/(a[i]-a[j]);}y=y+l*b[i];}printf("y=%f\n",y);return 0;}例:给出函数f(x)=sinx的3组对应的函数值如下表:利用线性插值及抛物插值计算sin0.3367的值并估计截断误差。

解:(1.1)利用以上程序,由于是利用线性插值,则首先输入n的值为1,由于0.3367介于0.32与0.34之间,故依次输入2对x与相对应的f(x)的值,再输入x的值即0.3367,即可得如下测试结果:即计算所得的sin0.3367的值为0.330365误差分析:余项R1(x)=f(x)-L1(x)=f(2)(q)(x-x0)(x-x1) /2!|R2(x)|≦M2|(0.3367-0.32)(0.3367-0.34) |/2,其中 M2=max0.32≦x≦0.34| f(2)(x)|=sin0.34<0.3335于是|R2(0.3367)|=|sin0.3367- L1(0.3367)|≦0.3335*0.0167*0.033/2<0.92*10-5(1.2)由于题目中给出了3个x的值,故可选用比0.3367大的两个x的值来计算,测试结果如下:误差分析同上类似,计算得|R2(0.3367)|<0.1266*10-4(2)利用以上程序,由于是利用抛物插值,则首先输入n的值为2,然后依次输入3对x 与相对应的f(x)的值,再输入x的值即0.3367,即可得如下测试结果:即计算所得的sin0.3367的值为0.330374误差分析:余项R2(x)=f(x)-L2(x)=f(3)(q)(x-x0)(x-x1)(x-x2)/3!| R2(x)|≦M3|(0.3367-0.32)(0.3367-0.34)(0.3367-0.36)|/6,其中M3=max0.32≦x≦0.36| f(3)(x)|=cos0.32<0.9493,于是| R2(0.3367)|=|sin0.3367- L2(0.3367)|≦0.9493*0.0167*0.033*0.0233/6<2.0132*10-6实验心得:由上述例子可以看出,(1.1)与(1.2)比较时,(1.1)的结果优于(1.2),即一般情况下,内插优于外推。

matlab插值与曲线拟合实验报告

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 -=+--在所构成的区间进行线性插值。

MATLAB数值实验一(数据的插值运算及其应用完整版)

MATLAB数值实验一(数据的插值运算及其应用完整版)

佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 插值法与数据拟合 专业班级 机械工程 姓 名 余红杰 学 号 10 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、学会Lagrange 插值、牛顿插值和三次样条插值等基本插值方法;2、讨论插值的Runge 现象3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。

二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、三次样条插值 三、实验步骤1、用MATLAB 编写独立的拉格朗日插值多项式函数2、用MATLAB 编写独立的牛顿插值多项式函数3、用MATLAB 编写独立的三次样条函数(边界条件为第一、二种情形)4、已知函数在下列各点的值为:根据步骤1,2,3编好的程序,试分别用4次拉格朗日多项式4()L x 、牛顿插值多项式4()P x 以及三次样条函数()S x (自然边界条件)对数据进行插值,并用图给出 {(,),0.20.08,0,1,2,,10i i i x y x i i =+=},4()L x 、4()P x 和()S x 。

5、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x=-≤≤+作多项式插值,对不同n 值,分别画出插值函数及()f x 的图形。

6、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。

(1)用这9个点作8次多项式插值8()L x 。

(2)用三次样条(第一边界条件)程序求()S x 。

7、对于给函数21()125f x x =+在区间[-1,1]上取10.2(0,1,,10)i x i i =-+=,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第5题的结果比较。

四、实验过程与结果:1、Lagrange 插值多项式源代码:function ya=lag(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 ya=0; mu=1; %初始化%循环方式求L 系数,并求和: for i = 1:length(y) for j = 1:length(x) if i ~= jmu = mu * (xa - x(j) ) / ( x(i) - x(j) ); else continue end endya = ya + y(i) * mu ; mu = 1; end2、Newton 源代码:function ya = newton(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 %建立系数零矩阵D 及初始化:D = zeros(length(x)-1);ya = y(1);xi = 1;%求出矩阵D,该矩阵第一行为牛顿插值多项式系数:for i=1:(length(x)-1)D(i,1) = (y(i+1) -y(i))/(x(i+1) -x(i));endfor j=2:(length(x)-1)for i=1:(length(x)-j)D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j) - x(i)); endend%xi为单个多项式(x-x(1))(x-x(2))...的值for i=1:(length(x)-1)for j=1:ixi = xi*(xa - x(j));endya = ya + D(1,i)*xi;xi = 1;end3、三次样条插值多项式(1)(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x) _____________(1)%第一类边界条件下三次样条插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0左端点一次导数值;%f_n右端点一次导数值;n = length(x0);z = length(y0);h = zeros(n-1,1);k=zeros(n-2,1);l=zeros(n-2,1);S=2*eye(n);for i=1:n-1h(i)= x0(i+1)-x0(i);endfor i=1:n-2k(i)= h(i+1)/(h(i+1)+h(i));l(i)= 1-k(i);end%对于第一种边界条件:k = [1;k]; _______________________(2)l = [l;1]; _______________________(3)%构建系数矩阵S:for i = 1:n-1S(i,i+1) = k(i);S(i+1,i) = l(i);end%建立均差表:F=zeros(n-1,2);for i = 1:n-1F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i));endD = zeros(n-2,1);for i = 1:n-2F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));D(i,1) = 6 * F(i,2);end%构建函数D:d0 = 6*(F(1,2)-f_0)/h(1); ___________(4)dn = 6*(f_n-F(n-1,2))/h(n-1); ___________(5)D = [d0;D;dn]; ______________(6)m= S\D;%寻找x所在位置,并求出对应插值:for i = 1:length(x)for j = 1:n-1if (x(i)<=x0(j+1))&(x(i)>=x0(j))y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+... (y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ; break;else continue;endendend(2)(自然边界条件)源代码:仅仅需要对上面部分标注的位置做如下修改:__(1):function y=yt2(x0,y0,x)__(2):k=[0;k]__(3):l=[l;0]__(4)+(5):删除—(6):D=[0:D:0]4、——————————————PS:另建了一个f方程文件,后面有一题也有用到。

数值分析实践报告-matlab

数值分析实践报告-matlab

数值计算实践数值实验报告院(系、部):数理系姓名:夏赞勋081628学号:班级:科082指导教师: 徐红敏2011年01月14日北京科082 夏赞勋(081628) 北京石油化工学院数理系拉格朗日插值法拉格朗日插值法基本原理:通过平面上不同两点可以确定一条直线,这就是拉格朗日线性插值问题,对于不在同一条直线的三个点得到的插值多项式则为抛物线。

拉格朗日插值的基多项式(即基函数)为:n i x x ••x •x x l ij j ji i i ,,2,1,0,)(0 =--=∏≠=有了基函数以后就可以直接构造如下多项式:∑==ni i i n x l x f p 0)()(该多项式就是拉格朗日插值法所求得的插值多项式.拉格朗日插值法算法:1、根据所给点),(i i y x 的坐标依次写出其差值基函数(用for 循环可以轻易解决)n i x x ••x •x x l ij j ji i i ,,2,1,0,)(0 =--=∏≠=2、将差值基函数与其对应的点的函数值相乘得:n i x l x f i i ,,2,1,0),()( =3、将2中各项累加即得差值多项式:∑==ni i i n x l x f p 0)()(拉格朗日插值法程序:fu nct ion lag range (A)%A为一个只有两行的矩阵,第一行为插值点,第二行为插值点对应的函数值[m,n]=siz e(A); f=1;p=0;%两个用到的变量syms xfor i=1:nf=(x—A(1,i))*f;endfor j=1:ng(j)=f/(x-A(1,j));%求插值基函数的分母h(j)=subs(g(j),x,A(1,j));%求插值基函数的分子s(j)=g(j)/h(j)*A(2,j);%插值基函数endfor k=1:ns(j)=collect(s(j));%合并同类项endfor i=1:np=p+s(i);endfprintf(’拉格朗日插值法可得多项式:')collect(p)%可用lagrange([13 6 8;4 6 9 12])调试例:有如下表格中有四个插值点及其对应的函数值,用lagrange插值法写出其三次插值多项式:解:在matlab命令窗口输入:lagrange([1 3 6 8;4 6 9 12])可得运行结果:拉格朗日插值法可得多项式:ans =x^3/70 - x^2/7 + (97*x)/70 + 96/35ﻬ牛顿插值法牛顿插值法基本原理:拉格朗日插值多项式的理论在许多方面都有应用,是很不错的一种方法,但就插值问题而言,如果增加一个插值点,原先计算插值的多项式就没有用了,即拉格朗日插值法的继承性很差,牛顿插值法就很好地解决了这个问题,具有很好的继承性。

拉格朗日插值公式数值分析实验报告

拉格朗日插值公式数值分析实验报告

学生学号27 实验课成绩
学生实验报告书
实验课程名称数值分析A
开课学院理学院
指导教师姓名金升平教授
学生姓名陶玮
学生专业班级统计1401
2015-- 2016学年第 2 学期
实验课程名称:__数值分析______
实验项目名称拉格朗日插值公式实验成绩
实验者陶玮专业班级统计1401 组别
同组者实验日期年月日一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
实验目的:
1、学习和掌握拉格朗日插值多项式。

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

实验基本原理:
拉格朗日插值基函数的一般形式:
也即是:
所以可以得出拉格朗日插值公式的一般形式:
其中,n=1时,称为线性插值,
n=2时,称为二次插值或抛物插值,精确度相对高些,
主要仪器设备:。

lagrange插值法上机实践报告

lagrange插值法上机实践报告
3.625000000000000
五、计算结果的分析
三次Lagrange插值多项式为:

2.125000000000000; 0.375000000000000; 3.625000000000000.
六、计算中出现的问题,解决方法及体会
从上面的试验结果中我们可以看出拉格朗日插值法在实际中的巨大作用,它能使因试验得到的复杂数据处理更简单化,对于一些没有明确函数关系的数据处理,通过插值法构造的近似函数能有效的反映原数据的特性,又在插值法中,拉格朗日插值是一种多节点选取的插值法,其构造结果更加渐进真实结果,则在实际中用的更多,所以在今后的操作中,如何得到更加近似于原试验数据的构造函数,即如何减小拉格朗日插值多项式误差计算问题是我们以后做研究时要重点关注和去解决的难点。
四、数值结果五、计算结果的分析 六、计算中出现的问题,解决方法及体会
一、实验目的、内容
实验目的:
1.了解lagrange插值法的基本原理和方法;
2.掌握拉格郎日插值多项式的用法,适用范围及精确度;
3.学习掌握MATLAB软件有关的命令。
内容:
已知数据点 ,求三次Lagrange插值多项式 , 并求
二、相关背景知识介绍

其中 为以 为节点的n次插值基函数,则 是一次数不超过n的多项式,且满足
, j=0,1,…,n
再由插值多项式的唯一性,得
上式表示的插值多项式称为拉格朗日(Lagrange)插值多项式。
三、代码(Matlab)
functiony = lagrange(x0,y0,x)
n = length(x0);
m = length(x);
(3)拉格朗日插值法的概述
拉格朗日插值用来求n个节点的(n-1)次插值多项式,它就是线性插值和抛物线插值的推广和延伸。我们设有n个节点,则拉格朗日插值的表达式表示为:

插值数值实验报告(3篇)

插值数值实验报告(3篇)

第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)计算插值多项式在不同点的函数值,并与实际值进行比较。

实验一拉格朗日插值M精编b实验报告

实验一拉格朗日插值M精编b实验报告

实验一拉格朗日插值M精
编b实验报告
The following text is amended on 12 November 2020.
北京理工大学珠海学院实验报告ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级2012电气2班学号xxxxxxxxx姓名陈冲指导教师张凯成绩
实验题目(实验一)拉格朗日插值实验地点及时间JD501 2013/12/26(6-7节)
一、实验目的
1.掌握用程序语言来编辑函数。

2.学会用MATLAB编写函数。

二、实验环境
Matlab软件
三、实验内容
1、以书中第55页题目13为例编辑程序来实现计算结果。

2、使用MATLAB进行编写:
第一步:编写函数,代码如下
第二步:利用这个函数来编辑命令:(可见实验结果中的截图)
x=[,,];
y=[sin,sin,sin];
x0=;
yt=Lagrange(x,y,x0)
得出抛物线插值为:
以及
x=[,];
y=[sin,sin];
x0=;
yt=Lagrange(x,y,x0)
得出线性插值为:
五、实验结果。

六、总结
通过这次实验我学会用MATLAB软件编辑口令进行计算,实验结果是正确的,我相信在以后的实验中,我可以做好每一步,练习好每一次的上机。

实验难度不是很大,主要要注意标点符号的正确性。

………。

拉格朗日牛顿插值法实验报告

拉格朗日牛顿插值法实验报告

拉格朗日牛顿插值法实验报告-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值。

数学实验MATLAB报告

数学实验MATLAB报告

数学实验报告一、实验目的1.掌握四种经典的插值方法:拉格朗日插值法,牛顿插值法,分段插值法,三次样条插值法。

2.学会用MATLAB软件进行数据插值计算。

3.学会用数据插值,数据拟合方法建立数学模型并求解。

二实验内容习题1海水温度随着深度的变化而变化,海面温度较高,随着深度的增加,海水温度越来越低。

通过实验测得一组海水深度h与温度t的数据如下:要求:1.分别用多种数据插值方法找出温度t与深度h之间的一个近似函数关系;2.找出温度变化最快的深度位置。

通过查询相关资料,了解这个特殊位置的实际应用价值。

三、实验思路1、先分别用拉格朗日插值、线性插值、三次样条插值进行插值计算,并求出变化最快的深度。

2、由于在全数据插值中有两个龙格库塔现象,故考虑把数据分为两段,其中前三个数据为第一段,分别用拉格朗日插值、线性插值、三次样条插值计算,并分段求出变化最快的深度。

但缺陷也很明显,体现在仍有一个龙格库塔现象没有消除,且第三个数据点附近函数不光滑。

四、程序展示(一)、插值计算的综合程序如下:注:p1,p2,p31,p32,p41,p42表示各数据用多项式拟合所得函数关系式re1为全段三次样条插值代表的最快变化温度re2为全段线性插值代表的最快变化温度re3为第一段三次样条插值代表的最快变化温度re4为第二段三次样条插值代表的最快变化温度re5为第一段拉格朗日插值代表的最快变化温度re6为第二段拉格朗日插值代表的最快变化温度t=[23.5,22.9,20.1,19.1,15.4,11.5,9.5,8.2];t1=[23.5,22.9,20.1];t2=[20.1,19.1,15.4,11.5,9.5,8.2];h=[0,1.5,2.5,4.6,8.2,12.5,16.5,26.5];h1=[0,1.5,2.5];h2=[2.5,4.6,8.2,12.5,16.5,26.5];h0=0:0.01:26.5;h01=0:0.01:2.5;h02=2.5:0.01:26.5;lglr=lglrcz(h,t,h0);xxcz=interp1(h,t,h0);sccz=interp1(h,t,h0,'spline');subplot(1,2,1)plot(h,t,'*',h0,lglr,'r-',h0,xxcz,'b-',h0,sccz ,'k-');grid;title('分段之前')axis([0 30 0 30])hold on;lglr1=lglrcz(h1,t1,h01);xxcz1=interp1(h1,t1,h01);sccz1=interp1(h1,t1,h01,'spline');lglr2=lglrcz(h2,t2,h02);xxcz2=interp1(h2,t2,h02);sccz2=interp1(h2,t2,h02,'spline');subplot(1,2,2)plot(h,t,'*',h01,lglr1,'r-',h01,xxcz1,'b-',h 01,sccz1,'k-',h02,lglr2,'r-',h02,xxcz2,'b-',h02,scc z2,'k-');grid;title('分段之后')axis([0 30 0 30])%%%%%%%%%%%%%%%%%% %%p1=polyfit(h0,sccz,3)p2=polyfit(h0,sccz,4)p31=polyfit(h01,lglr1,3)p32=polyfit(h02,lglr2,3)p41=polyfit(h01,sccz1,3)p42=polyfit(h02,sccz2,3)%%%%%%%%%%%%%%%%%%z1=diff(sccz);z2=diff(xxcz);z3=diff(sccz1);z4=diff(sccz2);z5=diff(lglr1);z6=diff(lglr2);min1=z1(1);min2=z2(1);min3=z3(1);min4=z4(1);min5=z5(1);min6=z6(1);xb1=[];xb2=[];xb3=[];xb4=[];xb5=[];xb 6=[];%%%%%%%%%%%%%%%%%% %%for i=1:1:2650if(z1(i)<min1)min1=z1(i);xb1=[xb1,i];endendj1=length(xb1);re1=0.01*xb1(j1)%%%%%%%%%%%%%%%%%% %for i=1:1:2650if(z2(i)<min2)min2=z2(i);xb2=[xb2,i];endendj2=length(xb2);re2=0.01*xb1(j2)%%%%%%%%%%%%%%%%%% %%for i=1:1:250if(z3(i)<min3)min3=z3(i);xb3=[xb3,i];endendj3=length(xb3);re3=0.01*xb3(j3)%%%%%%%%%%%%%%%%%%%%for i=1:1:2400if(z4(i)<min4)min4=z4(i);xb4=[xb4,i];endendj4=length(xb4);re4=0.01*xb4(j4)+2.5%%%%%%%%%%%%%%%%%% %%%%%for i=1:1:250if(z5(i)<min5)min5=z5(i);xb5=[xb5,i];endendj5=length(xb5);re5=0.01*xb5(j5)%%%%%%%%%%%%%%%%%% %for i=1:1:2400if(z6(i)<min6)min6=z6(i);xb6=[xb6,i];endendj6=length(xb6);re6=0.01*xb6(j6)+2.5结果如下:re1=1.82(较为准确)re2=0.03(不准确)re3=2.5(此处不光滑,舍)re4=7.39(较为准确)re5=2.5(此处不光滑,舍)re6=7.39(较为准确)p1 =0.0002 0.0235 -1.3354 24.4766p2 =-0.0000 0.0019 -0.0056 -1.1641 24.2499p31 =-0.0000 -0.9600 1.0400 23.5000p32 =0.0002 0.0185 -1.2618 24.2132p41 =0.0000 -0.9600 1.0400 23.5000p42 =0.0002 0.0233 -1.3282 24.4303p1为全段三次插值的4次多项式函数系数p2为全段线性插值的4次多项式函数系数p31,p32为第一、二段拉格朗日插值的4次多项式函数系数p41,p42为第一、二段三次插值的4次多项式函数系数如图可看出,分段前后的差别,以及分段的局限性。

拉格朗日插值法实验报告

拉格朗日插值法实验报告

拉格朗日插值法实验报告一、实验目的1、学习和掌握拉格朗日插值多项式。

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

二、算法步骤函数定义double lgrr(int n,double X)输入所求节点x和已知的节点数n输出插值结果s步骤:1、输入n对数(x[i],y[i])(i=0--n)2、令s=03、对于 i=0-n T=y[i]对j=0- n但j!=i T=T*(X-x[j])/(x[i]-x[j]) 令s=s+T4、输出结果三流程图四、原程序#include<stdio.h>main(){double X;int n;double lgrr(int n,double X);printf("input the aim number'X' ");printf("input the number of pairs of numbers 'n':");scanf("%lf%d",&X,&n);lgrr(n,X);return 0;}double lgrr(int n,double X){double s=0,t;double x[81],y[81];int i,j;printf("input n pairs of numbers:\n"); for(i=0;i<n;i++)scanf("%lf%lf",&x[i],&y[i]);for(i=0;i<n;i++){t=y[i];for(j=0;j<n;j++){if(j!=i)t=t*(X-x[j])/(x[i]-x[j]);}s=s+t;}printf("s=%f\n",s);return 0;}作业用程序#include<stdio.h>main(){double X;int n;double lgrr(int n,double X);printf("input the aim number'X' ");printf("input the number of pairs of numbers 'n':");scanf("%lf%d",&X,&n);lgrr(n,X);return 0;}double lgrr(int n,double X){FILE *fp;double s=0,t,z;double x[81],y[81];int i,j,k;if((fp=fopen("lgrr.txt","r+"))==NULL) printf("can not open the file.");printf("input n pairs of numbers:\n"); for(i=0;i<n;i++)scanf("%lf%lf",&x[i],&y[i]);for(k=0;k<=20;k++){for(i=0;i<n;i++){z=X+.01*k;t=y[i];for(j=0;j<n;j++){if(j!=i)t=t*(z-x[j])/(x[i]-x[j]);}s=s+t;}printf("s=%f\n",s);fprintf(fp,"s=%f\n",s);}return 0;}五、作业:3-27s=0.198670 s=0.407105 s=0.625307 s=0.853266 s=1.090966 s=1.338384 s=1.595493 s=1.862263 s=2.138663 s=2.424661 s=2.720224 s=3.025321 s=3.339921 s=3.663993 s=3.997507 s=4.340430 s=4.692730 s=5.054371s=5.425314 s=5.805512 s=6.194912。

实验一 拉格朗日插值Matlab实验报告

实验一 拉格朗日插值Matlab实验报告

北京理工大学珠海学院实验报告
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级2012电气2班学号xxxxxxxxx姓名陈冲指导教师张凯成绩
实验题目(实验一)拉格朗日插值实验地点及时间JD501 2013/12/26(6-7节)
一、实验目的
1.掌握用程序语言来编辑函数。

2.学会用MATLAB编写Lagrange.m函数。

二、实验环境
Matlab软件
三、实验内容
1、以书中第55页题目13为例编辑程序来实现计算结果。

2、使用MATLAB进行编写:
第一步:编写Lagrange.m函数,代码如下
第二步:利用这个函数来编辑命令:(可见实验结果中的截图)
x=[0.32,0.34,0.36];
y=[sin(0.32),sin(0.34),sin(0.36)];
x0=0.3367;
yt=Lagrange(x,y,x0)
得出抛物线插值为:0.3304
以及
x=[0.32,0.34];
y=[sin(0.32),sin(0.34)];
x0=0.3367;
yt=Lagrange(x,y,x0)
得出线性插值为:0.3304
的近似值并估计误差。

五、实验结果。

六、总结
通过这次实验我学会用MATLAB软件编辑口令进行计算,实验结果是正确的,我相信在以后的实验中,我可以做好每一步,练习好每一次的上机。

实验难度不是很大,主要要注意标点符号的正确性。

………。

实验一 拉格朗日插值法

实验一 拉格朗日插值法

三次差值试验结果:
— 4 —
实 验 一: 拉格朗日插值
实验目的: 1. 熟悉拉格朗日插值方法的程序设计; 2. 学会拉格朗日插值方法求函数值的近似值, 以解决其它科学实验的计算问题。 实验内容: 已知函数值表
xi f (xi )
-0.6 1.6
-0.2 2.4
0.2 1.2
0.4 3.2
ቤተ መጻሕፍቲ ባይዱ
试分别建立二次插值多项式和三次插值多项式,计算 f (0) 的近似值。 实验要求:屏幕显示 f (0) 的近似值。
=
k 1 k
结 束
— 2 —
实 验 报 告 (一)
辽宁科技大学 研究生 学院(系) 课名:数值分析 班级:研 12 姓名: 张贺 题目:拉格朗日插值 学号:12208190**** 专业: 矿业工程 任课教师:熊 焱 2012 年 09 月 20 日
实验程序:
— 3 —
实验结果: 二次差值试验
— 1 —
附件:拉格朗日插值算法框图
开 始
输 入 ( x i , y i ) , ( i= 0 ,1 , … , n )
0 y 0 k
1 t
x xj xk x j
t t
j 0 , , k 1, k 1, , n
y t yk y
k n?

输 出 y

数值分析matlab实验报告

数值分析matlab实验报告

数值分析matlab实验报告数值分析 Matlab 实验报告一、实验目的数值分析是研究各种数学问题数值解法的学科,Matlab 则是一款功能强大的科学计算软件。

本次实验旨在通过使用 Matlab 解决一系列数值分析问题,加深对数值分析方法的理解和应用能力,掌握数值计算中的误差分析、数值逼近、数值积分与数值微分等基本概念和方法,并培养运用计算机解决实际数学问题的能力。

二、实验内容(一)误差分析在数值计算中,误差是不可避免的。

通过对给定函数进行计算,分析截断误差和舍入误差的影响。

例如,计算函数$f(x) =\sin(x)$在$x = 05$ 附近的值,比较不同精度下的结果差异。

(二)数值逼近1、多项式插值使用拉格朗日插值法和牛顿插值法对给定的数据点进行插值,得到拟合多项式,并分析其误差。

2、曲线拟合采用最小二乘法对给定的数据进行线性和非线性曲线拟合,如多项式曲线拟合和指数曲线拟合。

(三)数值积分1、牛顿柯特斯公式实现梯形公式、辛普森公式和柯特斯公式,计算给定函数在特定区间上的积分值,并分析误差。

2、高斯求积公式使用高斯勒让德求积公式计算积分,比较其精度与牛顿柯特斯公式的差异。

(四)数值微分利用差商公式计算函数的数值导数,分析步长对结果的影响,探讨如何选择合适的步长以提高精度。

三、实验步骤(一)误差分析1、定义函数`compute_sin_error` 来计算不同精度下的正弦函数值和误差。

```matlabfunction value, error = compute_sin_error(x, precision)true_value = sin(x);computed_value = vpa(sin(x), precision);error = abs(true_value computed_value);end```2、在主程序中调用该函数,分别设置不同的精度进行计算和分析。

(二)数值逼近1、拉格朗日插值法```matlabfunction L = lagrange_interpolation(x, y, xi)n = length(x);L = 0;for i = 1:nli = 1;for j = 1:nif j ~= ili = li (xi x(j))/(x(i) x(j));endendL = L + y(i) li;endend```2、牛顿插值法```matlabfunction N = newton_interpolation(x, y, xi)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));endend%计算插值结果N = D(1, 1);term = 1;for i = 2:nterm = term (xi x(i 1));N = N + D(i, i) term;endend```3、曲线拟合```matlab%线性最小二乘拟合p = polyfit(x, y, 1);y_fit_linear = polyval(p, x);%多项式曲线拟合p = polyfit(x, y, n);% n 为多项式的次数y_fit_poly = polyval(p, x);%指数曲线拟合p = fit(x, y, 'exp1');y_fit_exp = p(x);```(三)数值积分1、梯形公式```matlabfunction T = trapezoidal_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);T = h ((y(1) + y(end))/ 2 + sum(y(2:end 1)));end```2、辛普森公式```matlabfunction S = simpson_rule(f, a, b, n)if mod(n, 2) ~= 0error('n 必须为偶数');endh =(b a) / n;x = a:h:b;y = f(x);S = h / 3 (y(1) + 4 sum(y(2:2:end 1))+ 2 sum(y(3:2:end 2))+ y(end));end```3、柯特斯公式```matlabfunction C = cotes_rule(f, a, b, n)h =(b a) / n;x = a:h:b;y = f(x);w = 7, 32, 12, 32, 7 / 90;C = h sum(w y);end```4、高斯勒让德求积公式```matlabfunction G = gauss_legendre_integration(f, a, b)x, w = gauss_legendre(5);%选择适当的节点数t =(b a) / 2 x +(a + b) / 2;G =(b a) / 2 sum(w f(t));end```(四)数值微分```matlabfunction dydx = numerical_derivative(f, x, h)dydx =(f(x + h) f(x h))/(2 h);end```四、实验结果与分析(一)误差分析通过不同精度的计算,发现随着精度的提高,误差逐渐减小,但计算时间也相应增加。

拉格朗日插值算法及应用实验报告

拉格朗日插值算法及应用实验报告

拉格朗日插值算法及应用实验报告一、引言拉格朗日插值法是一种常用的数值插值方法,可用于在已知数据点之间估计函数值。

该方法的基本思想是通过构造一个多项式来逼近给定的数据点集合,从而实现对函数的插值。

本实验旨在通过实际计算的方式探讨拉格朗日插值法的基本原理与应用。

二、拉格朗日插值法原理拉格朗日插值法利用多项式的性质来对给定的数据进行插值。

给定n+1个不同的数据点(x_0,y_0),(x_1,y_1),...,(x_n,y_n),其中x_i表示自变量,y_i表示因变量。

拉格朗日插值多项式的表达式为:P_n(x)=y_0*L_0(x)+y_1*L_1(x)+...+y_n*L_n(x)其中L_i(x)为拉格朗日基函数,定义如下:L_i(x)=(x-x_0)(x-x_1)...(x-x_i-1)(x-x_i+1)...(x-x_n)/[(x_i-x_0)(x_i-x_1)...(x_i-x_i-1)(x_i-x_i+1)...(x_i-x_n)]三、应用实验本实验选取了不同的数据点集合,并利用拉格朗日插值法计算相应的拟合多项式,从而对函数进行插值。

数据点集合1:(x_0,y_0)=(0,1)(x_1,y_1)=(1,2)(x_2,y_2)=(2,3)(x_3,y_3)=(3,5)利用拉格朗日插值法得到的多项式为:P_3(x)=1*L_0(x)+2*L_1(x)+3*L_2(x)+5*L_3(x)将基函数带入,得到多项式表达式为:P_3(x)=1/6*x^3-3/2*x^2+11/6*x+1数据点集合2:(x_0,y_0)=(0,1)(x_1,y_1)=(1,4)(x_2,y_2)=(2,9)(x_3,y_3)=(3,16)利用拉格朗日插值法得到的多项式为:P_3(x)=1*L_0(x)+4*L_1(x)+9*L_2(x)+16*L_3(x)将基函数带入,得到多项式表达式为:P_3(x)=1/6*x^3+1/2*x^2+1/3*x+1四、实验结果与讨论通过利用拉格朗日插值法,我们得到了不同数据点集合的拟合多项式。

数值分析MATLAB实验报告

数值分析MATLAB实验报告

实验 2.1 多项式插值的震荡现象问题提出:考虑在一个固定的区间上用插值逼近一个函数。

显然Lagrange 插值中使用的节点越多,插值多项式的次数越高,我们自然关心插值多项式的次数增加时,)(x L n 是否也更加靠近被逼近的函数。

Runge 给出的一个例子是极著名并富有启发性的。

设区间[-1,1]上函数.2511)(2xx f +=实验内容:考虑空间[-1,1]的一个等距划分,分点为 nix i 21+-=, =i 0,1,2 ...,n , 则拉格朗日插值多项式为)(2511)(02x l xx L ini n ∑=+=. 其中,n i x l i ,...,2,1,0),(=是n 次Lagrange 插值基函数。

实验要求:(1)选择不断增大的分点数目,...,3,2=n 画出原函数)(x f 及插值多项式函数)(x L n 在[-1,1]上的图像,比较并分析实验结果。

(2)选择其他的函数,例如定义在区间[-5,5]上的函数 ,1)(4xxx h +=)arctan()(x x g =, 重复上述的实验看其结果如何。

首先编写拉格朗日插值函数的Matlab 实现: Matlab 程序为:function y=lagrange(x0,y0,x) %Lagrange 插值 n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if(j~=k)p=p*(z-x0(j))/(x0(k)-x0(j)); end ends=s+p*y0(k); endy(i)=s; end(1)当函数为.2511)(2xx f +=时, Matlab 程序为:x=linspace(-1,1,100); y=1./(1+25*x.^2); plot(x,y) hold on; for i=2:2:10x0=linspace(-1,1,i+1); y0=1./(1+25*x0.^2); y=laglanri(x0,y0,x); plot(x,y,'r--') hold on end运行结果:结果分析:从图上看到在区间[-1,1]的两端点附近,随着插值点数的增加,插值函数)(x L n 与)(x f 偏离的越远,而且出现了振荡现象。

拉格朗日插值实验报告

拉格朗日插值实验报告

实验名称: 实验一 拉格朗日插值1 引言我们在生产生活中常常会遇到这样的问题:某个实际问题中;函数f x 在区间a;b 上存在且连续;但却很难找到其表达式;只能通过实验和观测得到有限点上的函数表..显然;根据这些点的函数值来求其它点的函数值是非常困难的..有些情况虽然可以写出表达式;但结构复杂;使用不方便..所以我们总是希望根据已有的数据点或函数表来构造某个简单函数P x 作为f x 的近似值..插值法是解决此类问题的一种比较古老的、但却很常用的方法..它不仅直接广泛地应用于生产实际和科学研究中;而且也是进一步学习数值计算方法的基础..2 实验目的和要求运用Matlab 编写三个.m 文件;定义三种插值函数;要求一次性输入整张函数表;并利用计算机选择在插值计算中所需的节点..分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f 0.15;f 0.31;f 0.47的近似值..已知函数表如下:3 算法原理与流程图1原理设函数y=在插值区间a;b 上连续;且在n+1个不同的插值节点a≤x 0;x 1;…;x n ≤b 上分别取值y 0;y 1;…;y n ..目的是要在一个性质优良、便于计算的插值函数类Φ中;求一简单函数P x;满足插值条件P x i =y i i=0;1;…;n;而在其他点x≠x i 上;作为f x 近似值..求插值函数P x 的方法称为插值法..在本实验中;采用拉格朗日插值法.. ①分段低次插值当给定了n+1个点x 0<x 1<…<x n 上的函数值y 0;y 1;…;y n 后;若要计算x≠x i 处函数值f x 的近似值;可先选取两个节点x i-1与x i 使x∈x i-1;x i ;然后在小区间x i-1;x i 上作线性插值;即得这种分段低次插值叫分段线性插值;又称折线插值..类似地;我们可以选取距离x 最近的三个节点x i-1;x i 与x i+1;然后进行二次插值;即得这种分段低次插值叫分段二次插值;又称分段抛物线插值.. ②全区间上拉格朗日插值对节点x i i=0;1;…;n 中任一点x k 0≤k≤n;作一n 次多项式l k x;使它在该点上的取值为1;在其余点x i i=0;1;…;k -1;k+1;…;n 上取值为零..对应于每一节点x k k=0;1;…;n;都能写出一个满足此条件的多项式;这样写出了n+1个多项式l 0x;l 1x;…;l n x;其中0111()()()()()()k k k k n l x A x x x x x x x x x x -+=----•-;由条件()1k k l x =可得于是我们可以得出如下的拉格朗日n 次插值多项式对于全区间上的插值;n 取函数表的长度(2)流程图分段线性插值 分段二次插值 全区间拉格朗日插值4 程序代码及注释1、分段线性插值2、分段二次插值3、拉格朗日全区间插值5算例分析1、测试示例2、首先输入函数变及待求点3、分段线性插值6讨论与结论1、使用tic;toc函数计算下列四种方法计算上述问题所运行的时间从三次实验结果可知;三个程序的运行时间都很短..2、程序优化由分段线性插值和分段二次插值的原理;x取值在函数表范围内时;插值结果有意义;而当x取值在函数表范围以外;利用分段线性插值公式仍可以进行运算并得到一个值;但其结果不准确;分段二次插值则无法找到三个合适的点以求插值;不予以输出结果;若输入的函数表x与y的长度不相等;则无法插值..所以加入以下判断以提高插值的准确性3、作图比较上图为三种方法的插值曲线;其中x取0到0.5;步长为0.001;由图可得;三种曲线非常接近;这说明我们用拉格朗日插值计算所给点函数值的近似值时;引起的误差还是比较小的..参考文献1 易大义;沈云宝;李有法. 计算方法第2版;浙江大学出版社. p.29-53.2 张琨高思超毕靖编着 MATLAB2010从入门到精通电子工业出版社。

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

北京理工大学珠海学院实验报告
ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY
班级2012电气2班学号xxxxxxxxx姓名陈冲指导教师张凯成绩
实验题目(实验一)拉格朗日插值实验地点及时间JD501 2013/12/26(6-7节)
一、实验目的
1.掌握用程序语言来编辑函数。

2.学会用MATLAB编写Lagrange.m函数。

二、实验环境
Matlab软件
三、实验内容
1、以书中第55页题目13为例编辑程序来实现计算结果。

2、使用MATLAB进行编写:
第一步:编写Lagrange.m函数,代码如下
第二步:利用这个函数来编辑命令:(可见实验结果中的截图)
x=[0.32,0.34,0.36];
y=[sin(0.32),sin(0.34),sin(0.36)];
x0=0.3367;
yt=Lagrange(x,y,x0)
得出抛物线插值为:0.3304
以及
x=[0.32,0.34];
y=[sin(0.32),sin(0.34)];
x0=0.3367;
yt=Lagrange(x,y,x0)
得出线性插值为:0.3304
的近似值并估计误差。

五、实验结果。

六、总结
通过这次实验我学会用MATLAB软件编辑口令进行计算,实验结果是正确的,我相信在以后的实验中,我可以做好每一步,练习好每一次的上机。

实验难度不是很大,主要要注意标点符号的正确性。

………。

相关文档
最新文档