实验二插值法概论

实验二插值法概论
实验二插值法概论

实验二插值法

实验2.1

(1)实验程序:

function charpt2_1

%输入插值结点

result=inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'2'}) N1=str2num(char(result));

result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-1'})

N2=str2num(char(result));

result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'1'})

N3=str2num(char(result));

if(N1<1) errordlg('结点输入错误!');return;end

%插值结点小于1时错误

f=inline('1./(1+25*x.^2)');a=N2;b=N3;

%标准函数f

x1=linspace(a,b,N1+1);

y1=feval(f,x1);

x=a:0.001:b;inter1=Lagrange(x1,y1,x);

fplot(f,[a,b],'r-');

%画标准函数f的图形

hold on;

plot(x,inter1,'b-');

%画插值逼近函数

legend('原函数','插值多项式函数')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

function y=Lagrange(x0,y0,x)

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

end

s=s+p*y0(k);

end

y(i)=s;

end

实验结果:

n=2 n=3

n=5 n=10

n=15 n=20

实验分析:

多项式插值逼近结果如图所示,当结点数由3个结点增加为5个结点时,函数图形越接近,当插值结点增加到10时,曲线光滑,函数逼近效果在曲线的中间部分(-0.6,0.6)比较好,但是由上图在两个端点处x=-1和x=1附近时会出现在与原函数f(x)偏差会很大(龙格现象)。可以看出,适当提高插值多项式次

数,可以提高逼近的精度,但是太高反而会产生不良的现象。

(2) 实验程序:

function charpt2_2 %输入插值结点

result=inputdlg({'请输入插值结点数N :'},'charpt_2',1,{'2'}) N1=str2num(char(result));

result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-5'}) N2=str2num(char(result));

result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'5'}) N3=str2num(char(result));

if(N1<1) errordlg('结点输入错误!');return;end %插值结点小于1时错误

f=inline('x./(1+x.^4)');a=N2;b=N3; %标准函数f

x1=linspace(a,b,N1+1); y1=feval(f,x1);

x=a:0.001:b;inter1=Lagrange(x1,y1,x); fplot(f,[a,b],'r-'); %画标准函数f 的图形 hold on;

plot(x,inter1,'b-'); %画插值逼近函数

legend('原函数','插值多项式函数')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

function y=Lagrange(x0,y0,x) 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 end

s=s+p*y0(k); end y(i)=s; end

4

()1x h x x =

+

实验结果:

n=2

n=3

n=5

n=10

n=15 n=20

实验分析:

由实验结果可知,随着n 值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,而端点附近的则出现振荡的情况,且误差逐渐增大。

实验程序:

()arctan g x x

function charpt2_3

%输入插值结点

result=inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'2'}) N1=str2num(char(result));

result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-5'})

N2=str2num(char(result));

result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'5'})

N3=str2num(char(result));

if(N1<1) errordlg('结点输入错误!');return;end

%插值结点小于1时错误

f=inline('atan(x)');a=N2;b=N3;

%标准函数f

x1=linspace(a,b,N1+1);

y1=feval(f,x1);

x=a:0.001:b;inter1=Lagrange(x1,y1,x);

fplot(f,[a,b],'r-');

%画标准函数f的图形

hold on;

plot(x,inter1,'b-');

%画插值逼近函数

legend('原函数','插值多项式函数')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

function y=Lagrange(x0,y0,x)

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

end

s=s+p*y0(k);

end

y(i)=s;

end

实验结果:

n=2 n=3

n=5 n=10

n=15 n=20

实验分析:

由实验结果可知,随着n 值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,而端点附近的则出现振荡的情况,且误差逐渐增大。

(3)2

1

()125f x x

=

+ 实验程序:

function charpt2_4 %输入插值结点

result=inputdlg({'请输入插值结点数N :'},'charpt_2',1,{'2'})

N1=str2num(char(result));

result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-1'}) N2=str2num(char(result));

result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'1'}) N3=str2num(char(result));

if(N1<1&N2

%插值结点小于1时错误

f=inline('1./(1+25*x.^2)');a=N2;b=N3;

%标准函数f

k=1:N1+1

x1=(b+a)./2+((b-a)./2)*cos((2.*k-1).*pi/(2.*(N1+1)));

y1=feval(f,x1);

x=a:0.001:b;

inter1=Lagrange(x1,y1,x);

fplot(f,[a,b],'r-');

%画标准函数f的图形

hold on;

plot(x,inter1,'b-');

%画插值逼近函数

legend('原函数','插值多项式函数')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

function y=Lagrange(x0,y0,x)

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

end

s=s+p*y0(k);

end

y(i)=s;

end

实验结果:

n=2 n=3

n=5 n=10

n=15 n=20

实验分析:

由实验结果可知,通过切比雪夫点的变换,随着n 值的增大,插值多项式函数在区间中部的拟合情况愈来愈好, 且端点的振荡现象消失,误差也不断下降。

4

()1x

h x x

=

+ 实验程序:

function charpt2_5 %输入插值结点

result=inputdlg({'请输入插值结点数N :'},'charpt_2',1,{'2'})

N1=str2num(char(result));

result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-5'}) N2=str2num(char(result));

result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'5'}) N3=str2num(char(result));

