西北农林科技大学数值分析数值法实验报告

数值法实验报告

专业班级:信息与计算科学121 姓名:金辉 学号:2012014280

1)实验目的

本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插值方法:牛顿多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的优劣。

本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并在MATLAB 软件中去实现。

2)实验题目 实验一:

试用44据进行插值。用图给出{(x i ,y i ),x i =0.2+0.08i ,i=0,1, 11, 10},P 4(x )及S (x )。 实验二:

在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数2

1

()125f x x =

+作多

项式插值及三次样条插值,对每个n 值,分别画出插值函数即()f x 的图形。

实验三:

可以得到平方根函数的近似,在区间[0,64]上作图。 (1)用这9各点作8次多项式插值L 8(x).

(2)用三次样条(自然边界条件)程序求S (x )。从结果看在[0,64]上,

那个插值更精确;在区间[0,1]上,两种哪个更精确?

3)实验原理与理论基础

《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值,拉格朗日

4)实验内容 实验一:

试用4

4

据进行插值。用图给出{(x

i ,y

i

),x

i

=0.2+0.08i,i=0,1, 11, 10},P

4

(x)

及S(x)。

(1)首先我们先求牛顿插值多项式,此处要用4次牛顿插值多项式处理数据。

已知n次牛顿插值多项式如下:

P n =f(x

)+f[x

,x

1

](x-x

)+ f[x

,x

1

,x

2

](x-x

) (x-x

1

)+···+

f[x

0,x

1

, (x)

n

](x-x

) ···(x-x

n-1

)

我们要知道牛顿插值多项式的系数,即均差表中得部分均差。

在MATLAB的Editor中输入程序代码,计算牛顿插值中多项式系数的程序如下:

function varargout=newtonliu(varargin)

clear,clc

x=[0.2 0.4 0.6 0.8 1.0];

fx=[0.98 0.92 0.81 0.64 0.38];

newtonchzh(x,fx);

function newtonchzh(x,fx)

%由此函数可得差分表

n=length(x);

fprintf('*****************差分表

*****************************\n');

FF=ones(n,n);

FF(:,1)=fx';

for i=2:n

for j=i:n

FF(j,i)=(FF(j,i-1)-FF(j-1,i-1))/(x(j)-x(j-i+1));

end

end

for i=1:n

fprintf('%4.2f',x(i));

for j=1:i

fprintf('%10.5f',FF(i,j));

end

fprintf('\n'); end

所以有四次插值牛顿多项式为:

P 4(x )=0.98-0.3(x-0.2)-0.62500 (x-0.2)(x-0.4) -0.20833

(x-0.2)(x-0.4)(x-0.6)-0.52083 (x-0.2)(x-0.4)(x-0.6)(x-0.8)

(2)接下来我们求三次样条插值函数。

用三次样条插值函数由上题分析知,要求各点的M 值:

⎥⎥⎥⎥

⎥⎦

⎤⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡06.7500-4.5000-3.7500-0M M M M M 2.5000000020.50000000.50002.500000.50002.5000000 2

43210

三次样条插值函数计算的程序如下:

function tgsanci(n,s,t) %n 代表元素数,s,t 代表端点的一阶导。

x=[0.2 0.4 0.6 0.8 1.0]; y=[0.98 0.92 0.81 0.64 0.38];

n=5

for j=1:1:n-1

h(j)=x(j+1)-x(j);

end

for j=2:1:n-1

r(j)=h(j)/(h(j)+h(j-1));

end

for j=1:1:n-1

u(j)=1-r(j);

end for j=1:1:n-1

f(j)=(y(j+1)-y(j))/h(j);

end

for j=2:1:n-1

d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));

end

d(1)=0 d(n)=0 a=zeros(n,n);

for j=1:1:n

a(j,j)=2;

end

r(1)=0; u(n)=0;

for j=1:1:n-1

a(j+1,j)=u(j+1); a(j,j+1)=r(j);

end b=inv(a) m=b*d'

p=zeros(n-1,4); %p 矩阵为S(x)函数的系数矩阵 for j=1:1:n-1 p(j,1)=m(j)/(6*h(j));

p(j,2)=m(j+1)/(6*h(j));

p(j,3)=(y(j)-m(j)*(h(j)^2/6))/h(j); p(j,4)=(y(j+1)-m(j+1)*(h(j)^2/6))/h(j);

end p

得到m=(0 -1.6071 -1.0714 -3.1071 0)T

即M 0=0 ;M 1= -1.6071;M 2= -1.0714; M 3= -3.1071; M 4=0 则根据三次样条函数定义,可得:

S(x)= ⎪⎪⎩

