搜档网
当前位置:搜档网 › 数值计算方法实验报告

数值计算方法实验报告

数值计算方法实验报告
数值计算方法实验报告

重庆交通大学学生实验报告

实验课程名称数值计算方法I

开课实验室数学实验室

学院理学院年级11专业班信息与计算科学学生姓名李伟凯学号631122020203

开课时间2013 至2014 学年第 1 学期

实验五 解线性方程组的直接方法

实验5.1 (主元的选取与算法的稳定性)

问题提出:Gauss 消去法是我们在线性代数中已经熟悉的。但由于计算机的数值运算是在一个有限的浮点数集合上进行的,如何才能确保Gauss 消去法作为数值算法的稳定性呢?Gauss 消去法从理论算法到数值算法,其关键是主元的选择。主元的选择从数学理论上看起来平凡,它却是数值分析中十分典型的问题。

实验内容:考虑线性方程组

n n n R b R A b Ax ∈∈=?,,

编制一个能自动选取主元,又能手动选取主元的求解线性方程组的Gauss 消去过程。

实验要求:

(1)取矩阵??

?

??

???????????=????????????????=1415157,6816816816 b A ,则方程有解T x )1,,1,1(* =。

取n=10计算矩阵的条件数。让程序自动选取主元,结果如何?

(2)现选择程序中手动选取主元的功能。每步消去过程总选取按模最小或按模尽可能小的元素作为主元,观察并记录计算结果。若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。

(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。

(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。重复上述实验,观察记录并分析实验结果。

实验5.2(线性代数方程组的性态与条件数的估计) 问题提出:理论上,线性代数方程组b Ax =的摄动满足

???

?

???+??-≤?-b b A A A

A A c o n d x x

11)( 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算1-A 通常要比求解方程b Ax =还困难。

实验内容:MATLAB 中提供有函数“condest ”可以用来估计矩阵的条件数,

它给出的是按1-范数的条件数。首先构造非奇异矩阵A 和右端,使得方程是可以精确求解的。再人为地引进系数矩阵和右端的摄动b A ??和,使得b A ??和充

分小。

实验要求:

(1)假设方程Ax=b 的解为x ,求解方程b b x

A A ?+=?+?)(,以1-范数,给出

x

x x x

x -=

??的计算结果。

(2)选择一系列维数递增的矩阵(可以是随机生成的),比较函数“condest ”

所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“eig ”很容易给出cond 2(A)的数值。将它与函数“cond(A,2)”所得到的结果进行比较。

(3)利用“condest ”给出矩阵A 条件数的估计,针对(1)中的结果给出

x

x ?的理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。注意,如果给出了cond(A)和A 的估计,马上就可以给出1-A 的估计。 (4)估计著名的Hilbert 矩阵的条件数。

n j i j i h h H j i n n j i ,,2,1,,

1

1

,

)(,, =-+=

=?

思考题一:(Vadermonde 矩阵)设

??

?????????

?

????????????=???

????????????

?=∑∑∑∑====n i i n n i i n

i i n i i n n n n

n n n

x x x x b x x x x x x x x x x x x A 0020

100222221211020011

1

1

,,

其中,n k k x k ,,1,0,1.01 =+=,

(1)对n=2,5,8,计算A 的条件数;随n 增大,矩阵性态如何变化?

(2)对n=5,解方程组Ax=b ;设A 的最后一个元素有扰动10-4,再求解Ax=b (3)计算(2)扰动相对误差与解的相对偏差,分析它们与条件数的关系。 (4)你能由此解释为什么不用插值函数存在定理直接求插值函数而要用拉格朗日或牛顿插值法的原因吗?

function x=gauss(n,r)

n=input('请输入矩阵A的阶数:n=')

A=diag(6*ones(1,n))+diag(ones(1,n-1),1)+diag(8*ones(1,n-1),-1) b=A*ones(n,1)

p=input('条件数对应的范数是p-范数:p=')

pp=cond(A,p)

pause

[m,n]=size(A);

nb=n+1;Ab=[A b]

r=input('请输入是否为手动,手动输入1,自动输入0:r=')

for i=1:n-1

if r==0

[pivot,p]=max(abs(Ab(i:n,i)));

ip=p+i-1;

if ip~=i

Ab([i ip],:)=Ab([ip i],:);disp(Ab); pause

end

end

if r==1

i=i

ip=input('输入i列所选元素所处的行数:ip=');

Ab([i ip],:)=Ab([ip i],:);disp(Ab); pause

end

pivot=Ab(i,i);

for k=i+1:n

Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb);

end

disp(Ab); pause

end

x=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n);

for i=n-1:-1:1

x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);

end

(1)⑴取矩阵A的阶数:n=10,自动选取主元:

>> format long

>> gauss

请输入矩阵A的阶数:n=10

n = 10

条件数对应的范数是p-范数:p=1

p = 1

pp = 2.557500000000000e+003

请输入是否为手动,手动输入1,自动输入0:r=0

r = 0

⑵取矩阵A的阶数:n=10,手动选取主元:

①选取绝对值最大的元素为主元:

>> gauss

请输入矩阵A的阶数:n=10

n = 10

条件数对应的范数是p-范数:p=2

p = 2

pp= 1.727556024913903e+003

请输入是否为手动,手动输入1,自动输入0:r=1

r = 1

ans= 1 1 1 1 1 1 1 1 1 1 ②选取绝对值最小的元素为主元:

>> gauss

请输入矩阵A的阶数:n=10

n = 10

条件数对应的范数是p-范数:p=2

p = 2

pp = 1.727556024913903e+003

请输入是否为手动,手动输入1,自动输入0:r=1

r = 1

ans =

1.00000000000000 1.00000000000000 1.00000000000000

1.00000000000000 1.00000000000000 1.00000000000000

0.99999999999999 1.00000000000001 0.99999999999998

1.00000000000003

(2)取矩阵A的阶数:n=10,手动选取主元:

①选取绝对值最大的元素为主元:

>> gauss

请输入矩阵A的阶数:n=10

n = 10

条件数对应的范数是p-范数:p=2

p = 2

pp= 1.727556024913903e+003

请输入是否为手动,手动输入1,自动输入0:r=1

