当前位置:文档之家› 数值计算方法实验课

数值计算方法实验课

数值计算方法实验课
数值计算方法实验课

实验报告

一、实验目的

二、实验内容

三、实验环境

四.实验方法

五、实验过程

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)()(

2))(x f ''在],[b a 上不变号,且],[,0)(b a x x f ∈≠'; 3)选取],[0b a x ∈,满足0)()(00>''x f x f ;

则牛顿法产生的序列{}k x 收敛于0)(=x f 在],[b a 内的唯一解x 。 五.实验过程:

1.编程: 根据所用算法及选用语言编出源程序 2. 开机, 打开所用语言系统输入所编源程序. 3. 调试程序, 修改错误直至能正确运行. 4. 运行程序并输出计算结果.

六.实验总结: 对实验中存在的问题及解决的办法、实验结果等进行

分析讨论.

七、教师评语

附:实验报告之例

实验一 非线性方程求根

姓名 专业: 学号:

一.试验目的:练习用数值方法求解给定的非线性方程。 二.实验内容:求解人口方程: )1(5

.43e 1004.156-+

=λλλ

e

要求误差小于410-。

三.实验仪器、语言:PC 计算机,C 程序设计语言 四.实验方法:牛顿法

牛顿法简述:牛顿法是一种特殊的迭代法,其迭代公式为:

,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)()(

2))(x f ''在],[b a 上不变号,且],[,0)(b a x x f ∈≠'; 3)选取],[0b a x ∈,满足0)()(00>''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

else y=root(x-f(x)/df(x)); while(n

main() {float y,x0;

printf(“enter x0:”); scanf(“%f”,&x0); y=root(x);

printf(“%f%f’,y,f(y)); }

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

一.试验目的:练习线性方程组的直接解法。

二.实验内容:求解如下三对角线方程组:

??

?

??????

???????=????????????????????????????????--------100200200200100414411411411454321x x x x x .

三.实验仪器、语言:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。

四.实验方法:追赶法

五.实验步骤:

1.编程: 根据所用算法及选用语言编出源程序 2. 开机, 打开所用语言系统输入所编源程序. 3. 调试程序, 修改错误直至能正确运行. 4. 运行程序并输出计算结果.

六.讨论: 对实验中存在的问题及解决的办法、实验结果等进行分析

讨论.

七.写出实验报告:实验报告要求及书写格式见附例.

附:实验报告之例

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

姓名 专业: 学号:

一.试验目的:练习线性方程组的直接解法。 二.实验内容:求解如下三对角线方程组:

??

?

??????

???????=????????????????????????????????--------100200200200100414411411411454321x x x x x . 三.实验仪器、语言:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。

四.实验方法:追赶法

追赶法简述:追赶法主要用于解三对角线方程组,尤其是具有严格对角占优的三对角线方程。用克路特分解法将三对角线矩阵

??

?

???????????????????=---n n n n n i

i i b a c b a c b a c b a c b A 11122211

分解为A=LU:

??????????????????????=n n i i L αγαγαγαγα 33221, ??

?

???????

???

?

??

?

????

?=-11

1

11121n i

U ββββ 其中

1

1

1

1

1111,,3,2,,;,,3,2,---=??

?

??-==-==

===n n n n i i i i i i i i b n i c

b c b n i a βγααββγααβαγ 求解f Ax =可通过求解两个三角方程组y Ux f Ly ==,来实现,其中

).

1,2,,2,1)(,).