⎪⎪⎨⎧∈-+-+--∈-+-+-∈-+-+--∈-+-+---]0.1,8.0[x )8.0(9.10.1 3036.38.00-x 0.12.5893-]8.0,6.0[x 6.0x 3036.3x 8.00857.4.60-x 5893.2-x .800.8929

-]6.0,4.0[x 4.0x 7508.4x 6.04.6536 .40-x 8929.0x .601.3393- ]4.0,2.0[x )2.0(6536.44.0900.42.0 1.33934.00 333

3333

,)()()(),()()()(),()()()(,)()()(x x x x x x x

接着,在Command Window里输入画图的程序代码,

下面是画牛顿插值以及三次样条插值图形的程序:

x=[0.2 0.4 0.6 0.8 1.0];

y=[0.98 0.92 0.81 0.64 0.38];

plot(x,y)

hold on

for i=1:1:5

y(i)=0.98-0.3*(x(i)-0.2)-0.62500*(x(i)-0.2)*(x(i)-0.4)

-0.20833*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.52083*(x(i)-0.2)*(x(i)-0 .4)*(x(i)-0.6)*(x(i)-0.8)

end

k=[0 1 10 11]

x0=0.2+0.08*k

for i=1:1:4

y0(i)=0.98-0.3*(x(i)-0.2)-0.62500*(x(i)-0.2)*(x(i)-0.4)

-0.20833*(x(i)-0.2)*(x(i)-0.4)*(x(i)-0.6)-0.52083*(x(i)-0.2)*(x(i)-0 .4)*(x(i)-0.6)*(x(i)-0.8)

end

plot( x0,y0,'o',x0,y0 )

hold on

y1=spline(x,y,x0)

plot(x0,y1,'o')

hold on

s=csape(x,y,'variational')

fnplt(s,'r')

hold on

gtext('三次样条自然边界')

gtext('原图像')

gtext('4次牛顿插值')

运行上述程序可知:给出的{(x

i ,y

i

),x

i

=0.2+0.08i,i=0,1, 11, 10}点,S

(x)及P

4

(x)图形如下所示:

实验二:

在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数2

1

()125f x x =

+作多

项式插值及三次样条插值,对每个n 值,分别画出插值函数即()f x 的图形。

我们先求多项式插值:

在MATLAB 的Editor 中建立一个多项式的M-file,输入如下的命令(如牛顿插值公式):

function [C,D]=newpoly(X,Y) n=length(X); D=zeros(n,n) D(:,1)=Y' for j=2:n for k=j:n

D(k,j)=(D(k,j-1)- D(k-1,j-1))/(X(k)-X(k-j+1)); end end C=D(n,n); for k=(n-1):-1:1

C=conv(C,poly(X(k))) m=length(C); C(m)= C(m)+D(k,k);

end

当n=10时,我们在Command Window中输入以下的命令:clear,clf,hold on;

X=-1:0.2:1;

Y=1./(1+25*X.^2);

[C,D]=newpoly(X,Y);

x=-1:0.01:1;

y=polyval(C,x);

plot(x,y,X,Y,'.');

grid on;

xp=-1:0.2:1;

z=1./(1+25*xp.^2);

plot(xp,z,'r')

得到插值函数和f(x)图形:

当n=20时,我们在Command Window中输入以下的命令:clear,clf,hold on;

X=-1:0.1:1;

Y=1./(1+25*X.^2);

[C,D]=newpoly(X,Y);

x=-1:0.01:1;

y=polyval(C,x);

plot(x,y,X,Y,'.');

grid on;

xp=-1:0.1:1;

z=1./(1+25*xp.^2);

plot(xp,z,'r')

得到插值函数和f(x)图形:

下面再求三次样条插值函数,在MATLAB的Editor中建立一个多项式的M-file, 输入下列程序代码:

function S=csfit(X,Y,dx0,dxn)

N=length(X)-1;

H=diff(X);

D=diff(Y)./H;

A=H(2:N-1);

B=2*(H(1:N-1)+H(2:N));

C=H(2:N);

U=6*diff(D);

B(1)=B(1)-H(1)/2;

U(1)=U(1)-3*(D(1));

B(N-1)=B(N-1)-H(N)/2;

U(N-1)=U(N-1)-3*(-D(N));

for k=2:N-1

temp=A(k-1)/B(k-1);

B(k)=B(k)-temp*C(k-1);

U(k)=U(k)-temp*U(k-1);

end

M(N)=U(N-1)/B(N-1);

for k=N-2:-1:1

M(k+1)=(U(k)-C(k)*M(k+2))/B(k);

end

M(1)=3*(D(1)-dx0)/H(1)-M(2)/2;

M(N+1)=3*(dxn-D(N))/H(N)-M(N)/2;

for k=0:N-1

S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1));

S(k+1,2)=M(k+1)/2;

S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6; S(k+1,4)=Y(k+1);

end

当n=10时,我们在Command Window中输入以下的命令:clear,clc

X=-1:0.2:1;

Y=1./(25*X.^2+1);

dx0= 0.0739644970414201;dxn= -0.0739644970414201; S=csfit(X,Y,dx0,dxn)

x1=-1:0.01:-0.5;y1=polyval(S(1,:),x1-X(1));

x2=-0.5:0.01:0;y2=polyval(S(2,:),x2-X(2));

x3=0:0.01:0.5; y3=polyval(S(3,:),x3-X(3));

x4=0.5:0.01:1;y4=polyval(S(4,:),x4-X(4));

plot(x1,y1,x2,y2,x3,y3,x4,y4, X,Y,'.')

结果如图:

当n=20时,我们在Command Window中输入以下的命令:clear,clc

X=-1:0.1:1;

Y=1./(25*X.^2+1);

dx0= 0.0739644970414201;dxn= -0.0739644970414201; S=csfit(X,Y,dx0,dxn)

x1=-1:0.01:-0.5;y1=polyval(S(1,:),x1-X(1));

x2=-0.5:0.01:0;y2=polyval(S(2,:),x2-X(2));

x3=0:0.01:0.5; y3=polyval(S(3,:),x3-X(3));

x4=0.5:0.01:1;y4=polyval(S(4,:),x4-X(4));

plot(x1,y1,x2,y2,x3,y3,x4,y4, X,Y,'.')

结果如图:

实验三:

可以得到平方根函数的近似,在区间[0,64]上作图。 (1)用这9各点作8次多项式插值L 8(x).

(2)用三次样条(自然边界条件)程序求S (x )。从结果看在[0,64]上,

那个插值更精确;在区间[0,1]上,两种哪个更精确?

L 8(x)可由公式L n (x)=∑=n

0k k k )(l y j x 得出。

三次样条可以利用自然边界条件。写成矩阵:

⎥⎥⎥

⎥⎥⎥⎦

⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡4321043210343

22

1

10d M M M M M 200020

00

02

002

00

2d d d d λμμλμλμλ 其中μj =

j

1-j 1-j h h h +,λi=

j

1-j j h h h +,dj=6f[x j-1,x j ,x j+1],μn =λ0=0 d 0=d n =0

l 0(x)=)