r = 1

ans= 1 1 1 1 1 1 1 1 1 1 ②选取绝对值最小的元素为主元:

>> gauss

请输入矩阵A的阶数:n=10

n = 10

条件数对应的范数是p-范数:p=2

p = 2

pp = 1.727556024913903e+003

请输入是否为手动,手动输入1,自动输入0:r=1

r = 1

ans =

1.00000000000000 1.00000000000000 1.00000000000000

1.00000000000000 1.00000000000000 1.00000000000000

0.99999999999999 1.00000000000001 0.99999999999998

1.00000000000003

(3)取矩阵A的阶数:n=20,手动选取主元:

①选取绝对值最大的元素为主元:

>> gauss

请输入矩阵A的阶数:n=20

条件数对应的范数是p-范数:p=1

p = 1

pp = 2.621437500000000e+006

ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ②选取绝对值最小的元素为主元:

>> gauss

请输入矩阵A的阶数:n=20.

n = 20

条件数对应的范数是p-范数:p=2

p = 2

pp = 1.789670565881683e+006

请输入是否为手动,手动输入1,自动输入0:r=1

r = 1

ans =

1.00000000000000 1.00000000000000 1.00000000000000

1.00000000000000 1.00000000000000 1.00000000000000

1.00000000000001 0.99999999999997 1.00000000000006

0.99999999999989 1.00000000000023 0.99999999999955

1.00000000000090 0.99999999999821 1.00000000000352

0.99999999999318 1.00000000001273 0.99999999997817

1.00000000002910

(4)该题目的M程序如下所示

function x=gauss(n,r)

n=input('请输入矩阵A的阶数:n=')

A= hilb(n)

b=A*ones(n,1)

p=input('条件数对应的范数是p-范数:p=')

pp=cond(A,p)

pause

[m,n]=size(A);

nb=n+1;Ab=[A b]

r=input('请输入是否为手动,手动输入1,自动输入0:r=')

for i=1:n-1

if r==0

[pivot,p]=max(abs(Ab(i:n,i)));

ip=p+i-1;

if ip~=i

Ab([i ip],:)=Ab([ip i],:);disp(Ab); pause

end

end

if r==1

i=i

ip=input('输入i列所选元素所处的行数:ip=');

Ab([i ip],:)=Ab([ip i],:);disp(Ab); pause

end

pivot=Ab(i,i);

for k=i+1:n

Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb);

end

disp(Ab); pause

end

x=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n);

for i=n-1:-1:1

x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);

end

○1

>>gauss

请输入矩阵A的阶数:n=7

n =

7

A =

6 1 0 0 0 0 0

8 6 1 0 0 0 0

0 8 6 1 0 0 0

0 0 8 6 1 0 0

0 0 0 8 6 1 0

0 0 0 0 8 6 1

0 0 0 0 0 8 6

b =

7

15

15

15

15

15

14

pp =

3.174999999999999e+002

Ab =

6 1 0 0 0 0 0 7

8 6 1 0 0 0 0 15

0 8 6 1 0 0 0 15

0 0 8 6 1 0 0 15

0 0 0 8 6 1 0 15

0 0 0 0 8 6 1 15

0 0 0 0 0 8 6 14

请输入是否为手动,手动输入1,自动输入0:r=1 r =

1

条件数对应的范数是p-范数:p=1 p =

1 i =

1 ans =

0.99999999999869 1.00000000004337 0.99999999964299 1.00000000121143 0.99999999803038 1.00000000152825 0.99999999954491

显然的是,该问题在主元选取与算出结果有着很大的关系,取绝对值大的元素作为主元比取绝对值小的元素作为主元时产生的结果比较准确,即选取绝对值小的主元时结果产生了较大的误差,条件数越大产生的误差就越大

实验体会:

运用高斯消去法求解线性方程组问题的时候,主元的选取和相应的消去法的选取决定了该算法的稳定性,选取绝对值大的元素比选取绝对值比较小的元素作为主元时对结果产生的误差影响比较小。并且增加条件数反而对结果的误差产生更大的影响。并且在运算中要尽量避免出现运用小数作为除数,使数量级加大,令大数吃掉小数的情况发生。

实验5.2(线性代数方程组的性态与条件数的估计) 问题提出:理论上,线性代数方程组b Ax =的摄动满足

???

?

???+??-≤?-b b A A A

A A c o n d x x