if(N1<1&N2

%插值结点小于1时错误

f=inline('x./(1+x.^4)');a=N2;b=N3;

%标准函数f

k=1:N1+1

x1=(b+a)./2+((b-a)./2)*cos((2.*k-1).*pi/(2.*(N1+1)));

y1=feval(f,x1);

x=a:0.001:b;

inter1=Lagrange(x1,y1,x);

fplot(f,[a,b],'r-');

%画标准函数f的图形

hold on;

plot(x,inter1,'b-');

%画插值逼近函数

legend('原函数','插值多项式函数')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

function y=Lagrange(x0,y0,x)

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

end

s=s+p*y0(k);

end

y(i)=s;

end

实验结果:

n=2 n=3

n=5 n=10

n=15 n=20

实验分析:

由实验结果可知,通过切比雪夫点的变换,随着n值的增大,插值多项式函数在区间中部的拟合情况愈来愈好,且端点的振荡现象消失,误差也不断下降。

g x x

()arctan()

实验程序:

function charpt2_6

%输入插值结点

result=inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'2'}) N1=str2num(char(result));

result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-5'})

N2=str2num(char(result));

result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'5'})

N3=str2num(char(result));

if(N1<1&N2

%插值结点小于1时错误

f=inline('atan(x)');a=N2;b=N3;

%标准函数f

k=1:N1+1

x1=(b+a)./2+((b-a)./2)*cos((2.*k-1).*pi/(2.*(N1+1)));

y1=feval(f,x1);

x=a:0.001:b;

inter1=Lagrange(x1,y1,x);

fplot(f,[a,b],'r-');

%画标准函数f的图形

hold on;

plot(x,inter1,'b-');

%画插值逼近函数

legend('原函数','插值多项式函数')

xlabel('x');ylabel('y=f(x) o and y=Ln(x)--');

function y=Lagrange(x0,y0,x)

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

end

s=s+p*y0(k);

end

y(i)=s;

end

实验结果:

n=2 n=3

n=5 n=10

n=15 n=20

实验分析:

由实验结果可知,通过切比雪夫点的变换,随着n 值的增大,插值多项式函数在区间中部的拟合情况愈来愈好, 且端点的振荡现象消失,误差也不断下降。

实验2.2

(1) 考虑区间[-1,1]的一个等距划分,分点为

n i n

i

x i ,,2,1,0,21 =+

-=

实验程序:

function charpt2_7

x1=[-1:0.4:1];y1=1./(1+25*x1.^2); x2=[-1:0.25:1];y2=1./(1+25*x2.^2); x3=[-1:0.2:1];y3=1./(1+25*x3.^2);

x0=[-1:0.01:1];

subplot(2,2,1)

y4=1./(1+25*x0.^2);

plot(x0,y4,'-b')

y0=spline(x1,y1,x0);

y1=1./(1+25*x0.^2);

subplot(2,2,2)

plot(x0,y0,'-b')

y0=spline(x2,y2,x0);

y2=1./(1+25*x0.^2);

subplot(2,2,3)

plot(x0,y0,'-b')

y0=spline(x3,y3,x0);

y3=1./(1+25*x0.^2);

subplot(2,2,4)

plot(x0,y0,'-b')

end

实验结果:

插值与拟合实验报告

学生实验报告

了解插值与拟合的基本原理和方法;掌握用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.9949 t2 = 24 t3 = 25.0000 t4 =

二次插值算法

二次插值法亦是用于一元函数在确定的初始区间内搜索极小点的一种方法。它属于曲线拟合方法的范畴。 一、基本原理 在求解一元函数的极小点时,常常利用一个低次插值多项式来逼近原目标函数,然后求该多项式的极小点(低次多项式的极小点比较容易计算),并以此作为目标函数的近似极小点。如果其近似的程度尚未达到所要求的精度时,可以反复使用此法,逐次拟合,直到满足给定的精度时为止。 常用的插值多项式为二次或三次多项式,分别称为二次插值法和三次插值法。这里我们主要介绍二次插值法的计算公式。 假定目标函数在初始搜索区间中有三点、和 ,其函数值分别为、和(图1},且满足,,即满足函数值为两头大中间小的性质。利用这三点及相应的函数值作一条二次曲线,其函数为一个二次多项式 (1) 式中、、为待定系数。

图1 根据插值条件,插值函数与原函数在插值结点、、处函数值相等,得 (2) 为求插值多项式的极小点,可令其一阶导数为零,即 (3) 解式(3)即求得插值函数的极小点(4) 式(4)中要确定的系数可在方程组(2)中利用相邻两个方程消去而得: (5)

(6)将式(5)、(6)代入式(4)便得插值函数极小值点的计算公式: (7)把取作区间内的另一个计算点,比较与两点函数值的大小,在保持两头大中间小的前提下缩短搜索区间,从而构成新的三点搜索区间,再继续按上述 方法进行三点二次插值运算,直到满足规定的精度要求为止,把得到的最后的作为 的近似极小值点。上述求极值点的方法称为三点二次插值法。 为便于计算,可将式(7)改写为 (8) 式中: (9) (10) 二、迭代过程及算法框图 (1)确定初始插值结点 通常取初始搜索区间的两端点及中点为,, 。计算函数值,,,构成三个初始插值结点、、。

实验二 多项式插值法

实验报告——实验二 多项式插值法 一、实验要求 1、对[-5,5]作等分划x i =?5+i?,h = 10n ,i =0,1,…,n ,并对Runge 给出的函数f (x )= 1/(1+16x 2)作Lagrange 插值,观察Runge 现象的发生。 (a )分别取n=10、20作Lagrange 代数插值L 10(x)和L 20(x) (b )给出f(x)、L 10(x)和L 20(x)在区间[-5,5]的函数图象,观察其不同。 (c )考察上述两个插值函数在x=4.8处的误差,并作分析。 2、已知直升飞机旋转机翼外形曲线部分坐标如下表: 及两端的一阶导数值为y 0’=1.86548,y n ’=?0.046115 利用第一类边界条件的三次样条插值函数计算翼型曲线在x =2,30,133,390,470,515各点上的函数值及一二阶导数近似值。 二、实验原理 1、Lagrange 插值 (1)已知n+1个节点x 0

插值法和拟合实验报告(数值计算)

插值法和拟合实验报告 一、 实验目的 1.通过进行不同类型的插值,比较各种插值的效果,明确各种插值的优越性; 2.通过比较不同次数的多项式拟合效果,了解多项式拟合的原理; 3.利用matlab 编程,学会matlab 命令; 4.掌握拉格朗日插值法; 5.掌握多项式拟合的特点和方法。 二、 实验题目 1.、插值法实验 将区间[-5,5]10等分,对下列函数分别计算插值节点 k x 的值,进行不同类型 的插值,作出插值函数的图形并与)(x f y =的图形进行比较: ;11)(2x x f += ;a r c t a n )(x x f = .1)(42 x x x f += (1) 做拉格朗日插值; (2) 做分段线性插值; (3) 做三次样条插值. 2、拟合实验 给定数据点如下表所示: 分别对上述数据作三次多项式和五次多项式拟合,并求平方误差,作出离散函数 ),(i i y x 和拟合函数的图形。 三、 实验原理 1.、插值法实验

∏∑∏∏∏∑∑≠==≠=≠=≠=+-==--= =-= ==-=-=----==++==j i j j i i i i i n i i n n j i j j n j i j j i i n j i j j n i i i n i i n n n o i n i i n x x x x x y x l x L x x c n i x x c x x x c x 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,01100 00 )(l )()() (1 ,1,0, 1)()(l ) ()())(()()()()()()()(, 故, 得 再由,设 2、拟合实验

实验二_插值与拟合

实验二 插值与拟合 实验名称:插值与拟合 实验类型: 验证性实验 学 时:2 3.1 实验环境 ① 操作系统:WindowsXP/Win7 ② 编程环境:自定 3.2 实验目的 ① 掌握多项式插值法的基本思路和步骤; ② 了解整体插值的局限性及分段插值的基本思想。 ③ 掌握最小二乘法拟合的基本原理和方法; ④ 培养运用计算机模拟解决问题的能力。 3.3 实验原理和方法 3.3.1 多项式插值 若n 次多项式() (0,1,,)k l x k n = 在n +1个插值节点01...n x x x <<<上满足插值条件: 1 () ()(,0,1,,)0 () k i ik i k l x i k n i k δ=?===? ≠? 则称这n +1个n 次多项式01(), (), ... , ()n l x l x l x 为插值节点01, , ... , n x x x 上的n 次插值基函数。 由于i k ≠时,()=0k i l x ,故0111, , ... , , , ... , k k n x x x x x -+为()k l x 的零点,从而可以设 0111()()()()()()k k k k n l x A x x x x x x x x x x -+=----- 由()=1k k l x 可得 01111 ()()()()() k k k k k k k k n A x x x x x x x x x x -+=----- 所以可得 01110111()()()()()()(0,1,,)()()()()() k k n k k k k k k k k n x x x x x x x x x x l x k n x x x x x x x x x x -+-+-----= =----- 。 若记10 ()()n n i i x x x ω+== -∏,则有1' 1() ()()() n k k n k x l x x x x ωω++= -,从而有

数值分析实验插值与拟合

《数值分析》课程实验一:插值与拟合 一、实验目的 1. 理解插值的基本原理,掌握多项式插值的概念、存在唯一性; 2. 编写MA TLAB 程序实现Lagrange 插值和Newton 插值,验证Runge 现象; 3. 通过比较不同次数的多项式拟合效果,理解多项式拟合的基本原理; 4. 编写MA TLAB 程序实现最小二乘多项式曲线拟合。 二、实验内容 1. 用Lagrange 插值和Newton 插值找经过点(-3, -1), (0, 2), (3, -2), (6, 10)的三次插值公式,并编写MATLAB 程序绘制出三次插值公式的图形。 2. 设 ]5,5[,11 )(2 -∈+= x x x f 如果用等距节点x i = -5 + 10i /n (i = 0, 1, 2, …, n )上的Lagrange 插值多项式L n (x )去逼近它。不妨取n = 5和n = 10,编写MATLAB 程序绘制出L 5(x )和L 10(x )的图像。 (2) 编写MA TLAB 程序绘制出曲线拟合图。 三、实验步骤 1. (1) Lagrange 插值法:在线性空间P n 中找到满足条件: ?? ?≠===j i j i x l ij j i , 0,, 1)(δ 的一组基函数{}n i i x l 0)(=,l i (x )的表达式为 ∏ ≠==--= n i j j j i j i n i x x x x x l ,0),,1,0()( 有了基函数{}n i i x l 0)(=,n 次插值多项式就可表示为 ∑==n i i i n x l y x L 0 )()( (2) Newton 插值法:设x 0, x 1, …, x n 是一组互异的节点,y i = f (x i ) (i = 0, 1, 2, …, n ),f (x )在处的n 阶差商定义为

黄金分割法、二次插值法C语言编程

已知:F(x)=x4-4x3-6x2-16x+4,求极小值,极小值点,区间,迭代次数?用进退法确定区间,用黄金分割法求极值。 #include #include #define e 0.001 #define tt 0.01 float f(double x) { float y=pow(x,4)-4*pow(x,3)-6*pow(x,2)-16*x+4; return(y); } finding(float *p1,float*p2) { float x1=0,x2,x3,t,f1,f2,f3,h=tt; int n=0; x2=x1+h;f1=f(x1);f2=f(x2); if(f2>f1) {h=-h;t=x2;x2=x1;x1=t;} do { x3=x2+h;h=2*h;f3=f(x3);n=n+1;} while(f3x3) {t=x1;x1=x3;x3=t;} *p1=x1;*p2=x3; return(n); } gold(float *p) { float a,b,x1,x2,f1,f2; int n=0; finding(&a,&b); do {x1=a+0.382*(b-a); x2=a+0.618*(b-a);f1=f(x1);f2=f(x2);n=n+1; if(f1>f2) a=x1; else b=x2;} while((b-a)>e); *p=(x1+x2)/2;return(n); } main() { float a,b,x,min;int n1,n2; n1=finding(&a,&b); n2=gold(&x); min=f(x); printf("\n The area is %f to %f.",a,b); printf("\n The nunmber 1 is %d.",n1); printf("\n The min is %f and the result is %f.",x,min);

二次插值算法

二次插值法亦是用于一元函数在确定的初始区间搜索极小点的一种方法。它属于曲线拟合方法的畴。 一、基本原理 在求解一元函数的极小点时,常常利用一个低次插值多项式来逼近原目标函数, 然后求该多项式的极小点(低次多项式的极小点比较容易计算),并以此作为目标函数 的近似极小点。如果其近似的程度尚未达到所要求的精度时,可以反复使用此法,逐次拟合,直到满足给定的精度时为止。 常用的插值多项式为二次或三次多项式,分别称为二次插值法和三次插值法。这里我们主要介绍二次插值法的计算公式。 假定目标函数在初始搜索区间中有三点、和 ,其函数值分别为、和(图1},且满足,,即满足函数值为两头大中间小的性质。利用这三点及相应的函数值作一条二次曲线,其函数为一个二次多项式 (1) 式中、、为待定系数。

图1 根据插值条件,插值函数与原函数在插值结点、、处函数值相等,得 (2) 为求插值多项式的极小点,可令其一阶导数为零,即 (3) 解式(3)即求得插值函数的极小点(4) 式(4)中要确定的系数可在方程组(2)中利用相邻两个方程消去而得: (5)

(6) 将式(5)、(6)代入式(4)便得插值函数极小值点的计算公式: (7) 把取作区间的另一个计算点,比较与两点函数值的大小,在保持 两头大中间小的前提下缩短搜索区间,从而构成新的三点搜索区间,再继续按上述方法进行 三点二次插值运算,直到满足规定的精度要求为止,把得到的最后的作为的近似极小值点。上述求极值点的方法称为三点二次插值法。 为便于计算,可将式(7)改写为 (8) 式中: (9) (10) 二、迭代过程及算法框图 (1)确定初始插值结点 通常取初始搜索区间的两端点及中点为,,。计算函数值,,,构成三个初始插值结点、、。

实验二 拉格朗日插值龙格现象

汕 头 大 学 实 验 报 告 学院: 工学院系: 计算机系专业: 计算机科学与技术年级:2010 姓名: 林金正学号:2010101032完成实验时间: 5月24日 一.实验名称:拉格朗日插值的龙格现象 二.实验目的: 通过matlab 处理,观察拉格朗日插值的龙格现象. 三.实验内容: (1)学习matlab 的使用 (2)以实验的方式,理解高阶插值的病态性,观察拉格朗日插值的龙格现象。 四.实验时间、地点,设备: 实验时间:5月24日 实验地点:宿舍 实验设备:笔记本电脑 五,实验任务 在区间[-5,5]上取节点数n=11,等距离h=1的节点为插值点,对于函数2 5()1f x x =+进行拉格朗日插值,把f(x)与插值多项式的曲线花在同一张图上。 六.实验过程 拉格朗日插值函数定义: 对某个多项式函数,已知有给定的k + 1个取值点: 其中对应著自变数的位置,而对应著函数在这个位置的取值。 假设任意两个不同的xj 都互不相同,那麼应用拉格朗日插值公式所得到的拉格朗日插值多项式为: 其中每个为拉格朗日基本多项式(或称插值基函数),其表达式为: [3] 拉格朗日基本多项式 的特点是在上取值为1,在其它的点上取值为0。

1.使用matlab,新建function.m 文件,使用老师所给代码,构建拉格朗日函数. %lagrange.m function y=lagrange(x0,y0,x) n=length(x0); m=length(x); fori=1:m z=x(i);s=0; for k=1:n L=1; for j=1:n if j~=k L=L*(z-x0(j))/(x0(k)-x0(j)); end end s=s+L*y0(k); end y(i)=s; end y; 程序解释: (x0,y0):已知点坐标 x:所求点的横坐标, y:由(x0,y0)所产生的插值函数,以x 为参数,所的到的值 2.再一次新建function.m 文件. 构建自定义函数:25()1f x x = + %f.m function y = f(x) y = 5/(1+x*x); end 3.在脚本窗口中输入: >>a = [-10:0.2:10] >>for I = 1:length(a) b(i) = f(a(i)) end ;%画出原函数(a,b) >>c = [-5:1:5] >>for i = 1:length( c) d(i) = f(c(i))

插值与拟合实验报告

一、给定函数y=sinx的函数表如下表,用拉格朗日插值求sin0.57891的近似 值 M文件: function yh=lagrange2(x0,y0,xh) n = length(x0); m = length(xh); yh=zeros(1,m); for k = 1:m for i = 1:n xp = x0([1:i-1 i+1:n]); yp = prod((xh(k)-xp)./(x0(i)-xp)); yh(k) = yh(k) + yp*y0(i); end end 执行:>> x0=[0.4,0.5,0.6,0.7] x0 = 0.4000 0.5000 0.6000 0.7000 >> y0=[0.38942,0.47943,0.56464,0.64422] y0 = 0.3894 0.4794 0.5646 0.6442 >> lagrange2(x0,y0,0.57891) 执行结果: ans = 0.5471

二、 1. 给定sin110.190809,sin120.207912,sin130.224951,o o o ===构造牛顿 插值函数计算'sin1130o 。 M 文件: function fp = newpoly(x,y,p) n = length(x); a(1) = y(1); for k = 1 : n - 1 d(k, 1) = (y(k+1) - y(k))/(x(k+1) - x(k)); end for j = 2 : n - 1 for k = 1 : n - j d(k, j) = (d(k+1, j - 1) - d(k, j - 1))/(x(k+j) - x(k)); end end d for j = 2 : n a(j) = d(1, j-1); end Df(1) = 1; c(1) = a(1); for j = 2 : n Df(j)=(p - x(j-1)) .* Df(j-1); c(j) = a(j) .* Df(j);

插值法实验报告

实验二插值法 1、实验目的: 1、掌握直接利用拉格郎日插值多项式计算函数在已知点的函数值;观察拉格郎日插值的龙格现象。 2、了解Hermite插值法、三次样条插值法原理,结合计算公式,确定函数值。 2、实验要求: 1)认真分析题目的条件和要求,复习相关的理论知识,选择适当的解决方案和算法; 2)编写上机实验程序,作好上机前的准备工作; 3)上机调试程序,并试算各种方案,记录计算的结果(包括必要的中间结果); 4)分析和解释计算结果; 5)按照要求书写实验报告; 3、实验内容: 1) 用拉格郎日插值公式确定函数值;对函数f(x)进行拉格郎日插值,并对f(x)与插值多项式的曲线作比较。 已知函数表:(0.56160,0.82741)、(0.56280,0.82659)、(0.56401,0.82577)、(0.56521,0.82495)用三次拉格朗日插值多项式求x=0.5635时函数近似值。 2) 求满足插值条件的插值多项式及余项 1) 4、题目:插值法 5、原理: 拉格郎日插值原理: n次拉格朗日插值多项式为:L n (x)=y l (x)+y 1 l 1 (x)+y 2 l 2 (x)+…+y n l n (x)

