当前位置:文档之家› 数值分析上机实验题参考

数值分析上机实验题参考

数值分析上机实验题参考
数值分析上机实验题参考

数值分析论文

数值积分 一、问题提出

选用复合梯形公式,复合Simpson 公式,Romberg 算法,计算

I = dx x ?

-4

1

02sin 4 ()5343916.1≈I

I =

dx x x ?1

sin ()9460831.0,1)0(≈=I f

I = dx x

e x

?+1

02

4 I =

()dx x x ?++1

211ln 二、要求

编制数值积分算法的程序;

分别用两种算法计算同一个积分,并比较其结果;

分别取不同步长()/ a b h -=n ,试比较计算结果(如n = 10, 20等); ﹡给定精度要求ε,试用变步长算法,确定最佳步长﹡。 三、目的和意义

深刻认识数值积分法的意义; 明确数值积分精度与步长的关系;

根据定积分的计算方法,可以考虑二重积分的计算问题

引言

一、数值求积的基本思想

实际问题当中常常需要计算积分,有些数值方法。如微分方程和积分方程的求解,也都和积分计算相联系。

依据人们熟悉的微积分基本原理,对于积分I=?a b f(x)dx,只要找到被积函数f(x)和原函数F(x),便有下列牛顿-莱布尼茨公式:I=?a b f(x)dx=F(b)-F(a).

但实际使用这种求积方法往往有困难,因为大量的被积函数,诸如

x x

sin

,2x

e-等,其原函数不能用初等函数表达,故不能用上述公式计算。另外,当f(x)是由测量或数值计算给出的一张数据表时,牛顿-莱布尼茨公式也不能直接运用,因此有必要研究积分的数值计算问题。

二、数值积分代数精度

数值求积方法是近似方法,为要保证精度,我们自然希望求积公式能对“尽可能多”的函数准确成立,就提出了所谓代数精度的概念。

如果某个求积公式对次数不超过m的多项式均能准确成立,但对m+1次多项式就不能准确成立,则称该求积公式具有m次代数精度。

三、复合求积公式

为了提高精度,通常可以把积分区间分成若干子区间(通常是等分),再在每个子区间用低阶求积公式,即复化求积法,比如复化梯形公式与复化辛普森公式。

在区间不大时,用梯形公式、辛普森公式计算定积分是简单实用的,但当

区间

较大时,

用梯形公式、辛普森公式计算定积分达不到精确度要求. 为了提高计算的精确度,我们将[a,b] 区间n等分,在每个小区间上应用梯形公式、辛普森公式计算定积分, 然后将其结果相加,这样就得到了复化梯形公式和复化辛普森公式。

1. 复化梯形公式及余项

将积分区间[a,b]n 等分,分点k x a kh =+,b a

h n -=

, 0,1,.....,,k n = 对每个

子区间上采用梯形公式,则得

1

1

1

1n 0

()()[()()]2k k

n n b

x k k a

x k k h I f x dx f x dx f x f x R +--+=====++∑∑??

(f )

11

101[()()][()2()()]

22n n n k k k k k h h

T f x f x f a f x f b --+===+=++∑∑

称为复化梯形公式. 其余项为

又因为在区间[a,b]上连续,由连续函数的性质知,在区间[a,b]上存在

一点η,

于是

称为复化梯形公式的余项。 2.复化辛普森公式及余项

将区间[a,b]分为n 等份在,每个子区间

,1[]

k k x x +应用辛普森公式,若记

12

1

2k k x x h

+=+ 则得 [])()()(4)(6)()(1

12/11

1

f Rn x f x f x f h dx x f dx x f a b

I n k k k k x x n k k k

+++===∑?

∑?-=++-=+

[]?

?

????+++=++=∑∑∑-=+-=+-=++1

11102/11012/1)()(2)(4)(6)()(4)(6n k k n k k n k k k k b f x f x f a f h x f x f x f h Sn 称为复化辛普森公式。

当f(x)在[a,b]上有连续的四阶导数时,则复化辛普森公式余项推导如下:在区间

上辛普森公式的误差已知为

所以,在区间[a,b]上公式的误差为

又因为

在[a,b]上连续, 由连续函数的性质知,在区间[a,b]上存在一点

η,

于是

称为复化辛普森公式的余项。

(二)函数程序编写及结果显示分析

在本次函数程序编写中,区间[a,b]默认最多等分为50次。在具体运行过程,根据题目要求进行具体等分,比如10次,20次等等。

(1)I =

dx

x ?-

4

1

2

sin

4

1、函数程序编制

A、总程序

#include

#include

main()

{float a,b,h,Tn,Sn,I;

float x,y,z;

int n,k;

printf("请输入区间值a,b \n");

printf("a=");

scanf("%f",&a);

printf("b=");

scanf("%f",&b);

for(n=1;n<=50;n++)

{

h=(b-a)/n; /*定义步长*/

printf("h=%f\n",h);

Tn=(h/2)*sqrt(4-sin(a)*sin(a))+(h/2)*sqrt(4-sin(b)*sin(b));

/*编写复化梯形公式*/

/*定义初始值*/

for(k=1;k<=n-1;k++)

{x=k*h;

y=(k+1)*h;

Tn=Tn+2*(h/2)*sqrt(4-sin(x)*sin(x));

}

printf("n=%d,Tn=%f\n",n,Tn);

/*编写复化辛普森公式*/

/*定义初始值*/

Sn=0;

for(k=0;k<=n-1;k++)

{x=k*h;

y=x+(1/2)*h;

z=(k+1)*h;

Sn=Sn+(h/6)*((sqrt(4-(sin(x)*sin(x))))+4*(sqrt(4-(sin(y)*sin(y))))+(sqrt(4-(sin(z)*s

in(z)))));

}

printf("n=%d,Sn=%f\n",n,Sn);

}

}

2、结果显示

A、全部结果显示

h=0.00713

n=35,Tn=0.498711

n=35,Sn=0.498747

h=0.006944

n=36,Tn=0.498711

n=36,Sn=0.498746

h=0.006757

n=37,Tn=0.498711

n=37,Sn=0.498745

h=0.006579

n=38,Tn=0.498711

n=38,Sn=0.498744

h=0.006410

n=39,Tn=0.498711

n=39,Sn=0.498744

h=0.006250

n=40,Tn=0.498711

n=40,Sn=0.498743

h=0.006098

n=41,Tn=0.498711

n=41,Sn=0.498742

h=0.005952

n=42,Tn=0.498711

n=42,Sn=0.498741

这只是其中程序的一部分,从结果可以看出,是比较接近精确值的。

B、当取n=20和n=45时,复化梯形公式与复化辛普森公式积分结果显示

N=20时,Tn和Sn如下所示:

a=0

b=0.25

n=20

h=0.12500

n=20,Tn=0.498710

n=20,Sn=0.498774

N=45时,Tn和Sn如下所示:

a=0

b=0.25

n=45

h=0.005556

n=45,Tn=0.498711

n=45,Sn=0.498739

3、结果分析

由全部的结果显示可以看出,最后的结果是比较接近准确值I,由于试题给出的结果I=1.5343916,经过推导,程序编制,图像分析,题目给出的准确值I=1.5343916是有误的,准确值大概在0.5左右。

当n=20与n=45时,比较上面两个结果Tn和Sn,它们的计算量基本相同,然而精度确差别不是很大,复化梯形法的结果Tn=0.498710与0.498711,而复化辛普森法的结果Sn=0.0.498774与0.498739。四个数据基本是都具有4个有效数字。

(2)I =

dx

x

x

?1

sin

()

9460831

.0

,1

)0(≈

=I

f

1、函数程序编制

A、总程序

#include

#include

main()

{float a,b,h,Tn,Sn,I;

float x,y,z;

int n,k;

printf("请输入区间值a,b\n");

printf("a=");

scanf("%f",&a);

printf("b=");

scanf("%f",&b);

for(n=1;n<=50;n++)

{

h=(b-a)/n; /*定义步长*/

printf("h=%f\n",h);

/*编写复化梯形公式*/

/*定义初始值*/

Tn=(h/2)*(1+(h/2)*(sin(b)/b));

for(k=1;k<=n-1;k++)

{x=k*h;

y=(k+1)*h;

Tn=Tn+2*(h/2)*(sin(x)/x);

}

printf("n=%d,Tn=%f\n",n,Tn);

/*编写复化辛普森公式*/

/*定义初始值*/

Sn=0;

for(k=1;k<=n;k++)

{x=k*h;

y=x+(1/2)*h;

z=(k+1)*h;

Sn=Sn+(h/6)*((sin(x)/x)+4*(sin(y)/y)+(sin(z)/z)); }

printf("n=%d,Sn=%f\n",n,Sn);

}

}

2、结果显示

由于n的次数过小,不够接近准确值,因此将n扩大,结果如下所示:A、全部结果显示

h=0.000502

n=1993,Tn=0.945872

n=1993,Sn=0.946029

h=0.000502

n=1994,Tn=0.945870

n=1994,Sn=0.946029

h=0.000501

n=1995,Tn=0.945871

n=1995,Sn=0.946030

h=0.000501

n=1996,Tn=0.945872

n=1996,Sn=0.946030

h=0.000501

n=1997,Tn=0.945873

n=1997,Sn=0.946030

h=0.000501

n=1998,Tn=0.945873

n=1998,Sn=0.946030

h=0.000500

n=1999,Tn=0.945873

n=1999,Sn=0.946031

h=0.000500

n=2000,Tn=0.945873

n=2000,Sn=0.946030

这只是其中程序的一部分,从结果可以看出,是比较接近精确值的。B、当取n=10和n=20时,复化梯形公式与复化辛普森公式积分结果显示N=10时,Tn和Sn如下所示:

a=0

b=1

n=10

h=0.100000

n=10,Tn=0.905862

n=10,Sn=0.934770

N=20时,Tn和Sn如下所示:

a=0

b=1

n=20

h=0.050000

n=20,Tn=0.925509

n=20,Sn=0.940611

3、结果分析

由全部的结果显示可以看出,最后的结果是比较接近准确值I9460831

≈,

.0

但是可能是等分点数n的值不够多,并未达到准确值。

当n=20时,比较上面两个结果Tn和Sn,它们的计算量基本相同,然而精度确差别很大,同积分值I9460831

.0

≈比较,复化梯形法的结果Tn=0.925509只有一位有效数字,而复化辛普森法的结果Sn=0.940611却有两位有效数字。因此可以看出复化辛普森法求积分精度较高。

(3)I =

dx

x

e x

?

+

1

2

4

1、函数程序编制

A、总程序

#include

#include

main()

{float a,b,h,Tn,Sn,I;

float x,y,z;

int n,k;

printf("请输入区间值a,b和等分数n \n");

printf("a=");

scanf("%f",&a);

printf("b=");

scanf("%f",&b);

for(n=1;n<=1000;n++)

{

h=(b-a)/n; /*定义步长*/

printf("h=%f\n",h);

Tn=(h/2)*exp(a)/(4+a*a)+(h/2)*exp(b)/(4+b*b);

/*编写复化梯形公式*/

/*定义初始值*/

for(k=1;k<=n-1;k++)

{x=k*h;

y=(k+1)*h;

Tn=Tn+2*(h/2)*exp(x)/(4+x*x);

}

printf("n=%d,Tn=%f\n",n,Tn);

/*编写复化辛普森公式*/

/*定义初始值*/

Sn=0;

for(k=0;k<=n-1;k++)

{x=k*h;

y=x+(1/2)*h;

z=(k+1)*h;

Sn=Sn+(h/6)*(exp(x)/(4+x*x)+4*exp(y)/(4+y*y)+exp(z)/(4+z*z)); }

printf("n=%d,Sn=%f\n",n,Sn);

}

getch();

}

A、全部结果显示

由于n的次数过小,不够接近准确值,因此将n扩大,结果如下所示:h=0.001005

n=995,Tn=0.390812

n=995,Sn=0.390713

h=0.001004

n=996,Tn=0.390812

n=996,Sn=0.390713

h=0.001003

n=997,Tn=0.390812

n=997,Sn=0.390714

h=0.001002

n=998,Tn=0.390812

n=998,Sn=0.390714

h=0.001001

n=999,Tn=0.390812

n=999,Sn=0.390714

h=0.001000

n=1000,Tn=0.390812

n=1000,Sn=0.390714

这只是其中程序的一部分,从结果可以看出,是比较接近精确值的。B、当取n=100和n=500时,复化梯形公式与复化辛普森公式积分结果显示N=100时,Tn和Sn如下所示:

a=0

b=1

n=100

h=0.01000

n=100,Tn=0.390812

n=100,Sn=0.389834

N=500时,Tn和Sn如下所示:

a=0

b=1

n=500

h=0.002000

n=500,Tn=0.390812

n=500,Sn=0.390616

由全部的结果显示可以看出,最后的结果是比较接近准确值I,由于试题并未给出准确值,只能大概估计。最终的精度要靠误差分析进行判断。当n=100时,比较上面两个结果Tn和Sn,它们的计算量基本相同,然而精度确差别很大,复化梯形法的结果Tn=0.390812,而复化辛普森法的结果Sn=0.389834。只有一个有效数字相同。当n=500时,Tn=0.390812,Sn=0.390616,Tn没有变化,而Sn增大,两个数据具有3个相同的有效数字。

(4)I =

()

dx

x

x ?

+

+

1

2

1

1

ln

1、函数程序编制

A、总程序

#include

#include

main()

{float a,b,h,Tn,Sn,I;

float x,y,z;

int n,k;

printf("请输入区间值a,b和等分数n \n");

printf("a=");

scanf("%f",&a);

printf("b=");

scanf("%f",&b);

for(n=1;n<=200;n++)

{

h=(b-a)/n; /*定义步长*/

printf("h=%f\n",h);

Tn=(h/2)*log(1+a)/(1+a*a)+log(1+a)/(1+a*a);

/*编写复化梯形公式*/

/*定义初始值*/

for(k=1;k<=n-1;k++)

{x=k*h;

y=(k+1)*h;

Tn=Tn+2*(h/2)*log(1+x)/(1+x*x);

}

printf("n=%d,Tn=%f\n",n,Tn);

/*编写复化辛普森公式*/

/*定义初始值*/

Sn=0;

for(k=0;k<=n-1;k++)

{x=k*h;

y=x+(1/2)*h;

z=(k+1)*h;

Sn=Sn+(h/6)*(log(1+x)/(1+x*x)+4*log(1+y)/(1+y*y)+log(1+y)/(1+y*y));

}

printf("n=%d,Sn=%f\n",n,Sn);

}

}

2、结果显示

A、全部结果显示

由于n的次数过小,不够接近准确值,因此将n扩大,结果如下所示:h=0.005181

n=193,Tn=0.271298

n=193,Sn=0.271298

h=0.005155

n=194,Tn=0.271303

n=194,Sn=0.271303

h=0.005128

n=195,Tn=0.271307

n=195,Sn=0.271307

h=0.005102

n=196,Tn=0.271312

n=196,Sn=0.271312

h=0.005076

n=197,Tn=0.271316

n=197,Sn=0.271316

h=0.005051

n=198,Tn=0.271321

n=198,Sn=0.271321

h=0.005025

n=199,Tn=0.271325

n=199,Sn=0.271325

h=0.005000

n=200,Tn=0.271330

n=200,Sn=0.271330

这只是其中程序的一部分,从结果可以看出,是比较接近精确值的。B、当取n=10和n=150时,复化梯形公式与复化辛普森公式积分结果显示N=10时,Tn和Sn如下所示:

a=0

b=1

n=10

h=0.100000

n=10,Tn=0.253955

n=10,Sn=0.253955

N=150时,Tn和Sn如下所示:

a=0

b=1

n=150

h=0.006667

n=150,Tn=0.271039

n=150,Sn=0.271039

3、结果分析

由全部的结果显示可以看出,最后的结果是比较接近准确值I,由于试题并未给出准确值,只能大概估计。最终的精度要靠误差分析进行判断。当n=10时,比较上面两个结果Tn和Sn,它们的计算量基本相同,复化梯形法的结果Tn=0.253955,而复化辛普森法的结果Sn=0.253955。结果相同。当n=150时,Tn=0.271039,Sn=0. 271039,结果相同都具有6位相同的有效数字。

(三)总结及讨论

一:误差分析

以第二个函数为例:f(x) =

x

x

sin 为了利用余项公式估计误差,要求f(x) = x

x

sin 的高阶导数,由于

f(x) = x x sin =dt xt )cos(0

1

?

所以有

f (k)(x)=dt k xt t dt xt dx d k k

k )2