11)( 矩阵的条件数确实是对矩阵病态性的刻画,但在实际应用中直接计算它显然不现实,因为计算1-A 通常要比求解方程b Ax =还困难。

实验内容:MATLAB 中提供有函数“condest ”可以用来估计矩阵的条件数,

它给出的是按1-范数的条件数。首先构造非奇异矩阵A 和右端,使得方程是可以精确求解的。再人为地引进系数矩阵和右端的摄动b A ??和,使得b A ??和充

分小。

实验要求:

(1)假设方程Ax=b 的解为x ,求解方程b b x

A A ?+=?+?)(,以1-范数,给出

x

x x x

x -=

??的计算结果。

(2)选择一系列维数递增的矩阵(可以是随机生成的),比较函数“condest ”

所需机器时间的差别.考虑若干逆是已知的矩阵,借助函数“eig ”很容易给出cond 2(A)的数值。将它与函数“cond(A,2)”所得到的结果进行比较。

(3)利用“condest ”给出矩阵A 条件数的估计,针对(1)中的结果给出

x

x ?的理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。注意,如果给出了cond(A)和A 的估计,马上就可以给出1-A 的估计。 (4)估计著名的Hilbert 矩阵的条件数。

n j i j i h h H j i n n j i ,,2,1,,

1

1

,

)(,, =-+=

=?

程序代码:

保存M 文件名为:fanshu.m

n=input('please input n:n=') a=fix(100*rand(n))+1 x=ones(n,1) b=a*x data=rand(n)*0.00001 datb=rand(n,1)*0.00001 A=a+data B=b+datb

xx=geshow(A,B) x0=norm(xx-x,1)/norm(x,1)

保存M 文件名为:geshow.m function x=geshow(A,B) [m,n]=size(A); nb=n+1;AB=[A B]; for i=1:n-1

pivot=AB(i,i); for k=i+1:n

AB(k,i:nb)=AB(k,i:nb)-(AB(k,i)/pivot)*AB(i,i:nb); end

end

x=zeros(n,1);

x(n)=AB(n,nb)/AB(n,n);

for i=n-1:-1:1

x(i)=(AB(i,nb)-AB(i,i+1:n)*x(i+1:n))/AB(i,i);

end

保存M文件名为:cond2.m

function cond2(A)

B=A'*A;

[V1,D1]=eig(B);

[V2,D2]=eig(B^(-1));

cond2A=sqrt(max(max(D1)))*sqrt(max(max(D2)))

end

保存M文件为:shiyan52.m

format long

for n=10:10:100

n=n

A=fix(100*randn(n));

condestA=condest(A)

cond2(A)

condA2=cond(A,2)

pause

end

保存M文件为:sy5_2.m

n=input('please input n:n=') %输入矩阵的阶数

a=fix(100*rand(n))+1; %随机生成一个矩阵a

x=ones(n,1); %假设知道方程组的解全为1

b=a*x;

data=rand(n)*0.00001;

datb=rand(n,1)*0.00001;

A=a+data;

B=b+datb;

xx=geshow(A,B);

x0=norm(xx-x,1)/norm(x,1)

x00=cond(A)/(1-norm(inv(A))*norm(xx-x))*(norm((xx-x))/(norm(A))+norm(datb)/n orm(B))

datx=abs(x0-x00)

(4)

format long

for n=4:11

n=n

Hi=hilb(n);

cond1Hi=cond(Hi,1)

cond2Hi=cond(Hi,2)

condinfHi=cond(Hi,inf)

pause

end

实验结果及其分析:

(1)

>>fanshu

please input n:n=6

n=

6

a =

82 28 96 80 68 71

91 55 49 96 76 4

13 96 81 66 75 28

92 97 15 4 40 5

64 16 43 85 66 10

10 98 92 94 18 83 x =

1

1

1

1

1

1

b =

425

371

359

253

284

395

data =

1.0e-005 *

Columns 1 through 4

0.694828622975817 0.765516788149002 0.709364830858073 0.118997681558377

0.317099480060861 0.795199901137063 0.754686681982361 0.498364051982143

0.950222048838355 0.186872604554379 0.276025076998578 0.959743958516081

0.034446080502909 0.489764395788231 0.679702676853675 0.340385726666133

0.438744359656398 0.445586********* 0.655098003973841 0.585267750979777

0.381558457093009 0.646313********* 0.162611735194631 0.223811939491137

Columns 5 through 6

0.751267059305653 0.547215529963803

0.255095115459269 0.138624442828679

0.505957051665142 0.149294005559058

0.699076722656686 0.257508254123737

0.890903252535799 0.840717255983663

0.959291425205445 0.254282178971531

datb =

1.0e-005 *

0.814284826068817

0.243524968724989

0.929263623187228

0.349983765984809

0.196595250431208

0.251083857976031

A =

Columns 1 through 4

82.000006948286227 28.000007655167881 96.000007093648307 80.000001189976814

91.000003170994802 55.000007951999009 49.000007546866819 96.000004983640522

13.000009502220488 96.000001868726045 81.000002760250766 66.000009597439586

92.000000344460801 97.000004897643961 15.000006797026769 4.000003403857266

64.000004387443596 16.000004455862008 43.000006550980039 85.000005852677504

10.000003815584570 98.000006463130106 92.000001626117353 94.000002238119393

Columns 5 through 6

68.000007512670592 71.000005472155294

76.000002550951152 4.000001386244429

75.000005059570512 28.000001492940054

40.000006990767226 5.000002575082541

66.000008909032530 10.000008407172560

18.000009592914253 83.000002542821790

B =

1.0e+002 *

4.250000081428483

3.710000024352497

3.590000092926362

2.530000034998376

2.840000019659525

3.950000025108386

xx =

1.000000428381561 0.999999831084732 1.000002591353244 0.999999600566705 0.999998226539937 0.999997826103164 x0 =

1.255906711054392e-006

x

x x x x -=

??的计算结果为:1.255906711054392e-006

(2)

(3)

sy5_2

please input n:n=8

n =

8

x0 =

3.064664488849900e-007 x00 =

5.064016823313296e-007 datx =

1.999352334463396e-007

给出对x

x x x

x -=

??的估计是5.064016823313296e-007

x

x x x

x -=

??的理论结果是:3.064664488849900e-007

结果相差:1.999352334463396e-007 (4)

讨论:

线性代数方程组的性态与条件数有着很重要的关系,既矩阵的条件数是刻画矩阵性质的一个重要的依据,条件数越大,矩阵“病态”性越严重,在解线性代数方程组的过程中较容易产生比较大的误差,则在实际问题的操作过程中,我们必须要减少对条件数来求解,把条件数较大的矩阵化成条件数较小的矩阵来进行求解。

实验体会:

在本次实验中,使我们知道了矩阵条件数对线性代数方程组求解的影响,条件数越大,对最后解的影响的越大,hilbert 矩阵是一个很”病态”的矩阵,他的条

件数随着阶数的增加而增大,每增加一阶,条件数就增大一个数量级,在求解的过程中要尽量避免hilbert矩阵

实验六 解线性方程组的迭代法

实验6.1(病态的线性方程组的求解)

问题提出:理论的分析表明,求解病态的线性方程组是困难的。实际情况是否如此,会出现怎样的现象呢?

实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,

n j i j i h h H j i n n j i ,,2,1,,

1

1

,

)(,, =-+=

=?

这是一个著名的病态问题。通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。

实验要求:

(1)选择问题的维数为6,分别用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?

(2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?

(3)讨论病态问题求解的算法

程序代码:

Gauss 消去法程序:

function x=gauss(n,r)

n=input('请输入矩阵的阶数:n=')

A=hilb(n);%构造Hilbert 矩阵

p=input('条件数对应的范数是p-范数:p=') pp=cond(A,p) pause

[m,n]=size(A); nb=n+1;Ab=[A b]

r=input('请输入是否为手动,手动输入1,自动输入0:r=') for i=1:n-1 if r==0

[pivot,p]=max(abs(Ab(i:n,i))); ip=p+i-1; if ip~=i

Ab([i ip],:)=Ab([ip i],:);disp(Ab); pause end end

if r==1

i=i

ip=input('输入i列所选元素所处的行数:ip=');

Ab([i ip],:)=Ab([ip i],:);disp(Ab); pause end

pivot=Ab(i,i);

for k=i+1:n

Ab(k,i:nb)=Ab(k,i:nb)-(Ab(k,i)/pivot)*Ab(i,i:nb);

end

disp(Ab); pause

end

x=zeros(n,1);x(n)=Ab(n,nb)/Ab(n,n);

for i=n-1:-1:1

x(i)=(Ab(i,nb)-Ab(i,i+1:n)*x(i+1:n))/Ab(i,i);

end

J迭代法程序:

n=input('系数矩阵的阶数:');

A=hilb(n);%构造Hilbert矩阵

for i=1:n;

a0(i)=1; %给定解

x(i)=0;

end;

b=A*a0'; %由给定的解算出相应的b

%进行迭代

for i=1:100;

y=x;

for j=1:n;

x(j)=b(j)/A(j,j);

for k=1:j-1;

x(j)=x(j)-A(j,k)*y(k)/A(j,j);

end;

for k=j+1:n;

x(j)=x(j)-A(j,k)*y(k)/A(j,j);

end;

end;

end;x

GS迭代程序:

n=input('系数矩阵的阶数:');

%对题中给定的矩阵进行消元

A2=hilb(n);

for i=1:n;

a02(i)=1;

数值计算方法课程报告

课程报告 课程名称______《数值计算》 __ 学生学院_____机电工程学院___ 专业班级_____微电子(1)班____ 学号________ 学生姓名_______________ 指导教师_____ ________ XXXX年XX月XX日

姓 名: 线 学 号 : 订 装专 业:学院: 广东工业大学考试试卷( A ) 课程名称: 数值计算试卷满分100 分考试时间: 2015 年 12 月 26 日(第 17 周星期六) 题号一二三四五六七八九十总分 评卷得分 评卷签名 复核得分 复核签名 “数值计算”考试要求 “数值计算”考试以开卷形式进行。在“数值计算”课程考试日(2015 年12 月 19 日,第 12 周星期五)考试时间,在考试教室领取试题,在 2015 年12 月 26 日(第 17 周星期六)进行答辩。不参加答辩者将取消考试成绩。 “数值计算”考试结果要求独立在计算机上完成,可使用Matlab或 C 程序编程实现。考试结果将以报告书形式提交,内容包括对问题描述、计算程序以及算例、计算结果、分析组成。计算程序要求具有通用性,能够处理异常情况,可以输入问题、算法参数、算例及初始值,在计算过程中显示当前计算状态、计算完成后显示计算结果。上述内容将作为试卷成绩的主要评定依据。特别提醒,不得使用教师在讲课和实验时的范例作为考试结果。报告书具体格式参考毕业设计手册。 以考生学号命名的文件夹存放程序及报告书电子版,以班级为单位刻录在一张光盘中,与打印版报告书一起由班长和学习委员一起上交任课教师。 数值计算课程总成绩将由试卷成绩(70%)、平时成绩(30%)组成。

数值计算实验课题目

数值实验课试题 本次数值实验课结课作业,请按题目要求内容写一篇文章。按题目要求 人数自由组合,每组所选题目不得相同(有特别注明的题目除外)。试题如下: 1)解线性方程组的Gauss 消去法和列主元Gauss 消去法(2人)/*张思珍,巩艳华*/ 用C 语言将不选主元和列主元Gauss 消去法编写成通用的子程序,然后用你编写的程序求解下列84阶的方程组 ???? ?????? ? ??=??????????? ????????????? ? ?1415151515768 168 168 168 1681684 8382321 x x x x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编 3.《数值分析简明教程》,王能超编 2)解线性方程组的平方根法(4人)/*朱春成、黄锐奇、张重威、章杰*/ 用C 语言将平方根法和改进的平方根法编写成通用的子程序,然后用你编写的程序求解对称正定方程组b Ax =,其中 (1)b 随机的选取,系数矩阵为100阶矩阵 ?????? ???? ? ? ?101 1101 1101 1101 1101110 ; (2)系数矩阵为40阶的Hilbert 矩阵,即系数矩阵A 的第i 行第j 列元素为 1 1-+= j i a ij ,向量b 的第i 个分量为∑=-+ = n j i j i b 1 1 1. 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编

