实验一拉格朗日插值M精编b实验报告
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方程文件,后面有一题也有用到。
数值分析课程实验报告-拉格朗日和牛顿插值法
《数值分析》课程实验报告用拉格朗日和牛顿插值法求解函数值算法名称用拉格朗日和牛顿插值法求函数值学科专业 xxxxx作者姓名 xxxx作者学号 xxxxx作者班级 xxxxxxxxx大学二〇一五年十二月《数值分析》课程实验报告得到ln1.54的近似值为0.4318。
拉格朗日插值模型简单,结构紧凑,是经典的插值法。
但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算。
且当增大插值阶数时容易出现龙格现象。
2.牛顿插值法在命令窗口输入:x=[0.4 0.5 0.6 0.7 0.8];y=[0.6325 0.7071 0.7746 0.8367 0.8944];xt=0.54;[yt,N]=NewtInterp(x,y,xt)z=0.1:0.05:2;yz=subs(N,'t',z);figure;plot(z,sqrt(z),'--r',z,yz,'-b')hold onplot(x,y,'marker','+')hold onplot(xt,yt,'marker','o')h=legend('$\sqrt{x}$','牛顿','$(x_k,y_k)$','$x=0.54$');set(h,'Interpreter','latex')xlabel('x')ylabel('y')得到结果及图像如下:yt =0.7348N =- 0.291667*t^4 + 0.925*t^3 - 1.30208*t^2 + 1.46125*t + 0.2046得到√0.54的近似值为0.7348,插值函数为N =- 0.291667*t^4 + 0.925*t^3 - 1.30208*t^2 + 1.46125*t + 0.2046,其计算精度是相当高的。
拉格朗日插值公式数值分析实验报告
学生学号27 实验课成绩
学生实验报告书
实验课程名称数值分析A
开课学院理学院
指导教师姓名金升平教授
学生姓名陶玮
学生专业班级统计1401
2015-- 2016学年第 2 学期
实验课程名称:__数值分析______
实验项目名称拉格朗日插值公式实验成绩
实验者陶玮专业班级统计1401 组别
同组者实验日期年月日一部分:实验预习报告(包括实验目的、意义,实验基本原理与方法,主要仪器设备及耗材,实验方案与技术路线等)
实验目的:
1、学习和掌握拉格朗日插值多项式。
2、运用拉格朗日插值多项式进行计算。
实验基本原理:
拉格朗日插值基函数的一般形式:
也即是:
所以可以得出拉格朗日插值公式的一般形式:
其中,n=1时,称为线性插值,
n=2时,称为二次插值或抛物插值,精确度相对高些,
主要仪器设备:。
数值计算方法-拉格朗日牛顿插值实验
3.对比牛顿前插和牛顿后插两种方法的差异, 讨论分析同一个数值两种方法的计 算结果。 答:如果插值点 x 离 x0。比较近,则一般使用牛顿前差公式;如果插值点 x
离 x0。比较远,则一般使用牛顿后差公式。但对于同一个插值点 x 来说,不管 用牛顿前差公式还是用牛顿后差公式,得到的结果是一-样的,这两种插值公式 只是形式上的差别。 4.讨论分段插值法的意义。 答:高次插值的收敛性没有保证,实际计算稳定性也没有保证,所以当插值结 点 n 较大时, 通常不采用高次多项式插值, 用低次多项式插值, 它能保证收敛性, 得到的结果也相对稳定。
《计算方法》实验报告
实验二 插值法 实验目的
1. 掌握拉格朗日插值法、牛顿插值法、牛顿前后插值法及分段插值法的原理与算法。 2. 讨论几种方法的计算精度与误差,分析拉格朗日插值与牛顿插值法的差异。 3. 学会使用 Matlab 绘图方法,并以此方法来显示插值函数,使结果更直观更形象。
算法原理
(一)拉格朗日插值法 设 是互异插值节点,则满足插值条件 的插值多项式
是存在且唯一的。那么可以得到 n+1 个插值方程,求解 这个方程组,可以得到 n 次拉格朗日插值公式: ‴ , (二)牛顿插值法
其中:
(三)牛顿前后插值法 牛顿前插法为: th t t t t t t t t t t t t t t t t
牛顿后插法为: th
程序代码
拉格朗日插值 +
牛顿插值法运行脚本
牛顿向前插值法
牛顿向后插值法
牛顿向前插值作业
牛顿向后插值
数据测试结果
(1)选取 n=7,拉格朗日插值结果为:
(2)选取 n=7,牛顿插值法结果为:
(3) (4)X1=1.3,x2=5.6,牛顿向前向后插值法结果为:
数值分析实验报告
实验一:拉格朗日插值法实验目的1学习和掌握拉格朗日插值多项式。
2.运用拉格朗日插值多项式进行计算。
2.实验过程作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)算法步骤已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值。
程序流程:(1)输入已知点的个数;(2)分别输入已知点的X 坐标;(3)分别输入已知点的Y 坐标;程序如下:#include <iostream>#include <conio.h>#include <malloc.h>float lagrange(float *x,float *y,float xx,int n){ int i,j; float *a,yy=0.0; /*a a=(float*)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){ a[i]=y[i]; for(j=0;j<=n-1;j++)if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]); yy+=a[i];}free(a); return yy; }int main(){ int i; int n; float x[20],y[20],xx,yy;printf("Input n:");scanf("%d",&n);if(n<=0) { printf("Error! getch();return 1; }for(i=0;i<=n-1;i++) { printf("x[%d]:",i); scanf("%f",&x[i]); }printf("\n"); for(i=0;i<=n-1;i++) { } The value of n must in (0,20).");printf("y[%d]:",i);scanf("%f",&y[i]); printf("\n"); printf("Input xx:"); scanf("%f",&xx); yy=lagrange(x,y,xx,n); printf("x=%f,y=%f\n",xx,yy); getch(); }举例如下:已知当x=1,-1,2 时f(x)=0,-3,4,求f(1.5)的值。
拉格朗日插值上机实验报告
计算机科学与技术学院
姓名:程伟业
学号:U200714790
一、题目:完成L-插值公式的编程,并由下表求f(x*),x*=4.31.
x
1
2
3
4
5
6
7
f(x)
8
3
-1
2
-1
4
5
二、程序设计与分析
L-插值公式:
N
Yቤተ መጻሕፍቲ ባይዱ
三、原代码与运行结果
代码如下:
/*完成拉格朗日插值公式编程*/
#include<stdio.h>
float M(float x[],float y,int i,int n)
{float m=1; int j;
for(j=0;j<=n;j++)
if(j!=i)
m=m*(y-x[j]);
return m;
}/*构造函数M=(x-x[0])*(x-x[1])……(x-x[i-1])(x-x[i+1])……(x-x[n])*/
s=s+M(a,x,i,k)/M(a,a[i],i,k)*b[i];/*Largrange插值公式*/
printf("The result is %f\n",s);
}
运行结果:
void main()
{
float s=0,x;/*s用来记录结果,x是待估计的点*/
int n,k,i=0;
float a[20],b[20];/*用数组存储插值节点及其函数值*/
printf("Please enter n:\n");
lagrange插值法上机实践报告
五、计算结果的分析
三次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篇)
第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)计算插值多项式在不同点的函数值,并与实际值进行比较。
插值实验实验报告
一、课题名称Malab 函数插值方法二、目的和意义1、学会拉格朗日插值、牛顿插值、亨密特插值方法,求函数的近似表达式,以解决其它实际问题;2、明确插值多项式和分段插值多项式各自的优缺点;3、熟悉插值方法的程序编制;4、如果绘出插值函数的曲线,观察其光滑性。
三、计算公式拉格朗日插值的公式)())(()()()()()()()2,1,0,;,0)(;,1)(()()()(1010110n n i ni i ni n n i i i i ni i i n x x x x x x x w x f x w x x x w x L j i i j x l i j x l x f x l x L ---='-==≠====+=++=∑∑ 其中或者其中牛顿差值公式[][][])())(()()(],,[)()()()()(,))((,,)(,)()(1011,010,010*******n n n n n n n n n x x x x x x x w x w x x x f x N x f x R x x x x x x f x x x x x x x f x x x x f x f x N ---==-=--++--+-+=++- 其中亨密特插值公式∑=++=ni i x i i x i x n m b f a H 0)()()(12][五、结构程序设计拉格朗日插值的程序function[c,l]=lagan1(x,y) x=input('x=:'); y=input('y=:'); w=length(x); n=w-1;l=zeros(w,w); for k=1:n+1 v=1;for j=1:n+1 if k~=jv=conv(v,poly(x(j)))/(x(k)-x(j)); endendl(k,:)=vEndc=y*l;牛顿插值的程序function[c,l]=lagan(x,y)x=input('x=:');y=input('y=:');n=length(x);d=zeros(n,n);d(:,1)=y';for j=2:nfor k=j:nd(k,j)=(d(k,j-1)-d(k-1,j-1))/(x(k)-x(k-j+1)); endendc=d(n,n);for k=(n-1):-1:1c=conv(c,poly(x(k)));m=length(c);c(m)=c(m)+d(k,k);end六、结果讨论和分析拉格朗日插值运行的结果x=:[0.4 0.55 0.65 0.80 0.95 1.05]y=:[0.41075 0.57815 0.69675 0.9 1.00 1.25382]l =1.0e+003 *-0.1865 0.7459 -1.1776 0.9167 -0.3517 0.05320 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0 l =1.0e+003 *-0.1865 0.7459 -1.1776 0.9167 -0.3517 0.05321.3333 -5.1333 7.7300 -5.67122.0177 -0.27660 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0 l =1.0e+004 *-0.0186 0.0746 -0.1178 0.0917 -0.0352 0.00530.1333 -0.5133 0.7730 -0.5671 0.2018 -0.0277-0.2222 0.8333 -1.2172 0.8626 -0.2955 0.03900 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0 l =1.0e+004 *-0.0186 0.0746 -0.1178 0.0917 -0.0352 0.00530.1333 -0.5133 0.7730 -0.5671 0.2018 -0.0277-0.2222 0.8333 -1.2172 0.8626 -0.2955 0.03900.1778 -0.6400 0.8951 -0.6069 0.1994 -0.02540 0 0 0 0 00 0 0 0 0 0 l =1.0e+004 *-0.0186 0.0746 -0.1178 0.0917 -0.0352 0.00530.1333 -0.5133 0.7730 -0.5671 0.2018 -0.0277-0.2222 0.8333 -1.2172 0.8626 -0.2955 0.03900.1778 -0.6400 0.8951 -0.6069 0.1994 -0.0254-0.1010 0.3485 -0.4684 0.3067 -0.0978 0.01210 0 0 0 0 0 l =1.0e+004 *-0.0186 0.0746 -0.1178 0.0917 -0.0352 0.00530.1333 -0.5133 0.7730 -0.5671 0.2018 -0.0277-0.2222 0.8333 -1.2172 0.8626 -0.2955 0.03900.1778 -0.6400 0.8951 -0.6069 0.1994 -0.0254-0.1010 0.3485 -0.4684 0.3067 -0.0978 0.01210.0308 -0.1031 0.1353 -0.0869 0.0273 -0.0033 ans =121.6264 -422.7503 572.5667 -377.2549 121.9718 -15.0845121.6264*0.596^5+(-422.7503)*0.596^4+572.5667*0.596^3+( -377.2549)*0.596^2+121.9718 *0.596-15.0845ans =0.6257121.6264*0.99^5+(-422.7503)*0.99^4+572.5667*0.99^3+( -377.2549)*0.99^2+121.9718 *0.99-15.0845ans =1.0542牛顿插值的运行结果x=:[0.4,0.55,0.65,0.80,0.95,1.05]y=:[0.41075,0.57815,0.69675,0.90,1.00,1.25382]ans =121.6264 -422.7503 572.5667 -377.2549 121.9718 -15.0845121.6264*0.596^5+(-422.7503)*0.596^4+572.5667*0.596^3+( -377.2549)*0.596^2+121.9718 *0.596-15.0845ans =0.6257121.6264*0.99^5+(-422.7503)*0.99^4+572.5667*0.99^3+( -377.2549)*0.99^2+121.9718 *0.99-15.0845ans =1.0542多项式插值的主要目的是用一个多项式拟合离散点上的函数值,使得可以用该多项式估计数据点之间的函数值。
计算方法上机实验报告——拉格朗日插值问题
计算方法上机实验报告——拉格朗日插值问题一、方法原理n次拉格朗日插值多项式为:Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x) n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0) n=2时,称为二次插值或抛物线插值,精度相对高些L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1)二、主要思路使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。
对节点xi(i=0,1,…,n)中任一点xk(0<=k<=n)作一n次多项式lk(xk),使它在该点上取值为1,而在其余点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x)上式表明:n个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)的零点。
可求得lk三.计算方法及过程:1.输入节点的个数n2.输入各个节点的横纵坐标3.输入插值点4.调用函数,返回z函数语句与形参说明程序源代码如下:形参与函数类型参数意义intn节点的个数doublex[n](double*x)存放n个节点的值doubley[n](double*y)存放n个节点相对应的函数值doublep指定插值点的值doublefun()函数返回一个双精度实型函数值,即插值点p处的近似函数值#include<iostream>#include<math.h>usingnamespacestd;#defineN100doublefun(double*x,double*y,intn,doublep);voidmain(){inti,n;cout<<"输入节点的个数n:";cin>>n;doublex[N],y[N],p;cout<<"pleaseinputxiangliangx="<<endl;for(i=0;i<n;i++)cin>>x[i];cout<<"pleaseinputxiangliangy="<<endl;for(i=0;i<n;i++)cin>>y[i];cout<<"pleaseinputLagelangrichazhiJieDianp="<<endl;cin>>p;cout<<"TheAnswer="<<fun(x,y,n,p)<<endl;system("pause");}doublefun(doublex[],doubley[],intn,doublep){doublez=0,s=1.0;intk=0,i=0;doubleL[N];while(k<n){if(k==0){for(i=1;i<n;i++)s=s*(p-x[i])/(x[0]-x[i]);L[0]=s*y[0];k=k+1;}else{s=1.0;for(i=0;i<=k-1;i++)s=s*((p-x[i])/(x[k]-x[i]));for(i=k+1;i<n;i++)s=s*((p-x[i])/(x[k]-x[i]));L[k]=s*y[k];k++;}}for(i=0;i<n;i++)z=z+L[i];returnz;}四.运行结果测试:五.实验分析n=2时,为一次插值,即线性插值n=3时,为二次插值,即抛物线插值n=1,此时只有一个节点,插值点的值就是该节点的函数值n<1时,结果都是返回0的;这里做了n=0和n=-7两种情况3<n<100时,也都有相应的答案常用的是线性插值和抛物线插值,显然,抛物线精度相对高些n次插值多项式Ln(x)通常是次数为n的多项式,特殊情况可能次数小于n.例如:通过三点的二次插值多项式L2(x),如果三点共线,则y=L2(x)就是一条直线,而不是抛物线,这时L2(x)是一次式。
实验一 拉格朗日插值法
实验目的: 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) 的近似值。
三次差值试验结果:
— 4 —
=
k 1 k
结 束
— 2 —
实 验 报 告 (一)
辽宁科技大学 研究生 学院(系) 课名:数值分析 班级:研 12 姓名: 张贺 题目:拉格朗日插值 学号:12208190**** 专业: 矿业工程 任课教师:熊 焱 2012 年 09 月 20 日
实验程序:
— 3 —
实验结果: 二次差值试验
— 1 —
附件:拉格朗日插值算法框图
开 始
输 入 ( x i , y i ) , ( i= 0 ,1 , … , n )
0 x j
t t
j 0 , , k 1, k 1, , n
y t yk y
k n?
输 出 y
数值分析拉格朗日插值法上机实验报告
课题一:拉格朗日插值法1.实验目的1.学习和掌握拉格朗日插值多项式。
2.运用拉格朗日插值多项式进行计算。
2.实验过程作出插值点(,),(,),(,)二、算法步骤已知:某些点的坐标以及点数。
输入:条件点数以及这些点的坐标。
输出:根据给定的点求出其对应的拉格朗日插值多项式的值。
3.程序流程:(1)输入已知点的个数;(2)分别输入已知点的X坐标;(3)分别输入已知点的Y坐标;程序如下:#include <iostream>#include <>#include <>拉格朗日float lagrange(float *x,float *y,float xx,int n) /*插值算法*/{int i,j;float *a,yy=; /*a作为临时变量,记录拉格朗日插值多项*/ a=(float*)malloc(n*sizeof(float));for(i=0;i<=n-1;i++){a[i]=y[i];for(j=0;j<=n-1;j++)if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);yy+=a[i];}free(a);return yy;}int main(){int i;int n;float x[20],y[20],xx,yy;printf(Input n:);scanf(%d,&n);if(n<=0){printf(Error! The value of n must in (0,20).);getch();return 1;}for(i=0;i<=n-1;i++){牰湩晴尨學搥???※scanf(%f,&x[i]);}printf(\);for(i=0;i<=n-1;i++) {printf(y[%d]:,i);scanf(%f,&y[i]); } printf(\);printf(Input xx:);scanf(%f,&xx);yy=lagrange(x,y,xx,n);牰湩晴尨?春礬┽屦湜?硸礬? getch();}运的值。
数值分析实验报告:拉格朗日插值法和牛顿插值法
实验一报告拉格朗日插值法一、实验目的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值。
拉格朗日插值实验报告
实验名称: 实验一 拉格朗日插值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 ]上作线性插值,即得11111)()(------+--=≈i i i i i i i i x x x x y x x x x y x P x f这种分段低次插值叫分段线性插值,又称折线插值。
数值分析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```四、实验结果与分析(一)误差分析通过不同精度的计算,发现随着精度的提高,误差逐渐减小,但计算时间也相应增加。
拉格朗日插值
《拉格朗日插值》实验报告实验名称:拉格朗日插值 成绩:___________专业班级:数学与应用数学1202班 姓名:张晓彤 学号:2012254010227 实验日期 :2014年10月 27日实验报告日期: 2014 年10 月27日一、实验目的(1)掌握线性方法,最近点方法,三次样条和三次插值的调用格式,并以此来计算一维数据插值,通过相关的实例来验证这些插值方法的实用性.(2)掌握拉格朗日多项式的构造思想和构造过程(3)能够应用matlab 软件编写拉格朗日插值方法的程序并能熟悉应用,以此来解决相关例题(4)学会拉格朗日插值方法求函数的近似值,以解决其它科学实验的计算问题二、实验内容2.1验证一维数据插值函数的调用格式例1:给出概率积分dx e x f x x ⎰-=022)(π的数据表如表1所示,用不同的插值方法计算f(0.472). 表1 概率积分数值表例2:某检验参数f 随时间t 的采样结果如表2,用数据插值法计算57,52,47,42,37,32,27,22,17,12,7,2=t 时的f 值.表2 检测参数f 随时间t 的采样结果2.2编写拉格朗日插值的程序并验证任意给出一个函数,并给出函数在一些点的函数值,并用拉格朗日差值方法计算函数在某些点处的函数值,通过图像来比较,拉格朗日插值多项式拟合的精确程度。
三、实验环境该实验应用matlab2014来进行实验的验证和设计.四、实验步骤和实验结果4.1验证一维数据插值函数的调用格式例1:(概率积分)dx e x f xx ⎰-=022)(π 这是一个一维插值问题,命令如下:x=0.46:0.01:0.49;f=[0.4846555,0.4937542,0.5027498,0.5116683];format longinterp1(x,f,0.472) %用默认方法即线性插值方法%ans =0.495553320000000interp1(x,f,0.472,'nearest') %用最近点插值的方法计算%ans =0.493754200000000interp1(x,f,0.472,'cubic') %用三次样条插值方法计算%ans =0.495561119712056interp1(x,f,0.472,'spline') %用三次多项式的方法计算%ans =0.495560736000000例2:(数据插值)某检验参数f 随时间t 的采样结果如表2,用数据插值法计算57,52,47,42,37,32,27,22,17,12,7,2 t 时的f 值. 表2 检测参数f 随时间t 的采样结果这是一个一维插值问题,命令如下:T=0:5:65;x=2:5:57;F=[3.1025 2.256 879.5 1835.9 2968.8 4136.2 5237.9 6152.7 6725.3 6848.3 6403.5 6824.7 7328.5 7857.6];F1=interp1(T,F,x) % 用默认方法即线性插值方法%F1 =1.0e+03 *0.0028 0.3532 1.2621 2.2891 3.4358 4.57695.60386.3817 6.7745 6.6704 6.57207.0262F1=interp1(T,F,x,'nearest') %用最近点插值的方法计算%F1 =1.0e+03 *0.0031 0.0023 0.8795 1.8359 2.9688 4.13625.23796.1527 6.7253 6.8483 6.4035 6.8247F1=interp1(T,F,x,'spline') %用三次样条插值方法计算%F1 =1.0e+03 *-0.1703 0.3070 1.2560 2.2698 3.4396 4.58965.63706.4229 6.8593 6.6535 6.48177.0441F1=interp1(T,F,x,'cubic') %用三次多项式的方法计算%F1 =1.0e+03 *0.0024 0.2232 1.2484 2.2736 3.4365 4.59135.63626.4362 6.7978 6.6917 6.50777.01864.2编写拉格朗日插值程序并验证任意给出一个函数,并给出函数在一些点的函数值,并用拉格朗日插值方法计算函数在某些点处的函数值.并通过图像来说明拉格朗日插值多项式拟合的精确程度。
数值分析实验报告
数值分析实验报告一、实验目的数值分析是一门研究用计算机求解数学问题的数值方法及其理论的学科。
本次实验的目的在于通过实际操作和编程实现,深入理解和掌握数值分析中的常见算法,提高运用数值方法解决实际问题的能力,并对算法的精度、稳定性和效率进行分析和比较。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
实验所依赖的主要库包括 NumPy、Matplotlib 等。
三、实验内容(一)函数逼近与插值1、拉格朗日插值法通过给定的离散数据点,构建拉格朗日插值多项式,对未知点进行函数值的估计。
2、牛顿插值法与拉格朗日插值法类似,但采用了不同的形式和计算方式。
(二)数值积分1、梯形公式将积分区间划分为若干个梯形,通过计算梯形面积之和来近似积分值。
2、辛普森公式基于抛物线拟合的方法,提高积分近似的精度。
(三)线性方程组求解1、高斯消元法通过逐行消元将线性方程组化为上三角形式,然后回代求解。
2、 LU 分解法将系数矩阵分解为下三角矩阵 L 和上三角矩阵 U,然后通过两次前代和回代求解。
(四)非线性方程求解1、二分法通过不断将区间一分为二,逐步缩小根所在的区间,直到满足精度要求。
2、牛顿迭代法利用函数的切线来逼近根,通过迭代逐步收敛到根的近似值。
四、实验步骤(一)函数逼近与插值1、拉格朗日插值法定义计算拉格朗日基函数的函数。
根据给定的数据点和待求点,计算插值多项式的值。
输出插值结果,并与真实值进行比较。
2、牛顿插值法计算差商表。
构建牛顿插值多项式。
进行插值计算和结果分析。
(二)数值积分1、梯形公式定义积分区间和被积函数。
按照梯形公式计算积分近似值。
分析误差。
2、辛普森公式同样定义积分区间和被积函数。
运用辛普森公式计算积分近似值。
比较与梯形公式的精度差异。
(三)线性方程组求解1、高斯消元法输入系数矩阵和右端项向量。
进行消元操作。
回代求解方程。
输出解向量。
2、 LU 分解法对系数矩阵进行 LU 分解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一拉格朗日插值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软件编辑口令进行计算,实验结果是正确的,我相信在以后的实验中,我可以做好每一步,练习好每一次的上机。
实验难度不是很大,主要要注意标点符号的正确性。
………。