n=1时,称为线性插值, L 1(x)=y (x-x 1 )/(x -x 1 )+y 1 (x-x )/(x 1 -x )=y +(y 1 -x )(x-x )/(x 1 -x ) n=2时,称为二次插值或抛物线插值, L 2(x)=y (x-x 1 )(x-x 2 )/(x -x 1 )/(x -x 2 )+y 1 (x-x )(x-x 2 )/(x 1 -x )/(x 1 -x 2 )+y 2 (x -x 0)(x-x 1 )/(x 2 -x )/(x 2 -x 1 ) n=i时, Li= (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n) (X-X0)……(X-X i-1)(x-x i+1) ……(x-x n) 6、设计思想: 拉格朗日插值法是根据n + 1个点x0, x1, ... x n(x0 < x1 < ... x n)的函数值f (x0), f (x1) , ... , f (x n)推出n次多項式p(x),然后n次多項式p (x)求出任意的点x对应的函数值f (x)的算法。 7、对应程序: 1 ) 三次拉格朗日插值多项式求x=0.5635时函数近似值 #include"stdio.h" #define n 5 void main() { int i,j; float x[n],y[n]; float x1; float a=1; float b=1; float lx=0; printf("\n请输入想要求解的X:\n x="); scanf("%f",&x1); printf("请输入所有点的横纵坐标:\n"); for(i=1;i