cos(01)(cos 01π+=?? 于是

11

01)2cos(01

)(1

0max )

(+=

≤+≤≤≤??k dt t dt t k xt x f x k k k π

根据复化梯形公式误差

取n=10,

3

1

)101(121)(1

0max

12)(2)

2(210≤

≤≤≤-=x f

x h Tn I f R =0.000278 根据复化辛普森公式误差

取n=10

5

1

)101(28801)(210≤

-=Tn I f R =71094.6-? 显然从误差分析中,明显可以看出复化辛普森公式误差要比复化梯形公式误差要小的多,即在该函数中,采用复化辛普森公式进行积分的话,精度要比采用

复化梯形公式积分高。

其他的三个函数误差分析过程与上述过程相同,结果也类似。 二:总结与体会

在本次数值积分析作业完成过程中,遇到了许多困难。对数值积分的概念了解的不是十分透彻,通过看书,了解了数值积分的一些基本概念,并深入了解了数值分析的一些特性。由于本次作业选择的是数值积分问题,就特别对精度的问题认真研究。因为牛顿-科斯特公式不稳定,因此不能够通过提高阶的方法来提高求积精度。为了提高精度 ,通常可以把积分区间分成若干子区间(通常是等分),再在每个子区间用低阶求积公式,即复化求积法,比如复化梯形公式与复化辛普森公式。同时在复化梯形公式与复化辛普森公式中,要注意它们不同表达形式的条件。发现:在区间[a,b]等分点n 越大,即步长h 越小(h=

n

a

b -),复化梯形公式与复化辛普森中Tn 与Sn 值越接近准确值,精度也就越高。

其次在编程中,由于对编程软件了解的比较少,在编制中遇到的困难比较多,虽然基本理解了公式的含义,但是在具体编写中,还是会将公式中变量定义错误。在对两个公式的编写中,如何利用循环准确地表达公式含义,例如函数I =

dx x x

?1

sin )9460831.0,1)0(≈=I f 的求积,其边界条件()1)0(=f ,因为

x

不能取到0,否则f(x) =

x

x

sin 就没有意义。X 的最小值只能是无限接近0,但不能取0。在这个函数的程序编写中,开始并没有注意到边界条件,因此程序总是提醒错误。像这种问题,是由于自己对函数边界条件的不了解造成的。在程序结果出来后,对比准确值,发现等分点n ,即步长对函数值的影响很大,需要不断地调整等分点n 值。比如I =

dx x x

?1

sin ()9460831.0,1)0(≈=I f ,n 要分

到5000以上才能和准确值非常接近。

对于本次作业,让我从这次上机作业中学到了很多东西,对以前的学习的知识有个总结性的巩固和提高,对今后的学习又有很大的帮助。让我更加懂的数值分析在实际应用中的重要性。

东南大学数值分析上机题答案

数值分析上机题 第一章 17.(上机题)舍入误差与有效数 设∑=-= N j N j S 2 2 11 ,其精确值为)111-23(21+-N N 。 (1)编制按从大到小的顺序1 -1 ···1-311-21222N S N +++=,计算N S 的通用 程序; (2)编制按从小到大的顺序1 21 ···1)1(111 222-++--+ -=N N S N ,计算N S 的通用程序; (3)按两种顺序分别计算210S ,410S ,610S ,并指出有效位数(编制程序时用单精度); (4)通过本上机题,你明白了什么? 解: 程序: (1)从大到小的顺序计算1 -1 ···1-311-21222N S N +++= : function sn1=fromlarge(n) %从大到小计算sn1 format long ; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end (2)从小到大计算1 21 ···1)1(111 2 22 -++--+-= N N S N function sn2=fromsmall(n) %从小到大计算sn2 format long ; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end (3) 总的编程程序为: function p203()

clear all format long; n=input('please enter a number as the n:') sn=1/2*(3/2-1/n-1/(n+1));%精确值为sn fprintf('精确值为%f\n',sn); sn1=fromlarge(n); fprintf('从大到小计算的值为%f\n',sn1); sn2=fromsmall(n); fprintf('从小到大计算的值为%f\n',sn2); function sn1=fromlarge(n) %从大到小计算sn1 format long; sn1=single(0); for m=2:1:n sn1=sn1+1/(m^2-1); end end function sn2=fromsmall(n) %从小到大计算sn2 format long; sn2=single(0); for m=n:-1:2 sn2=sn2+1/(m^2-1); end end end 运行结果:

数值分析实验报告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 姓名:万轩 实验二插值法

数值分析MATLAB上机实验

数值分析实习报告 姓名:gestepoA 学号:201******* 班级:***班

序言 随着计算机技术的迅速发展,数值分析在工程技术领域中的应用越来越广泛,并且成为数学与计算机之间的桥梁。要解决工程问题,往往需要处理很多数学模型,不仅要研究各种数学问题的数值解法,同时也要分析所用的数值解法在理论上的合理性,如解法所产生的误差能否满足精度要求:解法是否稳定、是否收敛及熟练的速度等。而且还能减少大量的人工计算。 由于工程实际中所遇到的数学模型求解过程迭代次数很多,计算量很大,所以需要借助如MATLAB,C++,VB,JAVA的辅助软件来解决,得到一个满足误差限的解。本文所计算题目,均采用MATLAB进行编程,MATLAB被称为第四代计算机语言,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来MATLAB最突出的特点就是简洁,它用更直观的、符合人们思维习惯的代码。它具有以下优点: 1友好的工作平台和编程环境。MATLAB界面精致,人机交互性强,操作简单。 2简单易用的程序语言。MATLAB是一个高级的矩阵/阵列语言,包含控制语言、函数、数据结构,具有输入、输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编好一个较大的复杂的应用程序(M 文件)后再一起运行。 3强大的科学计算机数据处理能力。包含大量计算算法的集合,拥有600多个工程中要用到的数学运算函数。 4出色的图像处理功能,可以方便地输出二维图像,便于我们绘制函数图像。

目录 1 第一题 (4) 1.1 实验目的 (4) 1.2 实验原理和方法 (4) 1.3 实验结果 (5) 1.3.1 最佳平方逼近法 (5) 1.3.2 拉格朗日插值法 (7) 1.3.3 对比 (8) 2 第二题 (9) 2.1实验目的 (9) 2.2 实验原理和方法 (10) 2.3 实验结果 (10) 2.3.1 第一问 (10) 2.3.2 第二问 (11) 2.3.3 第三问 (11) 3 第三题 (12) 3.1实验目的 (12) 3.2 实验原理和方法 (12) 3.3 实验结果 (12) 4 MATLAB程序 (14)

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 912113850115 专业:数学与应用数学 指导老师:李建良

线性方程组的数值实验 一、课题名字:求解双对角线性方程组 二、问题描述 考虑一种特殊的对角线元素不为零的双对角线性方程组(以n=7为例) ?????????? ?????? ? ???? ?d a d a d a d a d a d a d 766 55 44 3 32 211??????????????????????x x x x x x x 7654321=?????????? ? ???????????b b b b b b b 7654321 写出一般的n (奇数)阶方程组程序(不要用消元法,因为不用它可以十分方便的解出这个方程组) 。 三、摘要 本文提出解三对角矩阵的一种十分简便的方法——追赶法,该算法适用于任意三对角方程组的求解。 四、引言 对于一般给定的d Ax =,我们可以用高斯消去法求解。但是高斯消去法过程复杂繁琐。对于特殊的三对角矩阵,如果A 是不可约的弱对角占优矩阵,可以将A 分解为UL ,再运用追赶法求解。

五、计算公式(数学模型) 对于形如????? ?? ????? ??? ?---b a c b a c b a c b n n n n n 111 2 2 2 11... ... ...的三对角矩阵UL A =,容易验证U 、L 具有如下形式: ??????? ????? ??? ?=u a u a u a u n n U ...... 3 3 22 1 , ?? ????? ? ?? ??????=1 (1) 1132 1l l l L 比较UL A =两边元素,可以得到 ? ?? ??-== = l a b u u c l b u i i i i i i 111 i=2, 3, ... ,n 考虑三对角线系数矩阵的线性方程组 f Ax = 这里()T n x x x x ... 2 1 = ,()T n f f f f ... 2 1 = 令y Lx =,则有 f Uy = 于是有 ()?????-== --u y a f y u f y i i i i i 1 1 11 1 * i=2, 3, ... ,n 再根据y Lx =可得到

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

数值计算实验报告

(此文档为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);

贵州大学数值分析上机实验

数值分析上机实验报告 课程名称:数值分析上机实验 学院:机械工程学院专业:机械制造 姓名:张法光学号:2012021691 年级:12级任课教师:代新敏老师 2012年12月30日

一.已知A 与b 12.38412 2.115237 -1.061074 1.112336 -0.1135840.718719 1.742382 3.067813 -2.031743 2.11523719.141823 -3.125432 -1.012345 2.189736 1.563849 -0.784165 1.112348 3.123124 -1.061074 -3.125A =43215.567914 3.123848 2.031454 1.836742-1.056781 0.336993 -1.010103 1.112336 -1.012345 3.12384827.108437 4.101011-3.741856 2.101023 -0.71828 -0.037585 -0.113584 2.189736 2.031454 4.10101119.8979180.431637- 3.111223 2.121314 1.784317 0.718719 1.563849 1.836742 -3.741856 0.4316379.789365-0.103458 -1.103456 0.238417 1.742382 -0.784165 -1.056781 2.101023-3.111223-0.1034581 4.7138465 3.123789 -2.213474 3.067813 1.112348 0.336993-0.71828 2.121314-1.103456 3.12378930.719334 4.446782 -2.031743 3.123124 -1.010103-0.037585 1.7843170.238417-2.213474 4.44678240.00001[ 2.1874369 33.992318 -2 5.173417 0.84671695 1.784317 -8 6.612343 1.1101230 4.719345 -5.6784392]T B ????? ? ?? ? ? ???? ? ? ???? ? ? ????? ?=(2)用超松弛法求解Bx=b (取松弛因子ω=1.4,x (0)=0,迭代9次)。 (3)用列主元素消去法求解 Bx=b 。 解:(3)、用列主元素消去法求解Bx=b (一)、理论依据: 其基本思想是选取绝对值尽量大的元素作为主元素,进行行与列的交换,再进行回代,求出方程的解。 将方阵A 和向量b 写成C=(A b )。将C 的第1列中第1行的元素与其下面的此列的元素逐一进行比较,找到最大的元素1j c ,将第j 行的元素与第1行的元素进行交换,然后通过行变换,将第1列中第2到第n 个元素都消成0。将变换后的矩阵(1)C 的第二列中第二行的元 素与其下面的此列的元素逐一进行比较,找到最大的元素(1) 2k c ,将第k 行的元素与第2行的 元素进行交换,然后通过行变换,将第2列中第3到第n 个元素都消成0。以此方法将矩阵的左下部分全都消成0。 (二)、计算程序: #include "math.h" #include "stdio.h" void main() { double u[9],x1[9],y[9],q[9],b1[9][10],x[9],a[9][9]={ {12.38412,2.115237,-1.061074,1.112336,-0.113584,0.718719,1.742382,3.067813,-2.031743 },

矩阵与数值分析上机实验题及程序

1.给定n 阶方程组Ax b =,其中 6186186186A ?? ? ? ?= ? ? ??? ,7151514b ?? ? ? ?= ? ? ??? 则方程组有解(1,1,,1)T x = 。对10n =和84n =,分别用Gauss 消去法和列主元消去法解方程组,并比较计算结果。 Gauss 消去法: Matlab 编程(建立GS.m 文件): function x=GS(n) A=[];b=[]; for i=1:n-1 A(i,i)=6; A(i,i+1)=1; A(i+1,i)=8; b(i)=15; end A(n,n)=6;b(1)=7;b(n)=14;b=b'; for k=1:n-1 for i=k+1:n m(i,k)=A(i,k)/A(k,k); A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n); b(i)=b(i)-m(i,k)*b(k); end end b(n)=b(n)/A(n,n); for i=n-1:-1:1 b(i)=(b(i)-sum(A(i,i+1:n).*b(i+1:n)'))/A(i,i); end clear x; x=b; disp( 'AX=b 的解x 是') end 计算结果: 在matlab 命令框里输出GS (10)得: >> GS(10) AX=b 的解x 是 ans = 1.0000 1.0000