3.《数值分析简明教程》,王能超编 3)三对角线方程组的追赶法(3人)/*黄佳礼、唐伟、韦锡倍*/ 用C 语言将三对角线方程组的追赶法法编写成通用的子程序,然后用你编写的程序求解如下84阶三对角线方程组 ???? ?????? ? ??=??????????? ????????????? ? ?1415151515768 168 168 168 16816 84 8382321 x x x x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值分析简明教程》,王能超编 4)线性方程组的Jacobi 迭代法(3人)/*周桂宇、杨飞、李文军*/ 用C 语言将Jacobi 迭代法编写成独立的子程序,并用此求解下列方程组, 精确到小数点后5位 ???? ? ??=????? ??????? ? ?-149012 2111221 3 2 1 x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编 3.《数值分析简明教程》,王能超编 5)线性方程组的Gauss-Seidel 迭代法(3人)/*张玉超、范守平、周红春*/ 用C 语言将Gauss-Seidel 迭代法编写成独立的子程序,并用此求解下列方程组,精确到小数点后5位 ???? ? ??=????? ??????? ? ?--39721 1111112 3 2 1 x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编 3.《数值分析简明教程》,王能超编 6)解线性方程组的最速下降法法(2人)/*赵育辉、阿热孜古丽*/ 用C 语言将最速下降法编写成通用的子程序,然后用你编写的程序求解对称

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

曲线拟合的数值计算方法实验