实验四 插值法与曲线拟合

计算方法实验报告 专业班级:医学信息工程一班姓名:陈小芳学号:201612203501002 实验成绩: 1.【实验题目】 插值法与曲线拟合 2.【实验目的】 3.【实验内容】 4. 【实验要求】

5. 【源程序(带注释)】 (1)拉格朗日插值 #include #include #include #include #include #define n 4 //插值节点的最大下标 main() { double x1[n+1]={0.4,0.55,0.65,0.8,0.9}; double y1[n+1]={0.4175,0.57815,0.69657,0.88811,1.02652}; double Lagrange(double x1[n+1],double y1[n+1],float t); int m,k;float x,y;float X;double z; printf("\n The number of the interpolation points is m ="); //输入插值点的个数 while(!scanf("%d",&m)) { fflush(stdin); printf("\n输入错误,请重新输入:\n"); printf("\n The number of the interpolation points is m ="); } for(k=1;k<=m;k++) { printf("\ninput X%d=",k); while(!scanf("%f",&X)) { fflush(stdin); printf("\n输入错误,请重新输入:\n"); printf("\ninput X%d=",k); } z=Lagrange(x1,y1,X); printf("P(%f)=%f\n",X,z); } getch(); return (0); } double Lagrange(double x[n+1],double y[n+1],float X) { int i,j;