1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 在matlab命令框里输出GS(84)得:>> GS(84) AX=b的解x是 ans = 1.0e+008 * 0.0000 … … … 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0001 0.0002 -0.0003 0.0007 -0.0013 0.0026 -0.0052 0.0105 -0.0209 0.0419 -0.0836 0.1665 -0.3303

数值分析实验报告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 的帮助。

数值分析拉格朗日插值法上机实验报告

课题一:拉格朗日插值法 1.实验目的 1.学习和掌握拉格朗日插值多项式。 2.运用拉格朗日插值多项式进行计算。 2.实验过程 作出插值点(1.00,0.00),(-1.00,-3.00),(2.00,4.00)二、算法步骤 已知:某些点的坐标以及点数。 输入:条件点数以及这些点的坐标。 输出:根据给定的点求出其对应的拉格朗日插值多项式的值。 3.程序流程: (1)输入已知点的个数; (2)分别输入已知点的X坐标; (3)分别输入已知点的Y坐标; 程序如下: #include #include #include 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! The value of n must in (0,20)."); 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++) { 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)的值。

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

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和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);

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 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);

数值分析上机实验最小二乘法

---------------------------------------------------------------最新资料推荐------------------------------------------------------ 数值分析上机实验最小二乘法 数值分析实验报告五最小二乘法一、数值分析实验报告五最 小二乘法一、题目设有如下数据题目设有如下数据 xj -3 -2 -1 0 1 2 3 -3 -2 -1 0 1 2 3 ( )jf x -1.76 0.42 1.2 1.34 1.43 2.25 4.38 -1.76 0.42 1.2 1.34 1.43 2.25 4.38 用三次多项式拟 合这组数据,并绘出图形。 二、用三次多项式拟合这组数据,并绘出图形。 二、方法最小二t(f,[xx(1),xx(n)]) 四、结果 save and run 之后: 请输入插值节点 as [x1,x2...] [-3 -2 -1 0 1 2 3] 请输入插 值节点处对应的函数值 as [f1,f2...] [-1.76 0.42 1.2 1.34 1.43 2.25 4.38] 请输入要求的插值次数m =3 f = 133/100+121469856021/35184372088832*x-8042142191733/450359 结果 save and run 之后: 请输入插值节点 as [x1,x2...] [-3 -2 -1 0 1 2 3] 请输入插 值节点处对应的函数值 as [f1,f2...] [-1.76 0.42 1.2 1.34 1.43 2.25 4.38] 请输入要求的插值次数m =3 f = 133/100+121469856021/35184372088832*x-8042142191733/4503599 627370496*x+1020815915537309/9007199254740992*x 9627370496*x+1020815915537309/9007199254740992*x五、拓展: 1 / 2