640)(490)(360)(250)(160)(90)(40)(10()64)(49)(36)(25)(16)(9)(4)(1-(x ---------------x x x x x x x

l 1(x)= )

641)(491)(361)(251)(161)(91)(41)(01()64)(49)(36)(25)(16)(9)(4)(0-(x ---------------x x x x x x x

l 2(x)= )

644)(494)(364)(254)(164)(94)(14)(04()64)(49)(36)(25)(16)(9)(1)(0-(x ---------------x x x x x x x

l 3(x)= )

649)(499)(369)(259)(169)(49)(19)(09()64)(49)(36)(25)(16)(4)(1)(0-(x ---------------x x x x x x x

l 4(x)= )

6416)(4916)(3616)(2516)(916)(416)(116)(016()

64)(49)(36)(25)(9)(4)(1)(0-(x ---------------x x x x x x x

l 5(x)= )

6425)(4925)(3625)(1625)(925)(425)(125)(025()

64)(49)(36)(16)(9)(4)(1-(x )0-x (--------------x x x x x x

l 6(x)= )

6436)(4936)(2536)(1636)(936)(436)(136)(036()

64)(49)(25)(16)(9)(4)(1)(0-(x ---------------x x x x x x x

l 7(x)= )

6449)(3649)2549)(1649)(949)(449)(149(049)

64)(36)(25)(16)(9)(4)(1-(x 0-x --------------()()(x x x x x x

l 8(x)=

)

4964)(3664)(2564)(1664)(964)(464)(164)(064()49)(36)(25)(16)(9)(4)(1-0)(x -x (--------------x x x x x x L 8(x)= l 1(x)+2 l 2(x)+3 l 3(x)+4 l 4(x)+5 l 5(x)+6 l 6(x)+7 l 7(x)+8 l 8(x)

求三次样条插值函数由MATLAB 计算: 可得矩阵形式的线性方程组为:

⎥⎥

⎥⎥⎥⎥⎥⎥⎥

⎥⎥⎥⎦

⎢⎢⎢

⎢⎢⎢

⎢⎢

⎢⎢⎢⎢⎣⎡-------=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡00022.00035.00061.0191.000286.01.00.10M M M M M M M M M 000.0200000000573.50000.02634.400000000417.50000.02583.400000000500.50000.02500.400000

005625.0000.02375.400000000833.500000.2167.400000000250.60000.02750.300000000500.70000.02500.2000000000000.028********

在MATLAB 中的Editor 中输入程序代码,

以下是三次样条函数的程序代码:

function tgsanci(n,s,t) %n 代表元素数,s,t 代表端点的一阶导。

y=[0 1 2 3 4 5 6 7 8]; x=[0 1 4 9 16 25 36 49 64]; n=9

for j=1:1:n-1

h(j)=x(j+1)-x(j);

end

for j=2:1:n-1

r(j)=h(j)/(h(j)+h(j-1));

end

for j=1:1:n-1

u(j)=1-r(j);

end

for j=1:1:n-1

f(j)=(y(j+1)-y(j))/h(j);

end for j=2:1:n-1

d(j)=6*(f(j)-f(j-1))/(h(j-1)+h(j));

end

d(1)=0 d(n)=0

a=zeros(n,n); for j=1:1:n

a(j,j)=2;

end

r(1)=0; u(n)=0;

for j=1:1:n-1

a(j+1,j)=u(j+1); a(j,j+1)=r(j);

end b=inv(a) m=b*d' t=a

p=zeros(n-1,4); %p 矩阵为S(x)函数的系数矩阵 for j=1:1:n-1

p(j,1)=m(j)/(6*h(j)); p(j,2)=m(j+1)/(6*h(j));

p(j,3)=(y(j)-m(j)*(h(j)^2/6))/h(j); p(j,4)=(y(j+1)-m(j+1)*(h(j)^2/6))/h(j);

end p

解得:

M 0=0;M 1=-0.5209;M 2=0.0558;M 3=-0.0261;M 4=0.0006;M 5=-0.0029;M 6=-0.0008;M 7=--0.0009;

M 8=0,则三次样条函数:

S(x)= ⎪⎪⎪⎪

⎪⎪⎩⎪⎪⎪

⎪⎪⎪⎨⎧∈+-+-+-∈+-+--∈+-+--∈+---∈-+-+-∈-+-+--∈-+-+-∈+-+--+-]64,48[x 48)-0.5333(x 640.4689)48(0640]48,36[x 36)-0.5404(x 480.4633360-480]

36,25[x 25)-0.5470(x 364599.0250-360]25,16[x 16)-0.5600(x 250.4436-160.0001-250]16,9[x 9)-0.5708(x -164590.090160.0006-]

9,4[x 4x 0.6271x 90.35354-x 0009.0x 90019.0]4,1[x 1x 0.6388x 40.59381-x 0.0031-x 40.0289

-]1,0[x 0)-1.0868(x 100)(0868.0100333

333333

3333

333

,)()(

,)()()(,)()()(,)()()(

,)()()(),()()()(),()()()(,)()(x x x x x x x x x x x x x x x x x x

下面进行画图,在Command Window 中输入画图的程序代码:

%画图形比较那个插值更精确的函数: x0=[0 1 4 9 16 25 36 49 64]; y0=[0 1 2 3 4 5 6 7 8];

x=0:64;y=lagr1(x0,y0,x);

plot(x0,y0,'o')

hold on

plot(x,y,'r');

hold on;

pp=csape(x0,y0,'variational')

fnplt(pp,'g');

hold on;

plot(x0,y0,':b');hold on

%axis([0 2 0 1]); %看[0 1]区间的图形时加上这条指令gtext('三次样条插值')

gtext('原图像')

gtext('拉格朗日插值')

%下面是求拉格朗日插值的函数

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=p*y0(k)+s;

end

y(i)=s;

end

拉格朗日插值函数与三次样条插值函数如图中所示,绿色实线条为三次样条插值曲线,蓝色虚线条为x=y2的曲线,另外一条红色线条为拉格朗日插值曲线。图3-1为[0 1]的曲线,图3-2为[0 64]区间上的曲线。

图3—1

0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

1.8

2

00.10.20.30.40.50.60.7

0.80.91三次样条插值

原图像

拉格朗日插值

010203040506070

-20

20

40

60

80

100

三次样条插值

原图像

拉格朗日插值

图3—2

由图3-1可以看出,红色的线条与蓝色虚线条几乎重合,所以可知拉格朗日插值函数的曲线更接近开平方根的函数曲线,在[0,1]朗格朗日插值更精确。而在区间[0,64]上从图3-2中可以看出蓝色虚线条和绿色线条是几乎重合的,而红色线条在[30,70]之间有很大的振荡,所在在区间[0,64]三次样条插值更精确写。

5)实验结果

单个多项式高次插值效果并不理想,有龙格现象,偏差大,没有使用价值。而分段低次插值则精确度较高,拟合效果较好,而三次样条插值具有良好的收敛性与稳定性,与分段低次插值相比较光滑度更高,而且提供的信息也相对少一些。我们可以看到,在以上的三道实验题里,我们可以从图形中看出,三次样条的拟合程度是三种插值函数里最好的。

6)实验结果分析与小结

通过此次实验,我对牛顿多项式插值,三次样条插值,拉格朗日插值有了更进一步的了解,知道了三次样条的拟合程度在高次的情况下更高,在理论上和应用上都有重要意义,在利用计算机编程软件进行高次插值的时候,我们可以多考虑利用三次样条进行插值。

数值分析实验报告

实验2.1 多项式插值的振荡现象 实验目的: 在一个固定的区间上用插值逼近一个函数,显然Lagrange 插值中使用的节点越多,插 值多项式的次数就越高。我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。Runge 给出的一个例子是极著名并富有启发性的。 实验容: 设区间[-1,1]上函数 f(x)=1/(1+25x 2)。 考虑区间[-1,1]的一个等距划分,分点为 x i = -1 + 2i/n ,i=0,1,2,…,n , 则拉格朗日插值多项式为 201()()125n n i i i L x l x x ==+∑. 其中,l i (x),i=0,1,2,…,n 是n 次Lagrange 插值基函数。 实验步骤与结果分析: 实验源程序 function Chap2Interpolation % 数值实验二:“实验2.1:多项式插值的震荡现象” % 输入:函数式选择,插值结点数 % 输出:拟合函数及原函数的图形 promps = {'请选择实验函数,若选f(x),请输入f,若选h(x),请输入h,若选g(x),请输入g:'}; titles = 'charpt_2'; result = inputdlg(promps,'charpt 2',1,{'f'}); Nb_f = char(result); if(Nb_f ~= 'f' & Nb_f ~= 'h' & Nb_f ~= 'g')errordlg('实验函数选择错误!');return;end result = inputdlg({'请输入插值结点数N:'},'charpt_2',1,{'10'}); Nd = str2num(char(result)); if(Nd <1)errordlg('结点输入错误!');return;end switch Nb_f case 'f' f=inline('1./(1+25*x.^2)'); a = -1;b = 1; case 'h' f=inline('x./(1+x.^4)'); a = -5; b = 5; case 'g' f=inline('atan(x)'); a = -5; b= 5; end x0 = linspace(a, b, Nd+1); y0 = feval(f, x0); x = a:0.1:b; y = Lagrange(x0, y0, x); fplot(f, [a b], 'co'); hold on; plot(x, y, 'b--'); xlabel('x'); ylabel('y = f(x) o and y = Ln(x)--'); %-------------------------------------------------------------------- function y=Lagrange(x0, y0, x);

数值分析实验报告

实验报告 实验项目名称 估计水塔的水流量 实验项目类型 验证 演示 综合 设计 其他 指导教师 成绩 一、实验目的 (1)学会对实际问题的分析方法 (2)学会利用所学的知识解决实际问题 (3)设计出相应的算法,编制相应的应用程序 二、实验内容 某居民区,其自来水是有一个圆柱形水塔提供,水塔高12.2m ,塔的直径为17.4m ,水塔是由水泵根据水塔中的水位自动加水,一般水泵每天工作两次。按照设计,当水塔中的水位降低至最低水位,约8.2m 时,水泵自动启动加水。当水位升至最高水位,约10.8m 时,水泵停止工作。 下表给出了某一天的测量记录,测量了28个时刻的数据,但由于水泵正向水塔供水,由3个时刻无法测量到水位(表中为—)。 试建立数学模型,计算居民的用水速度和日总用水量。 三、实验原理、方法(算法)、步骤 时刻 0 0.921 1.843 2.949 3.871 4.978 5.900 水位 9.677 9.479 9.308 9.125 8.982 8.814. 8.686 时刻 7.006 7.928 8.967 9.981 10.925 10.945 12.032 水位 8.525 8.388 8.220 — — 10.820 10.500 时刻 12.954 13.875 14.982 15.903 1 6.826 1 7.931 19.037 水位 10.210 9.936 9.653 9.409 9.180 8.921 8.662 时刻 1 9.959 20.839 22.015 22.958 23.880 24.986 25.908 水位 8.433 8.220 — 10.820 10.591 10.354 10.180

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 1 2 3 4 5 篇二:数值分析实验报告 实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。即若x0 偏离所求根较远,Newton法可能发散的结论。并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收

敛,但精度不够。熟悉Matlab语言编程,学习编程要点。体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk) 产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 xk?1?xk?rf(xk) 'f(xk) 其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x);