数学实验-实验2 插值与拟合

广州大学学生实验报告 开课学院及实验室: 2014年 月 日 学院 数学与信息科学学院 年级、专业、班 姓名 学号 实验课程名称 数学实验 成绩 实验项目名称 实验2 插值与拟合 指导老师 一、实验目的 1、掌握用MATLAB 计算拉格朗日、分段线性、三次样条三种插值的方法,改变节点的数目,对三种插值结果进行初步分析。 2、掌握用MATLAB 作线性最小二乘拟合的方法。 3、通过实例学习如何用插值方法与拟合方法解决实际问题,注意二者的联系和区别。 二、实验设备 电脑、MATLAB 三、实验要求 1..选择一些函数,在n 个节点上(n )不要太大,如5~11)用拉格朗日,分段线性,三次样条三种插值方法,,计算m 各插值点的函数值(m 要适中,如50~100).通过数值和图形的输出,将三种插值结果与精确值进行比较.适当增加n ,再作比较,由此作初步分析.下列函数供选择参考: a. y=sin x ,0≦x ≦2π; 2.用 1 2 y x =在x=0,1,4,9,16产生5个节点15,...,P P .用不同的节点构造插值公式来计算x=5处的插值(如用 15,...,P P ;14,...,P P ;24,...,P P 等)与精确值比较进行分析。 5.对于实验1中的录像机计数器,自己实测一组数据(或利用给出的数据),确定模型2 t an bn =+中的系数a,b. 6.用电压V=10伏的电池给电容器充电,电容器上t 时刻的电压为 0()()t v t V V V e -τ =--,其中 0V 是电容器的初始 电压,τ是充电常数。试由下面一组t ,V 数据确定0V 和τ. t/s 0.5 1 2 3 4 5 7 9 V/V 6.36 6.48 7.26 8.22 8.66 8.99 9.43 9.63 8. 弹簧在力F 的作用下伸长x ,一定范围内服从胡克定律:F 与x 成正比,即F=kx,k 为弹性系数.现在得到下面一组x ,F 数据,并在(x,F )坐标下作图(图13).可以看出,当F大到一定数值(如x=9以后)后,就不服从这个定律了。试由数据拟合直线F=kx,并给出不服从胡克定律时的近似公式(曲线)。 1)要求直线与曲线在x=9处相连接。 2)要求直线与曲线在x=9处光滑连接. 四、实验程序 预备: function y=lagr1(x0,y0,x) 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 end s=s+p*y0(k); end y(i)=s; end 五、实验操作过程 当n=5时 clear; n=5; %在n 个节点上进行插值 m=75; %产生m 个插值点,计算函数在插值点处的精确值,将来进行对比 x=0:4/(m-1):2*pi; y=sin(x); z=0*x; x0=0:4/(n-1):2*pi; y0=sin(x0); y1=lagr1(x0,y0,x); % y1为拉格朗日插值 y2=interp1(x0,y0,x); % y2为分段线性插值 y3=spline(x0,y0,x); % y3为三次样条插值 [x' y' y1' y2' y3'] plot(x,z,'k',x,y,'r:',x,y1,'g-.',x,y2,'b',x,y3,'y--') gtext('Lagr.'), gtext('Pieces. linear'), gtext('Spline'), gtext('y=sin(x)') hold off; %比较插值所得结果与函数在插值点处的精确值 s = ' x y y1 y2 y3' [x' y' y1' y2' y3'] 结果 ans = 0 0 0 0 0 0.0541 0.0540 0.0495 0.0455 0.0611 0.1081 0.1079 0.0999 0.0910 0.1207 0.1622 0.1615 0.1510 0.1365 0.1787 0.2162 0.2145 0.2025 0.1819 0.2350 0.2703 0.2670 0.2541 0.2274 0.2896 0.3243 0.3187 0.3054 0.2729 0.3425 0.3784 0.3694 0.3563 0.3184 0.3936 0.4324 0.4191 0.4066 0.3639 0.4429 0.4865 0.4675 0.4559 0.4094 0.4904 0.5405 0.5146 0.5040 0.4548 0.5359 0.5946 0.5602 0.5508 0.5003 0.5796 0.6486 0.6041 0.5961 0.5458 0.6212 0.7027 0.6463 0.6396 0.5913 0.6609 0.7568 0.6866 0.6812 0.6368 0.6985 0.8108 0.7248 0.7208 0.6823 0.7341 0.8649 0.7610 0.7583 0.7278 0.7675