数值分析2016上机实验报告

序言 数值分析是计算数学的范畴,有时也称它为计算数学、计算方法、数值方法等,其研究对象是各种数学问题的数值方法的设计、分析及其有关的数学理论和具体实现的一门学科,它是一个数学分支。是科学与工程计算(科学计算)的理论支持。许多科学与工程实际问题(核武器的研制、导弹的发射、气象预报)的解决都离不开科学计算。目前,试验、理论、计算已成为人类进行科学活动的三大方法。 数值分析是计算数学的一个主要部分,计算数学是数学科学的一个分支,它研究用计算机求解各种数学问题的数值计算方法及其理论与软件实现。现在面向数值分析问题的计算机软件有:C,C++,MATLAB,Python,Fortran等。 MATLAB是matrix laboratory的英文缩写,它是由美国Mathwork公司于1967年推出的适合用于不同规格计算机和各种操纵系统的数学软件包,现已发展成为一种功能强大的计算机语言,特别适合用于科学和工程计算。目前,MATLAB应用非常广泛,主要用于算法开发、数据可视化、数值计算和数据分析等,除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。 本实验报告使用了MATLAB软件。对不动点迭代,函数逼近(lagrange插值,三次样条插值,最小二乘拟合),追赶法求解矩阵的解,4RungeKutta方法求解,欧拉法及改进欧拉法等算法做了简单的计算模拟实践。并比较了各种算法的优劣性,得到了对数值分析这们学科良好的理解,对以后的科研数值分析能力有了极大的提高。