数值分析实验报告5篇

误差分析 实验1.1(问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对(1.1)中19x 的系数作一个小的扰动。我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a 的全部根;而函数 poly(v)b = 的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve =

数值分析实验报告

《数值分析》 实验报告 学院:计算机科学与软件学院姓名:XXX 班级:计算机XX班 学号:XXXXXX

实验一:舍入误差与数值稳定性 实验目的: 1、 通过上机编程,复习巩固以前所学程序设计语言; 2、 通过上机计算,了解舍入误差所引起的数值不稳定性。 3、 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。 实验内容:用两种不同的顺序计算644834.110000 12 ≈∑=-n n ,分析其误差 的变化。 实验流程图:

实验源程序: #include #include void main() { int i; float s1=0,s2=0,d1,d2; for (i=1;i<=10000;i++) s1=s1+1.0f/(i*i); for (i=10000;i>=1;i--) s2=s2+1.0f/(i*i); d1=(float)(fabs(1.644834-s1)); d2=(float)(fabs(1.644834-s2)); printf("正向求和结果为%f\n 误差为%f\n\n",s1,d1); printf("反向求和结果为%f\n 误差为%f\n\n",s2,d2); if(d1

实验结果: 实验分析:第一次做数值实验,又一次使用C语言编程,没有了刚学习C语言的艰难,能够将实验步骤转换成流程图并编写出完整的实验代码,在经过多次调试、改正后得到正确的程序和结果。这个实验较简单,计算误差时如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是稳定的,否则称此算法是数值不稳定的,减少运算次数可以减小舍入误差。在运算中,如果参加运算的数的数量级相差很大,而计算机位数有限,如不注意运算次序就可能出现大数“吃掉”小数的现象,进而影响计算结果的可靠性,所以计算过程中要注意运算次序,避免出现这种现象。 实验二:拉格朗日插值法和牛顿插值法 实验目的:分别用拉格朗日差值和牛顿插值解决数学问题,并比较各方法的优略。 1、拉格朗日插值 实验内容: 按下列数据 -3.0 -1.0 1.0 2.0 3.0 x i 1.0 1.5 2.0 2.0 1.0 y i

数值分析上机实验报告

数值分析上机实验报告 数值分析上机实验报告 一、引言 数值分析是一门研究利用计算机进行数值计算的学科。通过数值分析,我们可 以使用数学方法和算法来解决实际问题,例如求解方程、插值和逼近、数值积 分等。本次上机实验旨在通过编程实现数值计算方法,并应用于实际问题中。二、实验目的 本次实验的目的是掌握数值计算方法的基本原理和实现过程,加深对数值分析 理论的理解,并通过实际应用提高编程能力。 三、实验内容 1. 数值求解方程 首先,我们使用二分法和牛顿迭代法分别求解非线性方程的根。通过编写程序,输入方程的初始值和精度要求,计算得到方程的根,并与理论解进行对比。 2. 数值插值和逼近 接下来,我们使用拉格朗日插值和最小二乘法进行数据的插值和逼近。通过编 写程序,输入给定的数据点,计算得到插值多项式和逼近多项式,并绘制出插 值曲线和逼近曲线。 3. 数值积分 然后,我们使用梯形法和辛普森法进行定积分的数值计算。通过编写程序,输 入被积函数和积分区间,计算得到定积分的近似值,并与解析解进行比较。 四、实验步骤 1. 数值求解方程

(1)使用二分法求解非线性方程的根。根据二分法的原理,编写程序实现二分法求解方程的根。 (2)使用牛顿迭代法求解非线性方程的根。根据牛顿迭代法的原理,编写程序实现牛顿迭代法求解方程的根。 2. 数值插值和逼近 (1)使用拉格朗日插值法进行数据的插值。根据拉格朗日插值法的原理,编写程序实现数据的插值。 (2)使用最小二乘法进行数据的逼近。根据最小二乘法的原理,编写程序实现数据的逼近。 3. 数值积分 (1)使用梯形法进行定积分的数值计算。根据梯形法的原理,编写程序实现定积分的数值计算。 (2)使用辛普森法进行定积分的数值计算。根据辛普森法的原理,编写程序实现定积分的数值计算。 五、实验结果与分析 1. 数值求解方程 通过二分法和牛顿迭代法,我们成功求解了给定非线性方程的根,并与理论解进行了对比。结果表明,二分法和牛顿迭代法都能够较好地求解非线性方程的根,但在不同的问题中,二者的收敛速度和精度可能会有所差异。 2. 数值插值和逼近 通过拉格朗日插值和最小二乘法,我们成功进行了数据的插值和逼近,并绘制出了插值曲线和逼近曲线。结果表明,拉格朗日插值法能够准确地通过给定的

《数值分析》课程实验报告范文

《数值分析》课程实验报告范文 《数值分析》课程实验报告姓名:学号:学院:机电学院日期:2022年某月某日目录实验一函数插值方法1实验二函数逼近与曲线拟合5实验三数值积分与数值微分7实验四线方程组的直接解法9实验五解线性方程组的迭代法15实验六非线性方程求根19实验七矩阵特征值问题计算21实验八常微分方程初值问题数值解法24实验一函数插值方法一、问题提出对于给定的一元函数的n+1个节点值。试用Lagrange公式求其插值多项式或分段二次Lagrange插值多项式。 实验二函数逼近与曲线拟合一、问题提出从随机的数据中找出其规律性,给出其近似表达式的问题,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。 在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量与时间t的拟合曲线。 t(分)051015202530354045505501.272.162.863.443.874.154.374.51 4.584.024.64二、要求1、用最小二乘法进行曲线拟合;2、近似解析表达式为;3、打印出拟合函数,并打印出与的误差,;4、另外选取一个近似表达式,尝试拟合效果的比较;5、某绘制出曲线拟合图。 三、目的和意义1、掌握曲线拟合的最小二乘法;2、最小二乘法亦可用于解超定线代数方程组;3、探索拟合函数的选择与拟合精度间的关系四、实验步骤:第一步先写出线性最小二乘法的M文件functionc=lpoly(某,y,m)n=length(某);b=zero(1:m+1);f=zero(n,m+1); fork=1:m+1f(:,k)=某.^(k-1);enda=f'某f;b=f'某y';c=a\

数值分析实验报告

《数值分析》 实验报告 班级: 姓名: 学号: 指导老师:

实验基本要求 一、上机前的准备工作 1、复习和掌握与本次实验有关的教学内容。 2、根据本次实验要求,在纸上编写算法及上机的程序,并经过人工模拟运行检验,减少不必要的错误,提高上机效率。切忌不编程序、不作人工检查就进行程序输入,这只能使上机调试的难度增加,甚至可能带来学习自信心的下降,影响后续课程的学习。 二、上机实验步骤 1、启动开发环境; 2、建立源程序文件,输入源程序; 3、编译产生目标程序,连接生成可执行程序,运行程序,输出结果; 4、对数值计算结果进行误差分析,讨论数值算法的收敛性与稳定性; 5、整理实验报告。 三、实验报告 实验报告是记录实验工作全过程的技术文档,实验报告的撰写是科学技术工作的一个组成部分。《数值分析》实验报告包括下列要求: 1、实验原理; 2、实验内容和要求; 3、数值算法描述,包括数据输入、数据处理和数据输出; 4、算法的实现 (1)给出具体的计算实例, (2)经调试正确的源程序清单, (3)对具体的数值例子给出数值结果; 5、计算结果的误差分析,算法的收敛性与稳定性的讨论; 6、实验心得。

实验一、误差分析 一、实验目的 1、通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2、通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3、 通过上机计算,了解舍入误差所引起的数值不稳定性。 二、实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三、实验任务 对20,,2,1,0 =n ,计算定积分 ⎰+=1 05dx x x y n n . 算法1:利用递推公式 151--= n n y n y , 20,,2,1 =n , 取 ⎰≈-=+=100182322.05ln 6ln 5 1dx x y . 算法2:利用递推公式 n n y n y 5 1511-=- 1,,19,20 =n . 注意到

数值计算方法实验报告

数值计算方法实验报告 一、实验介绍 本次实验是关于数值计算方法的实验,旨在通过计算机模拟的方法,实现对于数值计算方法的掌握。本次实验主要涉及到的内容包括数值微积分、线性方程组的求解、插值与拟合、常微分方程的数值解等。 二、实验内容 1. 数值微积分 数值微积分是通过计算机模拟的方法,实现对于微积分中的积分运算的近似求解。本次实验中,我们将会使用梯形公式和辛普森公式对于一定区间上的函数进行积分求解,并比较不同公式的计算误差。 2. 线性方程组的求解 线性方程组求解是数值计算领域中的重要内容。本次实验中,我们将会使用高斯消元法、LU分解法等方法对于给定的线性方程组进行求解,并通过比较不同方法的计算效率和精度,进一步了解不同方法的优缺点。

3. 插值与拟合 插值与拟合是数值计算中的另一个重要内容。本次实验中,我们将会使用拉格朗日插值法和牛顿插值法对于给定的数据进行插值求解,并使用最小二乘法对于给定的函数进行拟合求解。 4. 常微分方程的数值解 常微分方程的数值解是数值计算中的难点之一。本次实验中,我们将会使用欧拉法和龙格-库塔法等方法对于给定的常微分方程进行数值解的求解,并比较不同方法的计算精度和效率。 三、实验结果 通过本次实验,我们进一步加深了对于数值计算方法的理解和掌握。在数值微积分方面,我们发现梯形公式和辛普森公式都能够有效地求解积分,但是辛普森公式的计算精度更高。在线性方程组求解方面,我们发现LU分解法相对于高斯消元法具有更高的计算效率和更好的数值精度。在插值与拟合方面,我们发现拉格朗日插值法和牛顿插值法都能够有效地进行插值求解,而最小二乘法则可以更好地进行函数拟合求解。在常微分方程的数值解方面,我们发现欧拉法和龙格-库塔法都能够有效地进行数值解的求解,但是龙格-库塔法的数值精度

数值分析实验报告 matlab

数值分析实验报告 实验背景 数值分析是研究利用数值方法解决数学问题的一门学科。在实际科学计算中, 很多问题往往无法通过解析方法得到精确解,因此需要借助数值分析方法来近似求解。本实验使用Matlab软件来进行数值分析实验。 实验目的 本实验旨在通过数值方法解决给定问题,并验证结果的准确性和有效性。 实验步骤 1.导入数据:首先,我们需要从外部文件或手动输入数据来进行数值分 析。在Matlab中,可以使用load()函数或手动输入数据来导入数据。 2.数据预处理:对导入的数据进行预处理,包括数据清洗、缺失值处理、 异常值处理等。通过Matlab提供的函数和方法,可以方便地进行数据预处理。 3.数据分析:根据实验要求,使用合适的数值方法进行数据分析。常见 的数值方法包括插值、拟合、积分、微分等。根据具体情况选择合适的方法,并使用Matlab提供的相关函数进行计算。 4.结果可视化:将分析得到的结果可视化展示,以便更直观地理解数据 分析的结果。在Matlab中,可以使用plot、bar、histogram等函数进行数据可视化。 5.结果验证:对分析结果进行验证,比较数值方法得到的近似解与理论 解的差异。通过对比分析,可以评估数值方法的准确性和有效性。 6.结果讨论:对实验结果进行讨论和总结。分析实验中遇到的问题、方 法的优缺点,并提出改进的建议。 实验结果 根据实验步骤,我们得到了以下实验结果: 1. 经过数据预处理,得到了清洗后 的数据集。 2. 使用插值方法对缺失值进行填充,并对异常值进行处理。 3. 应用拟 合方法,得到了拟合曲线,并计算了相关的拟合误差。 4. 使用数值积分方法,计 算了给定函数的积分值。 5. 进行结果可视化,展示了数据分析的结果。

数值计算方法实验报告

数值计算方法实验报告 一、实验目的 本实验旨在通过Python语言编写数值计算方法程序,掌握常见数值计算方法的实现原理及应用。具体包括:插值法、最小二乘法、数值微积分、数值解方程、数值解微分方程等。 二、实验环境 Python编程语言、Jupyter Notebook环境 三、实验内容 1.插值法 (1)代码实现:在Python中使用Scipy库中的Interpolate模块实现拉格朗日插值法和牛顿插值法,并通过数据可视化展示其效果。 (2)实验步骤: - 导入所需库,准备所需数据; - 定义拉格朗日插值法函数;

- 定义牛顿插值法函数; - 测试函数并可视化结果。 (3)实验结果: 2.最小二乘法 (1)代码实现:在Python中使用Numpy库实现最小二乘法,并通过数据可视化展示其效果。 (2)实验步骤: - 导入所需库,准备所需数据; - 定义最小二乘法函数; - 测试函数并可视化结果。 (3)实验结果: 3.数值微积分 (1)代码实现:在Python中实现梯形法和辛普森法,并通过数据可视化展示其效果。

(2)实验步骤: - 导入所需库,准备所需数据; - 定义梯形法函数和辛普森法函数; - 测试函数并可视化结果。 (3)实验结果: 4.数值解方程 (1)代码实现:在Python中实现二分法、牛顿法和割线法,并通过数据可视化展示其效果。 (2)实验步骤: - 导入所需库,准备所需数据; - 定义二分法函数、牛顿法函数和割线法函数; - 测试函数并可视化结果。 (3)实验结果:

5.数值解微分方程 (1)代码实现:在Python中实现欧拉法和龙格-库塔法,并通过数据可视化展示其效果。 (2)实验步骤: - 导入所需库,准备所需数据; - 定义欧拉法函数和龙格-库塔法函数; - 测试函数并可视化结果。 (3)实验结果: 四、实验总结 通过本次实验,我学习了数值计算方法的常用算法和实现原理,掌握了Python 语言实现数值计算方法的方法,加深了对数值计算方法的理解和应用。实验中遇到的问题,我通过查找资料和与同学的讨论得到了解决,也更加熟练地掌握了Python语言的使用。

数值分析实验 实验报告

数值分析实验实验报告 数值分析实验实验报告 引言 在现代科学与工程领域,数值分析是一项重要的技术手段。通过数值方法,我 们可以利用计算机模拟和解决各种实际问题,如物理、化学、生物、经济等领 域中的方程求解、优化问题、数据拟合等。本实验旨在通过实际案例,探讨数 值分析的应用和效果。 实验一:方程求解 首先,我们考虑一个简单的方程求解问题。假设我们需要求解方程f(x) = 0的根,其中f(x)是一个在给定区间[a, b]上连续且单调的函数。为了实现这个目标,我 们可以采用二分法、牛顿法、弦截法等数值方法。 在本实验中,我们选择使用二分法来求解方程f(x) = 0。这种方法的基本思想是 通过不断缩小区间[a, b]的范围,直到找到一个近似的根。我们首先选取一个中 间点c,计算f(c)的值,然后根据f(c)与0的关系,将区间[a, b]分成两部分。重 复这个过程,直到找到满足精度要求的根。 实验二:数据拟合 接下来,我们考虑一个数据拟合的问题。假设我们有一组离散的数据点,我们 希望找到一个函数,使得该函数与这些数据点的拟合误差最小。为了实现这个 目标,我们可以采用最小二乘法等数值方法。 在本实验中,我们选择使用最小二乘法来进行数据拟合。这种方法的基本思想 是通过最小化数据点与拟合函数之间的误差平方和,来确定拟合函数的参数。 我们首先选择一个拟合函数的形式,如线性函数、多项式函数等。然后,通过

最小化误差平方和的方法,计算出拟合函数的参数。 实验三:优化问题 最后,我们考虑一个优化问题。假设我们需要在给定的约束条件下,找到一个 使得目标函数取得最大或最小值的变量。为了实现这个目标,我们可以采用梯 度下降法、遗传算法等数值方法。 在本实验中,我们选择使用梯度下降法来解决优化问题。这种方法的基本思想 是通过迭代的方式,不断调整变量的取值,直到找到一个满足约束条件的最优解。我们首先计算目标函数关于变量的梯度,然后根据梯度的方向和大小,更 新变量的取值。通过不断迭代,我们可以逐步接近最优解。 结论 通过本实验,我们深入了解了数值分析的基本概念和常用方法。方程求解、数 据拟合和优化问题是数值分析中常见的应用场景,通过合适的数值方法,我们 可以有效地解决这些问题。然而,数值分析也存在一些局限性,如舍入误差、 数值不稳定性等。因此,在实际应用中,我们需要综合考虑问题的特点和数值 方法的适用性,选择合适的方法来解决实际问题。 总之,数值分析是一门重要的学科,它在科学与工程领域中发挥着重要的作用。通过实验的方式,我们可以更好地理解和应用数值分析的方法,提高问题求解 的效率和准确性。希望本实验对大家的学习和研究有所帮助。

数值计算方法实验报告

数值计算方法实验报告 实验目的: 本实验的目的是了解数值计算方法的基本原理和应用,掌握数值计算方法的基本步骤和算法,熟练运用数值计算方法解决实际问题。 实验内容: 1. 基本数值计算方法的实现,如二分法、牛顿迭代法、弦截法等。 2. 常微分方程数值解法的实现,如欧拉法、龙格-库塔法等。 3. 常微分方程组数值解法的实现,如欧拉法、龙格-库塔法等。 4. 线性方程组数值解法的实现,如高斯消元法、LU分解法等。 5. 插值与拟合的实现,如拉格朗日插值、牛顿插值、最小二乘法等。 实验步骤: 1. 根据教材或参考资料,了解数值计算方法的基本原理和应用。

2. 根据实验内容和要求,选择相应的数值计算方法,编写程序实现。 3. 运用编写的程序,解决给定的数值计算问题,分析计算结果。 4. 根据实验结果,总结数值计算方法的优缺点及应用范围。 实验要求: 1. 熟练掌握数值计算方法的基本原理和应用,能够灵活运用数值计算方法解决实际问题。 2. 编写程序时,注意代码的简洁性、可读性和可维护性。 3. 实验数据要求准确,计算结果要仔细分析,结果要清晰明了地展示。 4. 实验报告要求格式规范,内容全面、准确、详细,表述清晰,思路流畅,使用正确的数学符号和术语。 结论: 数值计算方法是一种重要的数学工具,在很多领域有广泛应用。本实

验通过编写程序,实现了基本数值计算方法、常微分方程数值解法、常微分方程组数值解法、线性方程组数值解法、插值与拟合等方法,通过实例计算,分析了计算结果,总结了数值计算方法的优缺点及应用范围。此次实验提高了我们的数学计算和编程能力,对我们今后的学习和工作有很大帮助。

西北农林科技大学数值分析实验3

最小二乘法及程序设计算法 专业班级:信计121班 姓名:金 辉 学号:2012014280 一、实验目的 1、熟悉MA TLAB 编程; 2、学习最小二乘法及程序设计算法; 3、编写尽可能通用的程序并撰写程序使用说明,使用所编写的程序对实验问题进行求解并提交实验报告。 二、实验题目 1、对于给函数2 2511 )(x x f += 在区间[]1,1-上取10.2(0,1,...,10)i x i i =-+=,试求3次曲线拟合, 试画出拟合曲线并打印出方程,与第2章计算实习题2的结果比较。 试求及相应的三种拟合曲线。 三、实验原理与理论基础 用最小二乘法求拟合曲线时,22 δ 都考虑为加权平均和 []2 220 ()()()m i i i i x S x f x δ ω==-∑ (4.3) 这里()0x ω≥是[],a b 上的权函数,它表示不同点(),()i i x f x 处的数据比重不同。用最小二乘法求拟合曲线的问题,就是在形如0 ()()()n i i i S x a x n m ϕ== <∑ (4.2)式中的()S x 中求一函数* ()y S x =,使(4.3) 式取得最小。它可转化为求多元函数 2 0100(,,...,)()()()m n n i j j i i i j I a a a x a x f x ωϕ==⎡⎤ =-⎢⎥⎣⎦ ∑∑ (4.4) 的极小点() *** 01,,...,n a a a 的问题。由求多元函数极值的必要条件,有 002()()()()0,0,1,...,.m n i j j i i k i i j k I x a x f x x k n a ωϕϕ==⎡⎤∂=-==⎢⎥∂⎣⎦ ∑∑ 若记 0 (,)()()()m j k i j i k i i x x x ϕϕωϕϕ== ∑ (4.5) (,)()()(),0,1,...,m k i i k i k i f x f x x d k n ϕωϕ==≡=∑

西北农林科技大学数值分析数值法实验报告

数值法实验报告 专业__信息与计算科学121 __金辉 __2012014280 1实验目的 本次实验的目的是熟练《数值分析》第二章"插值法"的相关内容,掌握三种插值方法:牛顿多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的优劣。 本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并在MATLAB 软件中去实现。 2实验题目 实验一: 试用44插值。用图给出{〔x i ,y i ,x i =0.2+0.08i,i=0,1, 11, 10},P 4〔x 及S 〔x 。 实验二: 在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数2 1 ()125f x x = +作多项式插值及三次样条插值,对每个n 值,分别画出插值函数即()f x 的图形。 实验三: 可以得到平方根函数的近似,在区间[0,64]上作图。 〔1用这9各点作8次多项式插值L 8. 〔2用三次样条〔自然边界条件程序求S 〔x 。从结果看在[0,64]上,那个插值更精确;在区间[0,1]上,两种哪个更精确? 3实验原理与理论基础 《数值分析》第二章"插值法"的相关内容,包括:牛顿多项式插值,三次样条插值,拉格朗日 4实验内容 实验一: 试用44插值。用图给出{〔x i ,y i ,x i =0.2+0.08i,i=0,1, 11, 10},P 4〔x 及S 〔x 。

<1>首先我们先求牛顿插值多项式,此处要用4次牛顿插值多项式处理数据。已知n次牛顿插值多项式如下: P n =f+f[x ,x 1 ]+ f[x ,x 1 ,x 2 ] +···+ f[x 0,x 1 , (x) n ] ··· 我们要知道牛顿插值多项式的系数,即均差表中得部分均差。 在MATLAB的Editor中输入程序代码,计算牛顿插值中多项式系数的程序如下: function varargout=newtonliu clear,clc x=[0.2 0.4 0.6 0.8 1.0]; fx=[0.98 0.92 0.81 0.64 0.38]; newtonchzh; function newtonchzh %由此函数可得差分表 n=length; fprintf<'*****************差分表 *****************************\n'>; FF=ones; FF<:,1>=fx'; for i=2:n for j=i:n FF=-FF>/-x>; end end for i=1:n fprintf<'%4.2f',x>; for j=1:i fprintf<'%10.5f',FF>; end fprintf<'\n'>; end 由

数值分析的实验报告

数值分析实验报告 〔第二章〕 实验题目: 分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程 的根,观察不同初始值下的收敛性,并给出结论。 问题分析: 题目有以下几点要求: 1.不同的迭代法计算根,并比拟收敛性。 2.选定不同的初始值,比拟收敛性。 实验原理: 各个迭代法简述 二分法:取有根区间的重点,确定新的有根区间的区间长度仅为区间长度的一版。对压缩了的有根区间重复以上过程,又得到新的有根区间,其区间长度为的一半,如此反复,……,可得一系列有 根区间,区间收敛到一个点即为根。 牛顿迭代法:不动点迭代法的一种特例,具有局部二次收敛的特性。迭代格式为 割线法:是牛顿法的改良,具有超线性收敛的特性,收敛阶为1.618. 迭代格式为 史蒂芬森迭代法:采用不动点迭代进展预估校正。至少是平方收敛的。迭代格式为

这里可采用牛顿迭代法的迭代函数。实验内容: 1.写出该问题的函数 代码如下: function py= f(x) syms k; y=(k^2+1)*(k-1)^5; yy=diff(y,k); py(1)=subs(y,k,x); py(2)=subs(yy,k,x); end 2.分别写出各个迭代法的迭代函数代码如下: 二分法: function y=dichotomie(a,b,e) i=2; m(1)=a; while abs(a-b)>e t=(a+b)/2; s1=f(a); s2=f(b); s3=f(t); if s1(1)*s3(1)<=0 b=t; else a=t; end m(i)=t; i=i+1; end y=[t,i+1,m]; end 牛顿迭代法: function y=NewtonIterative(x,e) i=2; en=2*e; m(1)=x; while abs(en)>=e s=f(x); t=x-s(1)/s(2); en=t-x; x=t; m(i)=t; i=i+1; end y=[x,i+1,m]; end 牛顿割线法:

数值分析实验报告

实验五解线性方程组的直接方法 实验5.1 (主元的选取与算法的稳定性) 问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。 但由于计算机的 数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为 数值算法的稳定性呢? Gauss 消去法从理论算法到数值算法,其关键是主元的选 择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。 实验内容:考虑线性方程组 n M n Ax=b, A 三 R ,b^R 编制一个能自动选取主元,又能手动选取主元的求解线性方程组的 消去过程 实验要求: 取n=10计算矩阵的条件数。让程序自动选取主元,结果如何? (2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或 按模尽可能小 的元素作为主元,观察并记录计算结果。若每步消去过程总选取按 模最大的元素作为主元,结果又如何?分析实验的结果。 (3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不 同的问题及消 去过程中选择不同的主元时计算结果的差异, 说明主元素的选取在 消去过程中的作用。 (4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上 述实验,观察 记录并分析实验结果。 思考题一:(Vaderm on de 矩阵)设 其中,X k =1 • 0.1k,k =0,1,…,n , (1) 对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化? (2) 对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b Gauss 6 1 8 6 1 (1)取矩阵A =| 、匕' 8 6 I 8 〕「7] 15 ,b =: 1 15 则方程有解 * T x =(1,1,…,1)。 1 X 。 1 X 1 A = 1 x 2 2 X o 2 X 1 X 2 2 1 X n X n X 0 n X 1 n X 2 n X n i =0 n S X ; i =0 n 迟x 2 n