,,2,1(/)(,111

11 --=-===-==+-n n i x y x y x n i y f y f

y i i i i n n i i i i i βαγα

五.实验过程:

1.编程: 用C 语言编出追赶法的源程序。

2. 开机, 打开C 语言编译程序,键入所编程序源代码.

3. 调试程序, 修改错误至能正确运行.

4. 运行程序并输出计算结果.

计算结果:

x(1) = 46.1538 x(2) = 84.6154 x(3) = 92.3077 x(4) = 84.6154 x(5) = 46.1538

六. 讨论:

追赶法的中间运算没有数量级的很大变化,不会有严重的误差积累,所以此方法是比较稳定的。但在计算过程中要求),,3,2,1(n i i =α不能为零,因此,并不是任何三对角线方程组均可用追赶法求解。

附:程序源代码:

#include “math.h ” #include “stdio.h ” int treede(n,m,b,d) int n,m;

double b[],d[]; {int k,j; float s;

if(m!=(3*n-2))

{printf(“err\n ”);return(-2);} for (k=0;k<=n-2;k++) {j=3*k;s=b[j]; if(fabs(s)+1.0=1.0)

{ printf(“fail\n ”);return(0);} b[j+1]= b[j+1]/s; d[k]= d[k]/s;

b[j+3]= b[j+3]- b[j+2]*b[j+1];

d[k+1]= d[k+1]- b[j+2]*d[k];

}

s=b[3*n-3];

if(fabs(s)+1.0=1.0)

{ printf(“fail\n”);return(0);}

d[n-1]= d[n-1]/s;

for (k=n-2;k>=0;k-)

d[k]= d[k]- b[3*k+1]*d[k+1];

return(2)

}

#include “stdio.h”

#include “treede.c”

main()

{int i;

static double b[13]={4.0, 4.0, 4.0, 4.0, 4.0,-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0};

static double d[5]={100.0,200.0, 200.0, 200.0,100.0}; if(treede(5,13,b,d)>0)

for (i=0;i<=4;i++)

printf(“x(%d)=%5.4\n”,i+1,d[i]);

}

实验三 矩阵求逆

一.试验目的:练习用数值方法求逆矩阵。 二.实验内容:求下面矩阵的逆矩阵:

??

??

?

?????--=491472583A . 三.实验仪器、语言:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。

四.实验方法: 全主元高斯——约当消去法 五.实验步骤:

1.编程: 根据所用算法及选用语言编出源程序 2. 开机, 打开所用语言系统输入所编源程序. 3. 调试程序, 修改错误直至能正确运行. 4. 运行程序并输出计算结果.

六.讨论: 对实验中存在的问题及解决的办法、实验结果等进行分析

讨论.

七.写出实验报告:实验报告要求及书写格式见附例.

附:实验报告之例

实验三 矩阵求逆

姓名 专业: 学号:

一.试验目的:练习用数值方法求逆矩阵。

二.实验内容:求下面矩阵的逆矩阵:

??

??

?

?????--=491472583A . 三.实验仪器、语言:PC 计算机, C 语言。

四.实验方法: 列主元高斯—约当消去法 列高斯—约当消去法简述:高斯—约当消去法是高斯消去法的另一种变种和

改进。本算法与高斯消元法的区别在于:(1)不用乘数ik m ,改用行标准化,把)

(k kk

a 位置上的元素先变为1。(2)高斯消元法只是把)(k kk a 这一列中)(k kk a 下面行的元素消为0,而高斯—约当消去法则是把)(k kk a 这一列元素除1)(=k kk a 以外全部消为0。(3)高斯—约当消去法进行n 次消元,把第n 列也消为只剩一个元素为1,其余均为0。因此,0≠?n 对于消元也是必要条件。

高斯—约当消去法算法为:

1

,)

1,,1,()1,,1,(/,,2,1+=???

??++=-←≠++=←=n i i kj ik ij ij

kk kj kj a PRINTx n k k j a a a a j

i n k k j a a a n

k 五.实验过程:

1.编程: 用C 语言编出全主元高斯—约当消去法的源程序。 2. 开机, 打开C 语言编译程序,键入所编程序源代码. 3. 调试程序, 修改错误至能正确运行. 4. 运行程序并输出计算结果.

计算结果:MAT A-1 IS:

??????????0213

.01489.01064.00936.00553.00681.02851

.03957.00255.0.

六. 讨论:

高斯——约当消去法算法具有以下优点和缺点:

算法优点:不用换行,换列,不用回代,精度高。

算法缺点:循环语句比较难组织,已选过主元素所在行所在列的元素不能再被选作主元素,解向量的分量也不一定按次序排列。

附:程序源代码:

#include “stdlib.h”

#include “math.h”

#include “stdio.h”

int rinv(n,a)

int n;

double a[];

{int*is,*js,i,j,k,l,u,v;

double d ,p;

is=malloc(n*sizeof(int));

js=malloc(n*sizeof(int));

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

{d=0.0;

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

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

{l=i*n+j;p=fabs(a[l]);

if(p>d){d=p;is[k]=i; js[k]=j;}

}

if(d+1.0==1.0)

{free(is); free(is);print(“err**not inv\n”);

return(0);

}

if(is[k]!=k)

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

{u=k*n+j;v=is[k]*n+j;

p=a[u];a[u]=a[v];a[v]=p;

}

if(js[k]!=k)

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

{u=i*n+k;v=i*n+js[k];

p=a[u];a[u]=a[v];a[v]=p;

}

l=k*n+k;

a[l]=1.0/a[l];

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

if(j!=k)

{u=k*n+j; a[u]=a[u]*a[l];}

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

if(i!=k)

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

if(j!=k)

{u=i*n+j;

a[u]=a[u]-a[i*n+k]*a[k*n+j];

}

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

if(i!=k)

{u=i*n+k; a[u]=-a[u]*a[l];}

}

for(k=n-1;k>=0;k-)

{if(is[k]!=k)

for(i=0;j<=n-1;i++)

{u=i*n+k;v= i*n+is[k];

p=a[u];a[u]=a[v];a[v]=p;

}

}

free(is); free(is);

return(1);

}

#include “stdio.h

#include “rinv.c”

main()

{int i,j;

static double a[3][3]={{-3,8,5}, {2,-7,4},

{1,9,-6}};

double b[3][3];

for (i=0;i<=2;i++)

for (j=0;j<=2;j++)

b[i][j] =a[i][j];

i=rinv(3,a)

if(i!=0)

{printf(“MAT A IS:\n”);

for (i=0;i<=2;i++)

{for (j=0;j<=2;j++)

printf(“%5.4f”,b[i][j]);

printf(“\n”);

}

printf(“\n”);

printf(“MAT A-1 IS:\n”);

for (i=0;i<=2;i++)

{for (j=0;j<=2;j++)

printf(“%5.4f”,b[i][j]);

printf(“\n”);

}

printf(“\n”);

}

}

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

一.试验目的:练习线性方程组的迭代解法。

二.实验内容:. 分别用雅可比(Jacobi )迭代法和高斯—塞德尔

(Gauss —Seidel )迭代法求解下列线性方程组,且比较收敛速度,要求当01.021≤-+k k x x 是迭代终止。

1)1212323109102746