曲线拟合的数值计算方法实验 【摘要】实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。常用的曲线拟合有最小二乘法拟合、幂函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束。 关键词曲线拟合、最小二乘法拟合、幂函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束 一、实验目的 1.掌握曲线拟合方式及其常用函数指数函数、幂函数、对数函数的拟合。 2.掌握最小二乘法、线性插值、三次样条插值、端点约束等。 3.掌握实现曲线拟合的编程技巧。 二、实验原理 1.曲线拟合 曲线拟合是平面上离散点组所表示的坐标之间的函数关系的一种数据处理方法。用解析表达式逼近离散数据的一种方法。在科学实验或社会活动中,通过 实验或观测得到量x与y的一组数据对(X i ,Y i )(i=1,2,...m),其中各X i 是彼此不同的。人们希望用一类与数据的背景材料规律相适应的解析表达式,y=f(x,c)来反映量x与y之间的依赖关系,即在一定意义下“最佳”地逼近或 拟合已知数据。f(x,c)常称作拟合模型,式中c=(c 1,c 2 ,…c n )是一些待定参 数。当c在f中线性出现时,称为线性模型,否则称为非线性模型。有许多衡量拟合优度的标准,最常用的一种做法是选择参数c使得拟合模型与实际观测值在

数值分析实验报告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 ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个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 = ))20:1((ve poly roots + 上述简单的Matlab 程序便得到()的全部根,程序中的“ess ”即是()中的ε。 实验要求: (1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。 如果扰动项的系数ε很小,我们自然感觉()和()的解应当相差很小。计算中你有什么出乎意料的发现表明有些解关于如此的扰动敏感性如何 (2)将方程()中的扰动项改成18x ε或其它形式,实验中又有怎样的现象 出现 (3)(选作部分)请从理论上分析产生这一问题的根源。注意我们可以将 方程()写成展开的形式, ) 3.1(0 ),(1920=+-= x x x p αα 同时将方程的解x 看成是系数α的函数,考察方程的某个解关于α的扰动是否敏感,与研究它关于α的导数的大小有何关系为什么你发现了什么现象,哪些根关于α的变化更敏感 思考题一:(上述实验的改进) 在上述实验中我们会发现用roots 函数求解多项式方程的精度不高,为此你可以考虑用符号函数solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。

数值计算方法学习心得

数值计算方法学习心得 ------一个代码的方法是很重要,一个算法的思想也很重要,但 在我看来,更重要的是解决问题的方法,就像爱因斯坦说的内容比 思维本身更重要。 我上去讲的那次其实做了挺充分的准备,程序的运行,pdf文档,算法公式的推导,程序伪代码,不过有一点缺陷的地方,很多细节 没有讲的很清楚吧,下来之后也是更清楚了这个问题。 然后一学期下来,总的来说,看其他同学的分享,我也学习到 许多东西,并非只是代码的方法,更多的是章胜同学的口才,攀忠 的排版,小冯的深入挖掘…都是对我而言比算法更加值得珍惜的东西,又骄傲地回想一下,曾同为一个项目组的我们也更加感到做项 目对自己发展的巨大帮助了。 同时从这些次的实验中我发现以前学到的很多知识都非常有用。 比如说,以前做项目的时候,项目导师一直要求对于要上传的 文件尽量用pdf格式,不管是ppt还是文档,这便算是对产权的一种 保护。 再比如代码分享,最基础的要求便是——其他人拿到你的代码 也能运行出来,其次是代码分享的规范性,像我们可以用轻量级Ubuntu Pastebin,以前做过一小段时间acm,集训队里对于代码的分享都是推荐用这个,像数值计算实验我觉得用这个也差不多了,其 次项目级代码还是推荐github(被微软收购了),它的又是可能更 多在于个人代码平台的搭建,当然像readme文档及必要的一些数据 集放在上面都更方便一些。

然后在实验中,发现debug能力的重要性,对于代码错误点的 正确分析,以及一些与他人交流的“正规”途径,讨论算法可能出 错的地方以及要注意的细节等,比如acm比赛都是以三人为一小组,讨论过后,讲了一遍会发现自己对算法理解更加深刻。 然后学习算法,做项目做算法一般的正常流程是看论文,尽量 看英文文献,一般就是第一手资料,然后根据论文对算法的描述, 就是如同课上的流程一样,对算法进一步理解,然后进行复现,最 后就是尝试自己改进。比如知网查询牛顿法相关论文,会找到大量 可以参考的文献。 最后的最后,想说一下,计算机专业的同学看这个数值分析, 不一定行云流水,但肯定不至于看不懂写不出来,所以我们还是要 提高自己的核心竞争力,就是利用我们的优势,对于这种算法方面 的编程,至少比他们用的更加熟练,至少面对一个问题,我们能思 考出对应问题的最佳算法是哪一个更合适解决问题。 附记: 对课程的一些小建议: 1. debug的能力不容忽视,比如给一个关于代码实现已知错误的代码给同学们,让同学们自己思考一下,然后分享各自的debug方法,一步一步的去修改代码,最后集全班的力量完成代码的debug,这往往更能提升同学们的代码能力。 2. 课堂上的效率其实是有点低的,可能会给学生带来一些负反馈,降低学习热情。 3. 总的来说还是从这门课程中学到许多东西。 数值分析学习心得体会

数值计算实验报告

(此文档为word格式,下载后您可任意编辑修改!) 2012级6班###(学号)计算机数值方法 实验报告成绩册 姓名:宋元台 学号: 成绩:

数值计算方法与算法实验报告 学期: 2014 至 2015 第 1 学期 2014年 12月1日课程名称: 数值计算方法与算法专业:信息与计算科学班级 12级5班 实验编号: 1实验项目Neton插值多项式指导教师:孙峪怀 姓名:宋元台学号:实验成绩: 一、实验目的及要求 实验目的: 掌握Newton插值多项式的算法,理解Newton插值多项式构造过程中基函数的继承特点,掌握差商表的计算特点。 实验要求: 1. 给出Newton插值算法 2. 用C语言实现算法 二、实验内容 三、实验步骤(该部分不够填写.请填写附页)

1.算法分析: 下面用伪码描述Newton插值多项式的算法: Step1 输入插值节点数n,插值点序列{x(i),f(i)},i=1,2,……,n,要计算的插值点x. Step2 形成差商表 for i=0 to n for j=n to i f(j)=((f(j)-f(j-1)(x(j)-x(j-1-i)); Step3 置初始值temp=1,newton=f(0) Step4 for i=1 to n temp=(x-x(i-1))*temp*由temp(k)=(x-x(k-1))*temp(k-1)形成 (x-x(0).....(x-x(i-1)* Newton=newton+temp*f(i); Step5 输出f(x)的近似数值newton(x)=newton. 2.用C语言实现算法的程序代码 #includeMAX_N) { printf("the input n is larger than MAX_N,please redefine the MAX_N.\n"); return 1; } if(n<=0) { printf("please input a number between 1 and %d.\n",MAX_N); return 1; } printf("now input the (x_i,y_i)i=0,...%d\n",n); for(i=0;i<=n;i++) { printf("please input x(%d) y(%d)\n",i,i);

《数值计算方法》上机实验报告

《数值计算方法》上机实验报告华北电力大学 实验名称数值il?算方法》上机实验课程名称数值计算方法专业班级:电力实08学生姓名:李超然学号:200801001008 成绩: 指导教师:郝育黔老师实验日期:2010年04月华北电力大学实验报告数值计算方法上机实验报吿一. 各算法的算法原理及计算机程序框图1、牛顿法求解非线性方程 *对于非线性方程,若已知根的一个近似值,将在处展开成一阶 xxfx ()0, fx ()xkk 泰勒公式 "f 0 / 2 八八,fxfxfxxxxx 0 0 0 0 0 kkkk2! 忽略高次项,有 ,fxfxfxxx 0 ()()(),,, kkk 右端是直线方程,用这个直线方程来近似非线性方程。将非线性方程的 **根代入,即fx ()0, X ,* fxfxxx 0 0 0 0, ,, kkk fx 0 fx 0 0,

解出 fX 0 *k XX,, k' fx 0 k 水将右端取为,则是比更接近于的近似值,即xxxxk, Ik, Ik fx ()k 八XX, Ikk* fx()k 这就是牛顿迭代公式。 ,2,计算机程序框图:,见, ,3,输入变量、输出变量说明: X输入变量:迭代初值,迭代精度,迭代最大次数,\0 输出变量:当前迭代次数,当前迭代值xkl ,4,具体算例及求解结果: 2/16 华北电力大学实验报吿 开始 读入 l>k /fx()0?,0 fx 0 Oxx,,01* fx ()0 XX,,,?10 kk, ,1,kN, ?xx, 10 输出迭代输出X输出奇异标志1失败标志

,3,输入变量、输出变量说明: 结束 例:导出计算的牛顿迭代公式,并il ?算。(课本P39例2-16) 115cc (0), 求解结果: 10. 750000 10.723837 10. 723805 10. 723805 2、列主元素消去法求解线性方程组,1,算法原理: 高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘 -个 方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上 对上三角 3/16 华北电力大学实验报告方程组求解。 列选主元是当高斯消元到第步时,从列的以下(包括)的各元素中选出绝 aakkkkkk 对值最大的,然后通过行交换将其交换到的位置上。交换系数矩阵中的 两行(包括常ekk 数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结 ,2,计算机程序框图:,见下页, 输入变量:系数矩阵元素,常向量元素baiji 输出变量:解向量元素bbb,,12n

数值计算方法实验5

实验报告 学院(系)名称: 主程序部分列选主元部分

实验结果: 一.列主元消去法 输入各个数据,最终使用列选主元法,得到结果为:x1=x2=x3=1二.高斯-赛德尔迭代法 输入各个数据,输出每一步迭代数据,最终结果为:x1=0.285716,附录(源程序及运行结果) 一.列主元高斯消去法 #include #include void print(double a[3][3],int n,double b[3]){ printf("输出矩阵:\n"); for(int i=0;ifabs(d)){ d=a[i][k]; l=i; } i++; } printf("选出主元:%lf\n",d); if(d==0) printf("矩阵奇异!\n"); else if(l!=k){ for(int j=k;j

计算方法心得体会

计算方法学习心得 在研究生一年级的上半学期,我们安排了计算方法的课程,通过课堂授课、网上学习、学术报告以及课堂监督等方式的引导,我们对计算方法有了全新的认识。 我们知道,数学是一门重要的基础学科。离开了数学,科技便无法发展。而在数学这门学科中,数值计算方法有着其不可取代的重要地位。 在授课的过程中,首先利用前几讲课的时间对计算方法的基础进行补充,考虑到有部分专业的学生在本科时期没有接触过计算方法这门课程;计算方法主要研究实际问题,当今社会计算机高速的发展,为人们使用数值计算方法解决科学技术中的各种数学问题提供了有力的硬件条件。要将关于数值计算的实际问题借助于计算机来解决,那么实际的上机操作就显得十分重要。因此,老师在平时课堂授课的同时,也推广网上学习,通过课堂掌握知识、网上复习内容双重方式学习,更有利于我们掌握知识,另外对于我们上机操作也具有十分重要的指导意义。 通过网上看教学视频,一方面我们对课上学习的内用加深了印象,另一方面由于课堂上时间有限,对于某些知识,我们在听课时不是很清楚,似懂非懂,在网上学习的帮助下,我们可以在课后及时对这些知识进行进一步的消化,对于我们吸收知识也是一种很好的方式。此外,网上学习具有可重复性的优点,这是课堂上所不具有的特点,在课堂上不懂的知识,在网上可以反复学习,在网上学习中遇到

的问题也能够反馈到课堂。所以课堂授课与网上学习相辅相成,各有优点,弥补了各自的不足之处。 当然课程的学术报告也十分重要,学是一码事,应用却是另一码事,很多课程中,我们学会了,遇到问题却不会解决,所以课程学术报告此时起了关键作用。学术报告是基于每组学生各自的专业设置的,这样做一方面检验学生应用计算方法的能力,另一方面也是为了引导学生将计算方法与本专业联系起来,学会应用学过的知识对现象进行描述、建模以及采用编程的方法处理数据等。 本学期的计算方法课程相当充实,在老师课上精心的授课、学生课下利用网上资源认真复习、对课程学术报告的完成以及课堂监督下,同学们都受益匪浅,尤其是对于数据处理方法的学习、思维的形成都有极其重要的作用,对于后期的专业研究也有深远的影响。 本学期已经接近尾声,计算方法课程也已经结束,在此向老师表示敬意和感谢!

(完整版)数值计算方法上机实习题答案

1. 设?+=1 05dx x x I n n , (1) 由递推公式n I I n n 1 51+-=-,从0I 的几个近似值出发,计算20I ; 解:易得:0I =ln6-ln5=0.1823, 程序为: I=0.182; for n=1:20 I=(-5)*I+1/n; end I 输出结果为:20I = -3.0666e+010 (2) 粗糙估计20I ,用n I I n n 51 5111+- =--,计算0I ; 因为 0095.05 6 0079.01020 201 020 ≈<<≈??dx x I dx x 所以取0087.0)0095.00079.0(2 1 20=+= I 程序为:I=0.0087; for n=1:20 I=(-1/5)*I+1/(5*n); end I 0I = 0.0083 (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 首先分析两种递推式的误差;设第一递推式中开始时的误差为000I I E '-=,递推过程的舍入误差不计。并记n n n I I E '-=,则有01)5(5E E E n n n -==-=-Λ。因为=20E 20020)5(I E >>-,所此递推式不可靠。而在第二种递推式中n n E E E )5 1(5110-==-=Λ,误差在缩小, 所以此递推式是可靠的。出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制, 即算法是否数值稳定。 2. 求方程0210=-+x e x 的近似根,要求4 1105-+?<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; 程序:a=0;b=1.0; while abs(b-a)>5*1e-4 c=(b+a)/2;

数值分析课程报告

插值法和多项式拟合的研究 摘要 在科研和生产实践中,常常需要通过一组测量数据来寻找变量x与y的函数关系近似表达式。解决这类问题的方法有两种:一种是插值法,另一种是拟合法。插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。拟合法能够是从给定的一组实验数据出发,寻找函数的一个近似表达式,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合。本文主要介绍拉格朗日插值法、埃尔米特插值法、三次样条插值法以及基于最小二乘法的多项式拟合。 关键词:拉格朗日插值,埃尔米特插值,样条插值,多项式拟合

1方法的意义 在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。解决这类问题的方法有两种:一种是插值法,另一种是拟合法。插值法的原理是用一个简单函数逼近被计算函数,然后用该简单函数的函数值近似替代被计算函数的函数值。它要求给出函数的一个函数表,然后选定一种简单的函数形式,比如多项式、分段线性函数及三角多项式等,通过已知的函数表来确定一个简单的函数()x ?作为()f x 的近似,概括地说,就是用简单函数为离散数组建立连续模型。插值法在实际应用中非常广泛,但是它也有明显的缺陷,一是测量数据常常带有测试误差,而插值多项式又通过所有给出的点,这样就是插值多项式保留了这些误差;二是如果实际得到的数据过多,则必然得到次数较高的插值多项式,这样近似的效果并不理想。拟合法能够很好的解决这些问题,它从给定的一组实验数据出发,寻找函数的一个近似表达式y=()x ?,该近似表达式能反映数据的基本趋势而又不一定过全部的点,即曲线拟合的问题,函数的近似表达式y=()x ?称为拟合曲线。常用最小而二乘法来确定拟合曲线。 2插值法的介绍 2.1 插值法定义 设 f (x )为[a ,b ]上的函数,在互异点n x x x ,...,,10处的函数值分别为 )(),...,(),(10n x f x f x f ,构造一个简单函数 ?(x ) 作为函数 f (x ) 的近似表达式y = f (x ) ≈ ?(x ),使 )()(i i x f x =? , i =0, 1, 2, …,n (1.0) 则称?(x ) 为关于节点n x x x ,...,,10的插值函数;称n x x x ,...,,10 为插值节点;称 ))((i i x f x , i =1,2,… , n 为插值点;f (x ) 称为被插值函数。式(1.0)称为插值条 件。这类问题称为插值问题。插值的任务就是由已知的观测点,为物理量(未知量)建立一个简单的、连续的解析模型,以便能根据该模型推测该物理量在非观测点

(完整版)哈工大-数值分析上机实验报告

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式 产生逼近解x*的迭代数列{x k},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x); y=-x*x-sin(x); 写成如上形式即可,下面给出主程序。 二分法源程序: clear %%%给定求解区间 b=1.5; a=0;

%%%误差 R=1; k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end R=b-a;%求出误差 k=k+1; end x=c%给出解 Newton法及改进的Newton法源程序:clear %%%% 输入函数 f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

数值分析学习心得体会.doc

数值分析学习感想 一个学期的数值分析,在老师的带领下,让我对这门课程有了深刻的理解和感悟。这门 课程是一个十分重视算法和原理的学科,同时它能够将人的思维引入数学思考的模式,在处 理问题的时候,可以合理适当的提出方案和假设。他的内容贴近实际,像数值分析,数值微 分,求解线性方程组的解等,使数学理论更加有实际意义。 数值分析在给我们的知识上,有很大一部分都对我有很大的帮助,让我的生活和学习有 了更加方便以及科学的方法。像第一章就讲的误差,在现实生活中,也许没有太过于注意误 差,所以对误差的看法有些轻视,但在学习了这一章之后,在老师的讲解下,了解到这些误 差看似小,实则影响很大,更如后面所讲的余项,那些差别总是让人很容易就出错,也许在 别的地方没有什么,但是在数学领域,一个小的误差,就很容易有不好的后果,而学习了数 值分析的内容,很容易就可以将误差锁定在一个很小的范围内,在这一范围内再逼近,得出 的近似值要准确的多,而在最开始的计算中,误差越小,对后面的影响越小,这无疑是好的。 数值分析不只在知识上传授了我很多,在思想上也对我有很大的影响,他给了我很多数 学思想,很多思考的角度,在看待问题的方面上,多方位的去思考,并从别的例子上举一反三。像其中所讲的插值法,在先学习了拉格朗日插值法后,对其理解透彻,了解了其中 的原理和思想,再学习之后的牛顿插值以及三次样条插值等等,都很容易的融会贯通,很容 易的就理解了其中所想,他们的中心思想并没有多大的变化,但是使用的方式却是不同的, 这不仅可以学习到其中心内容,还可以去学习他们的思考方式,每个不同的思考方式带来的 都是不同的算法。而在看待问题上,不同的思考方式总是可以快速的全方位的去看透彻问题, 从而知道如何去解决。 在不断的学习中,知识在不断的获取,能力在不断的提升,同时在老师的不懈讲解下, 我逐渐的发现数值分析所涵盖的知识面特别的广泛,而我所需要学习的地方也更加的多,自 己的不足也在不断的体现,我知道这只是我刚刚接触到了数学的那一角,在以后我还会接触 到更多,而这求知的欲望也在不停的驱赶我,学习的越多,对今后的生活才会有更大的帮助。 计算132 2013014923 张霖篇二:数值分析学习报告 数值分析学习心得报告 班级:11级软工一班 姓名: * * * 学号: 20117610*** 指导老师:* * * 学习数值分析的心得体会 无意中的一次选择,让我接触了数值分析。 作为这学期的选修课,我从内心深处来讲,数值分析真的有点难。感觉它是在高等数学 和线性代数的基础上,又加深了探讨。虽然这节课很难,我学的不是很好,但我依然对它比 较感兴趣。下面就具体说说我的学习体会,让那些感兴趣的同学有个参考。 学习数值分析,我们首先得知道一个软件——matlab。matrix laboratory,即矩阵实验 室,是math work公司推出的一套高效率的数值计算和可视化软件。它是当今科学界最具影 响力、也是最具活力的软件,它起源于矩阵运算,并高速发展成计算机语言。它的优点是强 大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面、便捷的与其他程序和语 言接口。 根据上网搜集到的资料,你就会发现matlab有许多优点: 首先,编程简单使用方便。到目前为止,我已经学过c语言,机器语言,java语言,这

数值分析实验报告总结

数值分析实验报告总结 随着电子计算机的普及与发展,科学计算已成为现代科 学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。 算法算法是指由基本算术运算及运算顺序的规定构成的完 整的解题步骤。算法可以使用框图、算法语言、数学语言、自然语言来进行描述。具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。 误差 计算机的计算结果通常是近似的,因此算法必有误差, 并且应能估计误差。误差是指近似值与真正值之差。绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。误差来源见表 第三章泛函分析泛函分析概要 泛函分析是研究“函数的函数”、函数空间和它们之间 变换的一门较新的数学分支,隶属分析数学。它以各种学科

如果 a 是相容范数,且任何满足 为具体背景,在集合的基础上,把客观世界中的研究对象抽 范数 范数,是具有“长度”概念的函数。在线性代数、泛函 分析及相关的数学领域,泛函是一个函数,其为矢量空间内 的所有矢量赋予非零的正长度或大小。这里以 Cn 空间为例, Rn 空间类似。最常用的范数就是 P-范数。那么 当P 取1, 2 ,s 的时候分别是以下几种最简单的情形: 其中2-范数就是通常意义下的距离。 对于这些范数有以下不等式: 1 < n1/2 另外,若p 和q 是赫德尔共轭指标,即 1/p+1/q=1 么有赫德尔不等式: II = ||xH*y| 当p=q=2时就是柯西-许瓦兹不等式 般来讲矩阵范数除了正定性,齐次性和三角不等式之 矩阵范数通常也称为相容范数。 象为元素和空间。女口:距离空间,赋范线性空间, 内积空间。 1-范数: 1= x1 + x2 +?+ xn 2-范数: x 2=1/2 8 -范数: 8 =max oo ,那 外,还规定其必须满足相容性: 所以

数值计算方法实验报告(例)讲解

实验报告 一、实验目的 二、实验内容 三、实验环境 四.实验方法 五、实验过程 1实验步骤 2 关键代码及其解释 3 调试过程 六、实验总结 1.遇到的问题及解决过程 2.产生的错误及原因分析 3.体会和收获。 七、程序源代码: 八、教师评语

实验报告 一.试验目的:练习用数值方法求解给定的非线性方程。 二.实验内容:求解人口方程: )1(5 .43e 1004.156-+ =λλλ e 要求误差小于410-。 三.实验环境:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。 四.实验方法:牛顿法 牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为: ,2,1,0,) () (1='- =+k x f x f x x k k k k , 当数列{}k x 收敛时,其极限值x 即为方程的解。 定理:给定方程],[,0)(b a x x f ∈= 1)设0)()(''x f x f ; 则牛顿法产生的序列{}k x 收敛于0)(=x f 在],[b a 内的唯一解x 。 五.实验过程: 1.编程: 用C 语言编出牛顿法的源程序。 2. 开机, 打开C 语言编译程序,键入所编程序源代码. 3. 调试程序, 修改错误至能正确运行. 六.实验总结: (1)牛顿法收敛速度快,但初值不容易确定,往往由于初值取得

不当而使迭代不收敛或收敛慢,但若能保证)()(1+>K K x f x f (称为下山条件),则有可能收敛。把新的近似值看作初值的话会比原来的取得好,有可能落入局部收敛的邻域。 (2)牛顿法要求)(x f '在x 附近不为零。亦即x 只能是单根, 不能求重根。可用重根加速收敛法求重根。 (3)牛顿法的每一步迭代中,都要计算一次导数值,若计算)(x f '比计算函数的近似值要麻烦的多。为了避免求导数,可用差商近似代替微商 1 1) ()()(----='K K K K K x x x f x f x f 此时牛顿迭代法改为 )() ()() (111--+--- =K K K K K K K x x x f x f x f x x . (4) 由于人口方程来源于实际问题, λ代表人口增长率, 其真实 值不会太大, 初值不应取得过大.否则会得到该方程的另外一个解 七、程序源代码: #include #define ep 1e-4 float f (float x) { float y; y=100*exp(x)+43.5*(exp(x)-1)/x-156.4; return(y); } float df (float x) { float y; y=100*exp(x)+43.5*( x*exp(x)-exp(x)+1)/(x*x); return(y); } float root(float x) { float y; if (fabs)f

数值分析实验报告1

实验一 误差分析 实验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 =

相关主题