目录 序言 (1) 问题一非线性方程数值解法 (3) 1.1 计算题目 (3) 1.2 迭代法分析 (3) 1.3计算结果分析及结论 (4) 问题二追赶法解三对角矩阵 (5) 2.1 问题 (5) 2.2 问题分析(追赶法) (6) 2.3 计算结果 (7) 问题三函数拟合 (7) 3.1 计算题目 (7) 3.2 题目分析 (7) 3.3 结果比较 (12) 问题四欧拉法解微分方程 (14) 4.1 计算题目 (14) 4.2.1 方程的准确解 (14) 4.2.2 Euler方法求解 (14) 4.2.3改进欧拉方法 (16) 问题五四阶龙格-库塔计算常微分方程初值问题 (17) 5.1 计算题目 (17) 5.2 四阶龙格-库塔方法分析 (18) 5.3 程序流程图 (18) 5.4 标准四阶Runge-Kutta法Matlab实现 (19) 5.5 计算结果及比较 (20) 问题六舍入误差观察 (22) 6.1 计算题目 (22) 6.2 计算结果 (22) 6.3 结论 (23) 7 总结 (24) 附录

数值分析上机实验——解线性方程组

实验报告 课程名称数值分析 实验项目名称解线性方程组 实验类型上机实验学时 4 班级20111131 学号2011113130 姓名张振指导教师沈艳 实验室名称理学楼407 实验时间2013.12.9 实验成绩预习部分 实验过程 表现 实验报告 部分 总成绩 教师签字日期 哈尔滨工程大学教务处制