x x x x x x x -=??

-+-=??-+=?

2)??????

?????

?????????-=????????????????????????????????????????--------------6260504101001410100140

01100410010141001014654321x x x x x x .

三.实验仪器、语言:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。

四.实验方法: 雅可比(Jacobi )迭代法、高斯—塞德尔(Gauss —Seidel )

迭代法.

五.实验步骤:

1.编程: 根据所用算法及选用语言编出源程序 2. 开机, 打开所用语言系统输入所编源程序. 3. 调试程序, 修改错误直至能正确运行. 4. 运行程序并输出计算结果.

六.讨论: 对实验中存在的问题及解决的办法、实验结果等进行分析

讨论.

七.写出实验报告:实验报告要求及书写格式见附例.

附:实验报告之例

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

姓名 专业: 学号:

一.试验目的:练习线性方程组的迭代解法。

二.实验内容:. 分别用雅可比(Jacobi )迭代法和高斯—塞德尔

(Gauss —Seidel )迭代法求解下列线性方程组,且比较收敛速度,要求当01.021≤-+k k x x 是迭代终止。

1)1212323109102746

x x x x x x x -=??

-+-=??-+=?

2)??????

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

?-=????????????????????????????????????????--------------6260504101001410100140

01100410010141001014654321x x x x x x .

三.实验仪器、语言:PC 计算机, C 语言。

四.实验方法: 雅可比(Jacobi )迭代法、高斯—塞德尔(Gauss —Seidel )

迭代法.

1) 雅可比方法:

用迭代法解线性方程组b Ax =,设()ij a A =非奇异,且对角线元素

),2,1(0n i a ii =≠, 把A 分裂成三个矩阵之和A=L+D+U ,其中

??

?????

?

?????

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

?????????=-00

00,,00003223113123322111,21323121 n n n nn n n n n a a a a a a U a a a a D a a a a a a L

则雅可比迭代法的分量形式为:

∑≠=+=-=n

i

j j k j ij i ii k i n i x a b a x ,1)()

1(),,2,1()(1

雅可比迭代的矩阵形式为:

0)(0)(f x B x k k += 其中 b D f U L D B 1010),(--=+-=

2)高斯—塞德尔迭代法:

高斯—塞德尔迭代法的分量形式为:

()

∑∑+=-=++=--=n

i j k j ij i j k ij i ii k i n i x a x a b a x 1

)(111)1(),,2,1()(1 .

高斯—塞德尔迭代法的矩阵形式为:

1)(0)1(f x G x k k +=+, 其中 b L D f U L D G 1110)(,)(--+=+-=.

五.实验过程:

1.编程: 用C 语言编出追赶法的源程序。

2. 开机, 打开C 语言编译程序,键入所编程序源代码.

3. 编译、运行上述程序源代码,依提示输入方程组1)的系数矩阵及右端向量,记录运算结果。