三次样条插值方法的应用

CENTRAL SOUTH UNIVERSITY 数值分析实验报告

三次样条插值方法的应用 一、问题背景 分段低次插值函数往往具有很好的收敛性,计算过程简单,稳定性好,并且易于在在电子计算机上实现,但其光滑性较差,对于像高速飞机的机翼形线船体放样等型值线往往要求具有二阶光滑度,即有二阶连续导数,早期工程师制图时,把富有弹性的细长木条(即所谓的样条)用压铁固定在样点上,在其他地方让他自由弯曲,然后沿木条画下曲线,称为样条曲线。样条曲线实际上是由分段三次曲线并接而成,在连接点即样点上要求二阶导数连续,从数学上加以概括就得到数学样条这一概念。下面我们讨论最常用的三次样条函数及其应用。 二、数学模型 样条函数可以给出光滑的插值曲线(面),因此在数值逼近、常微分方程和偏微分方程的数值解及科学和工程的计算中起着重要的作用。 设区间[]b ,a 上给定有关划分b x x n =<<<= 10x a ,S 为[]b ,a 上满足下面条件的函数。 ● )(b a C S ,2∈; ● S 在每个子区间[]1,+i i x x 上是三次多项式。 则称S 为关于划分的三次样条函数。常用的三次样条函数的边界条件有三种类型: ● Ⅰ型 ()()n n n f x S f x S ''0'',==。 ● Ⅱ型 ()()n n n f x S f x S ''''0'''',==,其特殊情况为()()0''''==n n x S x S 。 ● Ⅲ型 ()() 3,2,1,0,0==j x S x S n j j ,此条件称为周期样条函数。 鉴于Ⅱ型三次样条插值函数在实际应用中的重要地位,在此主要对它进行详细介绍。 三、算法及流程 按照传统的编程方法,可将公式直接转换为MATLAB 可是别的语言即可;另一种是运用矩阵运算,发挥MATLAB 在矩阵运算上的优势。两种方法都可以方便地得到结果。方法二更直观,但计算系数时要特别注意。这里计算的是方法一的程序,采用的是Ⅱ型边界条件,取名为spline2.m 。 Matlab 代码如下: function s=spline2(x0,y0,y21,y2n,x) %s=spline2(x0,y0,y21,y2n,x) %x0,y0 are existed points,x are insert points,y21,y2n are the second

优化设计VC6.0二次插值法

题目:利用二次插值法求()f sin αα=在4≤α≤5上的极小点。 利用VC++6.0进行编程,求得极小点。具体程序如下说明。 一、 二次插值法 求解原理:在求解一元函数的极小点时,常常利用一个低次插值多项式 来逼近原目标函数,然后求该多项式的极小点(低次多项式的极小点比较容易计算),并以此作为目标函数的近似极小点。如果其近似的程度尚未达到所要求的精度时,可以反复使用此法,逐次拟合,直到满足给定的精度时为止。二次差值的程序流程图

程序如下: #include "stdio.h" #include "math.h" #define f(x) sin(x)//宏定义函数f(x) int main() { //////////////////////////////////////////////////////////////////////////二次插值法 printf("*************************************二次插值法************************************\n"); float m1=4,m2=4.5,m3=5,w=1,s; float h1,h2,h3,hp,c1,c2,mp; s=1e-5; int i=0; h1=f(m1); h2=f(m2); h3=f(m3); c1=(h3-h1)/(m3-m1); c2=((h2-h1)/(m2-m1)-c1)/(m2-m3); mp=(m1+m3-(c1/c2))/2; hp=f(mp); while (fabs((m2-mp)/m2)>=s) { i++; if ((mp-m2)*w>0) { if (h2>=hp) { m1=m2; h1=h2; m2=mp; h2=hp; } else { m3=mp; h3=hp; } } else { if (h2>=hp) { m3=m2;

用多项式模型进行数据拟合实验报告(附代码)

实验题目: 用多项式模型进行数据拟合实验 1 实验目的 本实验使用多项式模型对数据进行拟合,目的在于: (1)掌握数据拟合的基本原理,学会使用数学的方法来判定数据拟合的情况; (2)掌握最小二乘法的基本原理及计算方法; (3)熟悉使用matlab 进行算法的实现。 2 实验步骤 2.1 算法原理 所谓拟合是指寻找一条平滑的曲线,最不失真地去表现测量数据。反过来说,对测量 的实验数据,要对其进行公式化处理,用计算方法构造函数来近似表达数据的函数关系。由于函数构造方法的不同,有许多的逼近方法,工程中常用最小平方逼近(最小二乘法理论)来实现曲线的拟合。 最小二乘拟合利用已知的数据得出一条直线或曲线,使之在坐标系上与已知数据之间的距离的平方和最小。模型主要有:1.直线型2.多项式型3.分数函数型4.指数函数型5.对数线性型6.高斯函数型等,根据应用情况,选用不同的拟合模型。其中多项式型拟合模型应用比较广泛。 给定一组测量数据()i i y x ,,其中m i ,,3,2,1,0Λ=,共m+1个数据点,取多项式P (x ),使得 min )]([020 2=-=∑∑==m i i i m i i y x p r ,则称函数P (x )为拟合函数或最小二乘解,此时,令 ∑==n k k k n x a x p 0 )(,使得min ])([02 002=??? ? ??-=-=∑∑∑===m i n k i k i k m i i i n y x a y x p I ,其中 n a a a a ,,,,210Λ为待求的未知数,n 为多项式的最高次幂,由此该问题化为求),,,(210n a a a a I I Λ=的极值问题。 由多元函数求极值的必要条件:0)(200 =-=??∑∑==m i j i n k i k i k i x y x a a I ,其中n j ,,2,1,0Λ= 得到: ∑∑∑===+=n k m i i j i k m i k j i y x a x )(,其中n j ,,2,1,0Λ=,这是一个关于n a a a a ,,,,210Λ的线 性方程组,用矩阵表示如下所示:

计算方法实验报告 插值

实验名称:插值计算 1引言 在生产和科研中出现的函数是多种多样的。常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数f(x)在区间[a,b]上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值。用这张函数表来直接求出其他点的函数值是非常困难的,在有些情况下,虽然可以写出f(x)的解析表达式,但由于结构十分复杂,使用起来很不方便。面对这些情况,构造函数P(x)作为f(x)的近似,插值法是解决此类问题比较古老却目前常用的方法,不仅直接广泛地应用与生产实际和科学研究中,而且是进一步学习数值计算方法的基础。 设函数y=f(x)在区间[a,b]上连续,且在n+1个不同的点a≤x0,x1……,xn≤b上分别取值y0,y1……,yn. 插值的目的就是要在一个性质优良、便于计算的函数φ中,求一简单函数P(x),使P(xi)=yi(i=0,1…,n)而在其他点x≠xi上,作为f(x)的近似。 通常,称区间[a,b]为插值区间,称点x0,x1,…,xn为插值节点,上式为插值条件,称函数类φ为插值函数类,称P(x)为函数f(x)在节点x0,x1,…,xn处的插值函数,求插值函数P(x)的方法称为插值法。 2实验目的和要求 用matlab定义分段线性插值函数、分段二次插值函数、拉格朗日插值函数,输入所给函 数表,并利用计算机选择在插值计算中所需的节点,计算f(0.15),f(0.31),f(0.47)的近似值。

3算法描述 1.分段线性插值流程图

2.分段二次插值流程图

3.拉格朗日插值流程图

4程序代码及注释 1.分段线性插值

实验二插值法概论

实验二插值法 实验2.1 (1)实验程序: function charpt2_1 %输入插值结点 result=inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'2'}) N1=str2num(char(result)); result=inputdlg({'请输入区间下界:'},'charpt_2',1,{'-1'}) N2=str2num(char(result)); result=inputdlg({'请输入区间上界:'},'charpt_2',1,{'1'}) N3=str2num(char(result)); if(N1<1) errordlg('结点输入错误!');return;end %插值结点小于1时错误 f=inline('1./(1+25*x.^2)');a=N2;b=N3; %标准函数f x1=linspace(a,b,N1+1); y1=feval(f,x1); x=a:0.001:b;inter1=Lagrange(x1,y1,x); fplot(f,[a,b],'r-'); %画标准函数f的图形 hold on; plot(x,inter1,'b-'); %画插值逼近函数 legend('原函数','插值多项式函数') xlabel('x');ylabel('y=f(x) o and y=Ln(x)--'); function y=Lagrange(x0,y0,x) 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 end s=s+p*y0(k); end y(i)=s;

matlab 软件拟合与插值运算实验报告

实验6 数据拟合&插值 一.实验目的 学会MATLAB软件中软件拟合与插值运算的方法。 二.实验内容与要求 在生产和科学实验中,自变量x与因变量y=f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 要根据观测点的值,构造一个比较简单的函数y=t (x),使函数在观测点的值等于已知的数值或导数值,寻找这样的函数t(x),办法是很多的。 根据测量数据的类型有如下两种处理观测数据的方法。 (1)测量值是准确的,没有误差,一般用插值。 (2)测量值与真实值有误差,一般用曲线拟合。 MATLAB中提供了众多的数据处理命令,有插值命令,拟合命令。 1.曲线拟合 >> x=[0.5,1.0,1.5,2.0,2.5,3.0]; >> y=[1.75,2.45,3.81,4.80,7.00,8.60]; >> p=polyfit (x,y,2); >> x1=0.5:0.05:3.0; >> y1=polyval(p,x1 ); >> plot(x,y,'*r',x1,y1,'-b')

2.一维插值 >> year=[1900,1910,1920,1930,1940,1990,2000,2010]; >> product = [75.995,91.972,105.711,123.203,131.669,249.633,256.344,267.893 ]; >> p2005=interp1(year,product,2005) p2005 = 262.1185 >> y= interp1(year,product,x, 'cubic'); >> plot(year,product,'o',x,y)

相关文档
最新文档