实验四 解线性方程组 一.解线性方程组的基本思想 1.直接三角分解法: 将系数矩阵A 转变成等价两个矩阵L 和U 的乘积 ,其中L 和U 分别是下三角和上三角矩阵。当A 的所有顺序主子式都不为0时,矩阵A 可以分解为A=LU ,且分解唯一。其中L 是单位下三角矩阵,U 是上三角矩阵。 2.平方根法: 如果矩阵A 为n 阶对称正定矩阵,则存在一个对角元素为正数的下三角实矩阵L ,使得:A=LL^T 。当限定L 的对角元素为正时,这种分解是唯一的,称为平方根法(Cholesky )分解。 3.追赶法: 设系数矩阵为三对角矩阵 112223311 10000000000000000 n n n n n b c a b c a b A a b c a b ---?? ? ? ?= ? ? ? ? ?? ? 则方程组Ax=f 称为三对角方程组。 设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记 1122 23311000010 000001000 0000100,0000000000 0001n n n n b L U γαβγββγβ--???? ? ? ? ? ? ? ?== ? ? ? ? ? ? ? ? ? ??? ? ? ? 可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三 角方程组Ux=y 。 4.雅克比迭代法: 首先将方程组中的系数矩阵A 分解成三部分,即:A = L+D+U ,如图1所示,其中D 为对角阵,L 为下三角矩阵,U 为上三角矩阵。