4. 对于方程组2),将上述程序源代码中有注释的代码中的3改为6,再编译、运行,依提示输入方程组2)的系数矩阵及右端向量,记录运算结果。 计算结果:

1) The approximate solution by Jacobin Method is

??

??

?

?????=996760.0997570.0999190.0x . after 5 iterations.

The approximate solution by G-S Method is

??

??

?

?????=999939.0999847.0999830.0x . after 4 iterations.

2) The approximate solution by Jacobin Method is

??????

???

???????????=996011.1997180.0996011.1998006.0994359.1998006.0x .

after 12 iterations.

The approximate solution by G-S Method is

??????

???

???????????=999242.1998225.0997920.1998745.0997058.1996554.0x .

after 7 iterations.

六. 讨论:

由于高斯—塞德尔方法与雅可比法迭代阵不同,雅可比方法收敛并不能保证高斯—塞德尔方法收敛,反之也如此。但运算结果表明当二者均收敛时,高斯—塞德尔方法比雅可比方法收敛速度快。另一方面,高斯—塞德尔方法算出一个新的分量就把先一次的分量覆盖,只需一组工作单元,算法更加简单。

附:程序源代码:

#define N 3 /*依具体情况,3可改为相应方程组的阶数*/ #include 〈math.h 〉

void jacobi2(fioat m[N] [N], float f[N], float eps, long imax) double a[],b[],x[],eps; { int i, j, tail=0; long k;

float err, sum x[N], xk[N]; for(i=0;i

while (k<=imax) {err=0;

for(i=0;i

for (j=0;j<=N;j++)

if(j!=i) sum +=m[i] [j]*xk[j]; x[i]=(f[i]-sum)/m[i] [i]; err +=(x[i]-xk[i])*(x[i]-xk[i]); }

for(i=0;i

{printf(“The approximate solution by Jacoban method is \n”); for(i=0;i

if (!tail) printf(“\nMaximum number of iteration exceeded. \n”);

}

void gauss_siedel2(float m[N] [N], float f[N], float eps, long imax) { int i, j, tail=0;

long k;

float err, sum, xtmp, x[N];

for(i=0;i

k=1;

while (k<=imax)

{err=0;

for(i=0;i

{xtmp=x[i];

sum=0;

for (j=0;j<=N;j++)

if (j!=i) sum+=m[i] [j]*x[j];

x[i]=(f[i]-sum)/m[i] [i];

err+=(x[i]-xtmp)*(x[i]-xtmp);

}

if (sqrt (err)<=eps)

{printf(“The approximate solution by G-S method is\n”);

for(i=0;i

printf(“after %1d iterations. \n”, k);

tail=1;

break;

}

k++;

}

if (!tail) printf(“\nMaximum number of iteration exceeded. \n”); }

main()

{int I, j;

float a[N] [N], b[N], trans;

printf(“Please input the coefficiency matrix. \n”);

for(i=0;i

for (j=0;j<=N;j++)

{scanf(“%f”, &trans);

a[i] [j]=trans;

}

printf(“Please input the ordinary vector. \n”);

for(i=0;i

printf(“\n”);

jacobi2(a,b,0.01,100000);

guass_siedel2(a,b,0.01,100000);

}

实验五 矩阵特征值与特征向量的计算

一.试验目的:练习用数值方法计算矩阵特征值与特征向量。

二.实验内容:计算矩阵

??

??

?

?????=0.225.05.025.00.10.15.00.10.1A

的全部特征根与相应的特征向量。

三.实验仪器、语言:PC 计算机,FORTRAN 、C 、C ++、VB 任选一种。

四.实验方法: 雅可比(Jacobi )过关法。

五.实验步骤:

1.编程: 根据所用算法及选用语言编出源程序 2. 开机, 打开所用语言系统输入所编源程序. 3. 调试程序, 修改错误直至能正确运行. 4. 运行程序并输出计算结果.

六.讨论: 对实验中存在的问题及解决的办法、实验结果等进行分析

讨论.

七.写出实验报告:实验报告要求及书写格式见附例.

附:实验报告之例

实验五 矩阵特征值与特征向量的计算

姓名 专业: 学号:

一.试验目的:练习用数值方法计算矩阵特征值与特征向量。 二.实验内容:计算矩阵

??

??

?

?????=0.225.05.025.00.10.15.00.10.1A

的全部特征根与相应的特征向量。

三.实验仪器、语言:PC 计算机,C 语言。 四.实验方法: 雅可比(Jacobi )过关法。

方法简述:先计算A的非主对角线元素的平方和S(A),并记

2

)(v A S = , ∑∑=-==n e e k ek a v 21

1

2

202

将n

v v 0

1=

作为第一次过关数,在非主对角线元素中按行),,,,,,,(,122311312n n n n a a a a a a -

扫描,只要1v a ij ≥,就把ij a 作为主元素进行平面旋转变换,若1v a ij <,就让ij a 过关.一遍扫描结束后继续进行第二遍扫描(原因是原来满足1v a ij <的过关元素,经过其他变换还有可能过不了关),直到扫到某一遍时,全都过关,再设第二道关口,n

v v 1

2=

,重复前面的过程,又再设 ,,43v v 等关口,直到0)(v n

v t ρ

≤为止,其中ρ是精度要求. 五.实验过程:

1.编程: 用C 语言编出雅可比(Jacobi )过关法的源程序。 2. 开机, 打开C 语言编译程序,键入所编程序源代码. 3. 调试程序, 修改错误至能正确运行. 4. 运行程序并输出计算结果. 计算结果:

T x )7103.0,4615.0,5315.0(,5365.211==对应的特征向量为λ; T x )6976.0,5621.0,4443.0(,4801.122-==对应的特征向量为λ; T x )0937.0,6863.0,7212.0(,0166.033--=-=对应的特征向量为λ.

六:讨论:

雅可比过关法是雅可比方法的改进,是为消除雅可比方法因要

选主元素而花费很多机器时间而设计的,从上述计算可看出雅可比过关法确有此优点。

附:程序源代码:

新建文件"jcbj.c"如下:

#include”math.h”

void jcbj(n,a,v,eps)

int n;

double a[],v[],eps;

{int i, j,p,q, u,w,t,s;

double ff,fm,cn,sn,omega,x,y,d;

for(i=0;i

{v[i*n+i]=1.0;

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

if(i!=j)v[i*n+j]=0.0;

}

ff=0.0;

for(i=0;i

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

{d=a[i*n+j];ff=ff+d*d;}

ff=sqrt(2.0*ff);

loop0:

ff=ff(1.0*n);

loop1:

for(i=1;i

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

{ d=fabs(a[i*n+j]);

if(d>ff)

{p=i; q=j;

goto loop;

}

}

if(ff

goto loop0:

loop:u=p*n+1;w=p*n+p;s=q*n+q;x=-a[u];y=(a[s]-a[w])/2.0;omega=x/sqrt(x*y+y* y);

if(y<0.0)omega=-omega;

sn=1.0+sqrt(1.0+-omega*omega);

sn=omega/sqrt(2.0*sn);

fm=a[w];

a[w]=fm*cn*cn+a[s]*sn*sn+a[u]*omega;

a[s]=fm*sn*sn+a[s]*cn*cn-a[u]*omega;

a[u]=0.0;a[t]=0.0;

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

if((j!=p)&&(j!=q))

{u=p*n+j;w=q*n+j;

fm=a[u];

a[u]=fm*cn+a[w]*sn;

a[w]=-fm*sn+sn+a[w]*cn;

}

for(i=0;i

if((i!=p)&&(i!=q))

{u=i*n+p;w=i*n+q;

数值计算实验课题目

数值实验课试题 本次数值实验课结课作业,请按题目要求内容写一篇文章。按题目要求 人数自由组合,每组所选题目不得相同(有特别注明的题目除外)。试题如下: 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 姓名:万轩 实验二插值法

数值计算方法I上机实验考试题

数值计算方法I 上机实验考试题(两题任选一题) 1.小型火箭初始质量为900千克,其中包括600千克燃料。火箭竖直向上发射时燃料以15千克/秒的速率燃烧掉,由此产生30000牛顿的恒定推力.当燃料用尽时引擎关闭。设火箭上升的整个过程中,空气阻力与速度平方成正比,比例系数为0.4(千克/米).重力加速度取9.8米/秒2. A. 建立火箭升空过程的数学模型(微分方程); B. 求引擎关闭瞬间火箭的高度、速度、加速度,及火箭到达最高点的时间和高度. 2.小型火箭初始质量为1200千克,其中包括900千克燃料。火箭竖直向上发射时燃料以15千克/秒的速率燃烧掉,由此产生40000牛顿的恒定推力.当燃料用尽时引擎关闭。设火箭上升的整个过程中,空气阻力与速度平方成正比,比例系数记作k ,火箭升空过程的数学模型为 0)0(,0,01222==≤≤-+?? ? ??-==t dt dx x t t mg T dt dx k dt x d m 其中)(t x 为火箭在时刻t 的高度,m =1200-15t 为火箭在时刻t 的质量,T (=30000牛顿)为推力,g (=9.8米/秒2)为重力加速度, t 1 (=900/15=60秒)为引擎关闭时刻. 今测得一组数据如下(t ~时间(秒),x ~高度(米),v ~速度(米/秒)): 现有两种估计比例系数k 的方法: 1.用每一个数据(t,x,v )计算一个k 的估计值(共11个),再用它们来估计k 。 2.用这组数据拟合一个k . 请你分别用这两种方法给出k 的估计值,对方法进行评价,并且回答,能否认为空气阻力系数k=0.5(说明理由).

现代数值计算方法习题答

现代数值计算方法习题答案 习 题 一 1、解:根据绝对误差限不超过末位数的半个单位,相对误差限为绝对误差限除以 有效数字本身,有效数字的位数根据有效数字的定义来求.因此 49×10 -2 :E = 0.005; r E = 0.0102; 2位有效数字. 0.0490 :E = 0.00005;r E = 0.00102; 3位有效数字. 490.00 :E = 0.005; r E = 0.0000102;5位有效数字. 2、解: 7 22 = 3.1428 …… , π = 3.1415 …… , 取它们的相同部分3.14,故有3位有效数字. E = 3.1428 - 3.1415 = 0.0013 ;r E = 14 .3E = 14 .30013.0 = 0.00041. 3、解:101的近似值的首位非0数字1α = 1,因此有 |)(*x E r |) 1(10 1 21--??=n < = 2 1× 10 -4 , 解之得n > = 5,所以 n = 5 . 4、证:) ()(1)()(1)(* 1 1* * 1 1 * * x x x n x E x n x E n n n -= ≈ -- )(11)()(1) ()(* * * * * 1 1 ** * * x E n x x x n x x x x n x x E x E r n n n n n r = -= -≈ = - 5、解:(1)因为=20 4.4721…… , 又=)(*x E |*x x -| = |47.420-| = 0.0021 < 0.01, 所以 =*x 4.47. (2)20的近似值的首位非0数字1α = 4,因此有 |)(*x E r |) 1(10 4 21--??= n < = 0.01 , 解之得n > = 3 .所以,=*x 4.47. 6、解:设正方形的边长为x ,则其面积为2x y =,由题设知x 的近似值为*x = 10 cm . 记*y 为y 的近似值,则

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

曲线拟合的数值计算方法实验 【摘要】实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。曲线拟合(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使得拟合模型与实际观测值在

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

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

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

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

《数值计算方法》上机实验报告华北电力大学 实验名称数值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

现代数值分析

研硕16《化工数值方法及Matlab应用》试题 班级姓名成绩 1.(15分)数值计算方法的主要研究对象有哪些?其常用基本算法主要包括哪三个方面?举例说明Matlab在解决化工数值计算问题方面有什么样实用价值?答:(1)数值计算方法的主要研究对象为非线性方程求根,插值法、曲线拟合、数值积分、常微分方程(组)、初值问题求解、线性和非线性方程组求解。(2)基本算法包括①离散化方法:用差商代替导数、差分代替微分等,将连续的数学问题转化为离散问题。②逼近方法:用简单函数的值近似代替求解困难或形式未知的复杂函数的值。③迭代法:用一个固定公式反复计算,对较为粗糙的根的近似值进行加工直到满足精度要求的方法。 (3)Matlab在解决化工数值计算问题的实用价值有:数值计算和符号计算功能;图形功能;MATLAB语言;功能性和学科性工具箱。 2.(10分)数值计算中的“曲线拟合”,一般有哪些方法?请至少指出四种,并简述各自的基本特点。 答:(1)拉格朗日插值:,优点在于不要求数据点事等间隔的,缺点是数据点不易过多,当数据比较多时,差值函数有偏离原函数的风险; (2)牛顿插值法:它不仅克服了“增加一个节点时整个计算工作必须重新开始”的缺点,而且可以节省乘、除法运算次数。同时,在牛顿插值多项式中用到的差分与差商等概念,又与数值计算的其他方面有着密切的关系。

(3)牛顿迭代法:牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。 (4)区间二分法:优点:算法简单,容易理解,且总是收敛的。缺点:收敛速度太慢,浪费时间,二分法不能求复根跟偶数重根。 (5)最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。 3. (15分)在298K 下,化学反应 2OF 2=O 2+2F 2 的平衡常数为0.410 atm ,如在298K 下将OF 2 通入容器,当t=0 时为1 atm ,问最后总压是多少?取计算精度为10-3 。 解:首先写出求解问题的数学方程式。 假设气体是理想气体,由反应的化学计量式可知, 22222F O OF += 设氧的分压为p ,平衡时有p 21- p p 2。 平衡时,有()410.02142 3=-p p 整理得 0410.064.1640.1423=-+-p p p 函数关系为 ()0410.064.1640.1423=-+-=p p p p f

数值计算实验报告

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

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

数值计算方法实验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

MATLAB与数值分析实验报告一

MATLAB与数值分析实验报告 报告人:秦旸照 学号: 2015020901033 时间: 2016.4.8 电子科技大学电子工程学院

一、实验目的 实验一:MATLAB软件平台与程序设计实验 二、实验原理 1.熟练掌握矩阵的生成、加、减、乘、除、转置、行列式、逆、范数等运算操作。(用.m文件和Matlab函数编写一个对给定矩阵进行运算操作的程序) 2. 熟练掌握算术符号操作和基本运算操作,包括矩阵合并、向量合并、符号转换、展开符号表达式、符号因式分解、符号表达式的化简、代数方程的符号解析解、特征多项式、函数的反函数、函数计算器、微积分、常微分方程的符号解、符号函数的画图等。(用.m文件编写进行符号因式分解和函数求反的程序) 3. 掌握Matlab函数的编写规范。 4.掌握Matlab常用的绘图处理操作,包括:基本平面图、图形注释命令、三维曲线和面的填充、三维等高线等。(用.m文件编写在一个图形窗口上绘制正弦和余弦函数的图形,并给出充分的图形注释) 5. 熟练操作MATLAB软件平台,能利用M文件完成MATLAB的程序设计。 三、实验方案 1. 编程实现以下数列的图像,用户能输入不同的初始值以及系数。并以 x,y为坐标显示图像 x(n+1) = a*x(n)-b*(y(n)-x(n)^2); y(n+1) = b*x(n)+a*(y(n)-x(n)^2) 2. 编程实现奥运5环图,允许用户输入环的直径。 3. 实现对输入任意长度向量元素的冒泡排序的升序排列。 不允许使用sort函数。 四、实验结果 1. 编程实现以下数列的图像,用户能输入不同的初始值以及系数。并以 x,y为坐标显示图像

现代数值分析复习题

复习题(一) 一、填空题: 1、求方程0.5x2 101x 1 0的根,要求结果至少具有6位有效数字。已知 V10203 101.0099,贝卩两个根为x1 _____________________________ , X2 ________________________________ .(要有计算过程和结果) 4 1 0 A A 1 4 1 2、0 1 4,则A的LU分解为。 1 2 A 3、 3 5,贝卩(A) ____________ ,A __________ . 4、已知f(1)「Q f(2)「2,f(3) =3,则用抛物线(辛卜生)公式计算求 3 得1 f(x)dx -------------------- ,用三点式求得f (1) ________________ . 5、f(1) 1,f(2) 2,f(3) 1,则过这三点的二次插值多项式中x2的系数 为_____ ,拉格朗日插值多项式为 _________________________ . 二、单项选择题: 1、Jacobi迭代法解方程组Ax b的必要条件是( ). A. A的各阶顺序主子式不为零 B. (A) 1 C a ii 0,i 1,2, ,n D|| A 1 2、设f(x) 3x99 5x 7,均差f[1,2,22, ,299]=(). D. 3

4、三点的高斯求积公式的代数精度为 ( ). A.3 B. -3 C. 5 D.0 2 2 3 A 0 5 1 3、设 0 0 7 ,则 (A )为( ). A. 2 B. 5 C. 7

分别用拉格朗日插值法和牛顿插值法求 f (x )的三次插值多项式P 3(x ),并 求f (2)的近似值(保留四位小数). 4、 取步长h 0.2,用预估-校正法解常微分方程初值问题 y 2x 3y y (0) 1 (0 x 1) 5、 已知 A. 2 B.5 C. 3 D. 4 5、幕法的收敛速度与特征值的分布 A.有关 B.不一定 C. 无关 三、计算题: 1、用高斯-塞德尔方法解方程组 4X ! 2X 2 X 3 11 X 1 4X 2 2X 3 18 2X ! X 2 5X 3 22 (°) /c c c\T ,取 x (°,°,°),迭 四次(要求按五位有效数字计算 ). 1 2、求A 、B 使求积公式 1 f (X )dX A[f( 1) f (1)] 1 B [f (2)f (2)] 的代数精 度尽量高,并求其代数精度;利用此公式求 I 21dx 1 x (保留四位小 数)。 3、已知

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

实验报告 一、实验目的 二、实验内容 三、实验环境 四.实验方法 五、实验过程 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 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;

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

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和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、?? ??? ?????----=410141014A ,则A 的LU 分解为 A ??? ?????????=????????????。 答案: ?? ????????--??????????--=1556141501 4115401411A 2、已知3.1)3(,2.1)2(,0.1)1(===f f f ,则用辛普生(辛卜生)公式计算求得 ?≈3 1 _________ )(dx x f ,用三点式求得≈')1(f 。 答案:2.367,0.25 3、1)3(,2)2(,1)1(==-=f f f ,则过这三点的二次插值多项式中2 x 的系数为 , 拉格朗日插值多项式为 。 答案:-1, )2)(1(21 )3)(1(2)3)(2(21)(2--------= x x x x x x x L 4、近似值*0.231x =关于真值229.0=x 有( 2 )位有效数字; 5、设)(x f 可微,求方程)(x f x =的牛顿迭代格式是( ); 答案 )(1)(1n n n n n x f x f x x x '--- =+ 6、对1)(3 ++=x x x f ,差商=]3,2,1,0[f ( 1 ),=]4,3,2,1,0[f ( 0 ); 7、计算方法主要研究( 截断 )误差和( 舍入 )误差; 8、用二分法求非线性方程 f (x )=0在区间(a ,b )内的根时,二分n 次后的误差限为 ( 1 2+-n a b ); 9、求解一阶常微分方程初值问题y '= f (x ,y ),y (x 0)=y 0的改进的欧拉公式为 ( )] ,(),([2111+++++=n n n n n n y x f y x f h y y );

数值分析实验报告总结

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

如果 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.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 =

现代数值计算方法

吉林大学研究生公共数学课程 教学大纲 课程编号: 课程名称:现代数值计算方法 课程英文名称:Modern numerical method 学时/学分:64/3(硕士)/32/2(博士) 课程类别:研究生公共课程 课程性质:必修课 适用专业:理、工、经、管等专业 开课学期:第Ⅰ或第Ⅱ学期 考核方式:考试(闭卷) 执笔人:李永海 制定日期:2011年5月

吉林大学研究生公共数学课程教学大纲 课程编号: 课程名称:现代数值计算方法 课程英文名称:Modern numerical method 学时/学分:64/3(硕士)/32/2(博士) 课程类别:研究生教育课程 课程性质:必修课 适用专业:理、工、经、管等专业 开课学期:第Ⅰ或第Ⅱ学期 考核方式:考试(闭卷) 一、本课程的性质、目的和任务 本课程属于非数学类研究生数学公共基础课程之一,数值计算方法作为一种基本的数学工具,在数学学科与其他科学技术领域诸如力学、电磁学、化学、生物、系统工程等学科都有广泛应用。电子计算机及计算技术的发展也为数值计算方法的应用开辟了更广阔的前景。因此,学习和掌握现代数值计算方法,对于将来从事工程技术工作的工科研究生来说是必不可少的。通过该门课程的学习,期望学生能深刻地理解现代数值计算方法的基本知识和数学思想,掌握有关的计算方法及技巧,提高学生的数学素质,提高科研能力,掌握现代数值计算方法在物理、电子、化学、生物、工程等领域的许多应用。 二、本课程教学基本要求 1. 线性代数方程组直接法 理解线性代数方程组直接法求解算法原理,了解算法收敛性结果;理解算法应用条件;掌握用软件实现一般线性代数方程组直接法的求解步骤。 2. 线性代数方程组迭代法 理解线性代数方程组迭代法求解算法原理,了解算法收敛性结果;理解算法应用条件;掌握用软件实现一般线性代数方程组迭代法的求解步骤。 3. 矩阵特征值与特征向量计算 理解乘幂法和反幂法算法原理,了解实对称矩阵的Jacobi方法;理解算法应用条件;掌握用软件实现一般矩阵特征值与特征向量计算。 4. 非线性方程(组)求根 理解二分法和牛顿法原理,了解解非线性方程组的牛顿法和拟牛顿法;理解算法应用条件;掌握用软件实现非线性方程(组)求根计算。 5. 函数插值 理解一般函数插值公式原理,了解三次样条插值;理解算法应用条件;掌握用软件实现函数插值计算。 6. 数值积分

文本预览