数值分析实验报告

学生实验报告实验课程名称 开课实验室 学院年级专业班 学生姓名学号 开课时间至学年学期

if(A(m,k)~=0) if(m~=k) A([k m],:)=A([m k],:); %换行 end A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去end end x=zeros(length(b),1); %回代求解 x(n)=A(n,c)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k); end y=x; format short;%设置为默认格式显示,显示5位 (2)建立MATLAB界面 利用MA TLAB的GUI建立如下界面求解线性方程组: 详见程序。 五、计算实例、数据、结果、分析 下面我们对以上的结果进行测试,求解:

? ? ? ? ? ? ? ? ? ? ? ? - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - - 7 2 5 10 13 9 14 4 4 3 2 1 13 12 4 3 3 10 2 4 3 2 1 x x x x 输入数据后点击和,得到如下结果: 更改以上数据进行测试,求解如下方程组: 1 2 3 4 43211 34321 23431 12341 x x x x ?? ???? ?? ???? ?? ???? = ?? ???? - ?? ???? - ???? ?? 得到如下结果:

数值分析实验报告总结

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

如果 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: 1. 实验项目的性质和任务 通过上机实验,使学生对病态问题、线性方程组求解和函数的数值逼近方法有一个初步理解。 2.教学内容和要求 1)对高阶多多项式 20 1()(1)(2)(20)()k p x x x x x k ==---=-∏ 编程求下面方程的解 19()0p x x ε+= 并绘图演示方程的解与扰动量ε的关系。(实验) 2)对2~20n =,生成对应的Hilbert 矩阵,计算矩阵的条件数;通过先确定解获得常向量b 的方法,确定方程组 n H x b = 最后,用矩阵分解方法求解方程组,并分析计算结果。(第三章,实验题4) 3)对函数 2 1()[1,1]125f x x x =∈-+ 的Chebyshev 点 (21)cos( ) 1,2,...,12(1) k k x k n n π -==++ 编程进行Lagrange 插值,并分析插值结果。(第四章 实验1)

项目涉及核心知识点 病态方程求解、矩阵分解和方程组求解、Lagrange插值。 重点与难点 算法设计和matlab编程。 1)a.实验方案: 先创建一个20*50的零矩阵X,然后利用Matlab中的roots()和poly()函数将50个不同的ess扰动值所产生的50个解向量分别存入X矩阵中。然后再将ess向量分别和X的20个行向量绘图。即可直观的看出充分小的扰动值会产生非常大的偏差。即证明了这个问题的病态性。 b.编写程序: >> X=zeros(20,50); >> ve=zeros(1,21); >> ess=linspace(0,,50);k=1; >> while k<=50 ve(2)=ess(k); X(1:20,k)=roots(poly(1:20)+ve); k=k+1; end >> m=1; >> while m<=20 figure(m),plot(ess,X(m,:));

数值分析实验上机题

数值分析 课程实验指导书 实验一 非线性方程求根 一、问题提出 设方程3 ()310f x x x =--=有三个实根**121.8793,0.34727,x x ==- *3 1.53209x =-现采用下面六种不同计算格式,求 f(x)=0的根*1x 或*2x 1、 231 x x x += 2、 31 3 x x -= 3、 x = 4、 21 3 x x =- 5、 x = 6、 32 131 ()31 x x x x x --=-- 二、要求 1、编制一个程序进行运算,最后打印出每种迭代格式的敛散情况; 2、用事后误差估计1k k x x ε+-<来控制迭代次数,并且打印出迭代的次数; 3、初始值的选取对迭代收敛有何影响; 4、分析迭代收敛和发散的原因。 三、目的和意义 1、通过实验进一步了解方程求根的算法; 2、认识选择计算格式的重要性; 3、掌握迭代算法和精度控制; 4、明确迭代收敛性与初值选取的关系。 四、实验学时:2学时 五、实验步骤: 1.进入matlab 开发环境; 2.根据实验容和要求编写程序; 3.调试程序; 4.运行程序; 5.生成报告

实验二 线方程组的直接解法 一、问题提出 给出下列几个不同类型的线性方程组,请用适当算法计算其解。 1、 设线性方程组 1234567891042312 100008653650100422132103102151 3 1 1 9 44261673323868571726350213425301161011917342122462713920124001 83248631x x x x x x x x x x --??????--?? ????---?? ?---??????---?? ?--??????--?? ?---????-????-----???5123234613381921??? ??????????????? ??? =????????? ??? ???????? ???? ????-??? (1,1,0,1,2,0,3,1,1,2)T x *=-- 2、 设对称正定阵系数阵线方程组 123456784240 24000221213206411418356200216143323218122410394334411142202531011421500633421945x x x x x x x x -????????????---????????????----?????? ----??????=??????----??????----??????????---?????--??????????????? (1,1,0,2,1,1,0,2)T x *=--

相关主题
文本预览
相关文档 最新文档