矩阵与数值分析上机实验报告

矩阵与数值分析上机实验报告
矩阵与数值分析上机实验报告

大连理工大学

矩阵与数值分析上机实验报告

任课教师:孟兆良

教学班号: 06 院系:电信计算机应用

学生姓名:邓会杰

学生学号: 21306151

目录

实验一设

6

2

2

10

1

N

N

j

S

j

=

=

-

∑,分别编制从小到大和从大到小的顺序程序分别计算 (3)

1.程序代码 (4)

2.实验结果 (4)

3.实验分析 (4)

实验二解线性方程组,分别利用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组5(一)用Jacobi迭代法解线性方程组 (5)

1.程序代码 (5)

2.实验结果 (9)

3.实验分析 (9)

(二)用Gauss-Seidel迭代法解线性方程组 (10)

1.程序代码 (10)

2.实验结果 (14)

3.实验分析 (14)

(三)高斯列主元消去法求方程组 (14)

1.程序代码 (14)

2.实验结果 (17)

3.实验分析 (17)

(四)QR方法方程组 (17)

1.程序代码 (17)

2.实验结果 (21)

3.实验分析 (22)

实验三非线性方程的迭代解法 (22)

(一)求方程()222sin ln160

x

f x e x x x

=++--=的根 (22)

1.程序代码 (22)

2.实验结果 (23)

3.实验分析 ...................................................................................................................... 23 (二) 利用Newton 迭代法求多项式 ............................................................................ 23 1.程序代码 ...................................................................................................................... 24 2.实验结果 ...................................................................................................................... 25 3.实验分析 ...................................................................................................................... 25 实验四 数值积分 ................................................................................................................... 25 (一)基于高斯-勒让德积分 ............................................................................................ 25 1.程序代码 ...................................................................................................................... 25 2.输出结果 ...................................................................................................................... 30 3.实验分析 ...................................................................................................................... 30 实验五 插值与逼近 ............................................................................................................... 31 一 拉格朗日插值 ............................................................................................................... 31 1. 程序代码 .................................................................................................................. 31 2.输出结果 ...................................................................................................................... 33 3.实验分析 ...................................................................................................................... 35 二 切比雪夫插值节点 ....................................................................................................... 35 1.程序代码 ...................................................................................................................... 35 2.输出结果 ...................................................................................................................... 38 3.实验分析 ...................................................................................................................... 39 三 数据拟合的最小二乘法 ............................................................................................... 39 1. 程序代码 .................................................................................................................. 39 2.实验结果 ...................................................................................................................... 43 3.实验分析 . (44)

实验一 设622101

N

N

j S j ==-∑

,分别编制从小到大和从

大到小的顺序程序分别计算

100001000000,S S 并指出两种方法计算结果的有效位数。

1.程序代码

从小到大(从大到小)顺序求解

#include "stdio.h"

#include "math.h"

#define N 10000 //S1000000时#define N 1000000

void main()

{

float j;

float Sn=0.0;//double Sn=0.0

for(j=2; j<=N; j++) //从大到小的顺序时for(j=N;j>=2;j--)

{

Sn=Sn+1000000.0/(j*j-1);

}

printf("Sn=%f",Sn);

}

2.实验结果

Sn为double类型时(精度16位):

从小到大输出结果是S10000=749900.004999

S1000000=749999.000001

从大到小输出结果是S10000=749900.005000

S1000000=749999.000001

Sn为float类型时(精度为7位):

从小到大输出结果是S10000=749849.13500

S1000000=749849.125001

从大到小输出结果是S10000=749899.989583

S1000000=749998.989583

3.实验分析

1)当使用精度较高的数据类型计算时,从大到小与从小到大计算没有太大区别

2)当使用精度较低时,计算的先后顺序对结果影响很大,当N=10000时,两个计算结果差为50.854538;当N=1000000时,两个计算结果差为149.874582.

3)造成是因为从小到大计算过程中,大的数加小的数时,把小数的舍入结果为0,产生了大数吃小数的现象。舍入误差较大。而从大到小计算过程,先安排小的数参加运算,获得了较高的精度。

4)两种运算的精度分别是:

以double 数据类型从大到小的计算结果作为精确值,分别计算float 类型的有效位数 从小到大计算:S10000的有效位数为:3位

S1000000有效位数是:3位

从大到小计算:S10000的有效数位为:7位

S1000000有效位数是:7位

实验二 解线性方程组,分别利用Jacobi 迭代法和Gauss-Seidel 迭代法求解线性方程组

Ax b =,其中常向量为()2

1n -维随机生成的列向量,系数矩阵A 具有如下形式

1111111122n n n n n n n n T I I I A I I T I --------+-?? ?

- ?= ?- ?

-+?

? , 其中1

211112n T --??

?

- ?= ?- ?

-?

? 为1n -阶矩阵,1n I -为1n -阶单位矩阵,

迭代法计算停止的条件为:1012

10k k

x x -+-<,给出10,100,1000n =时的不同迭代步数.

(一)用Jacobi 迭代法解线性方程组 1.程序代码

#include "stdafx.h"

#include "stdio.h"

#include

#include "math.h"

#include "time.h"

#include "stdlib.h"

//using namespace std;

#define N 20

void main()

{

double A[N*N][N*N]={0};

double B[N*N]={0};

double X1[N*N]={0};

double X2[N*N]={0};

double temp=0.0;

double maxErr=0.0;

double err;

bool flag=1;

int i;

int j;

//构造矩阵A

for(i=0;i

{

for (j=i;j

{

A[j][j]=4;

if (j

{

A[j+1][j]=-1;

A[j][j+1]=-1;

}

if(j+N

{

A[j+N][j]=-1;

A[j][j+N]=-1;

}

}

}

//构造常数项B矩阵

for(i=0;i

{

B[i]=1+(int)(10.0*rand()/(RAND_MAX+1.0)); //0~10之间的随机数printf("%f\n",B[i]);

}

//构造迭代常数矩阵B

for(i=0;i

{

B[i]=B[i]/A[i][i];

}

//构造迭代矩阵A

for(i=0;i

{

for (j=i;j

{

if (j

{

A[j+1][j]=-A[j+1][j]/A[j][j];

A[j][j+1]=-A[j][j+1]/A[j][j];

}

if(j+N

{

A[j+N][j]=-A[j+N][j]/A[j][j];

A[j][j+N]=-A[j][j+N]/A[j][j];

}

A[j][j]=0;

}

}

//计算

int count=0;//记录迭代次数

while(true)

{

count++;

//迭代X的值,如果flag为1,则把结果写入X2中;如果flag为0,把结果写入X1中

if(flag==1)

{

flag=0;//flag=0表示结果写入X2

for(i=0;i

{

temp=0;

for(j=0;j

{

temp+=A[i][j]*X1[j];

}

X2[i]=temp+B[i];

}

}

else

{

flag=1;//表明结果写入X1中

for(i=0;i

{

temp=0;

for(j=0;j

{

temp+=A[i][j]*X2[j];

}

X1[i]=temp+B[i];

}

}

//计算误差,判断循环结束的条件

for(i=0;i

{

maxErr=0;

err=fabs(X1[i]*X1[i]-X2[i]*X2[i]);

if(err>maxErr)

maxErr=err;

}

if(maxErr<0.0000000001)

{

printf("循环了%d次\n",count);

break;

}

printf("循环了%d次\n",count);

}

//输出线性方程组的解

if(flag==0)

{

for(i=0;i

printf("%f,",X2[i]);

}

else

{

for(i=0;i

printf("%f,",X1[i]);

}

system("PAUSE");

}

2.实验结果

N=10时,迭代次数为582

N=15时,迭代次数为 1208

N=20时,迭代次数为 2033

N=30时,迭代次数为 4317次

3.实验分析

用雅可比迭代法求解线性方程组,随着矩阵规模的增大,迭代次数和运行时间都增长迅速。

(二)用Gauss-Seidel迭代法解线性方程组1.程序代码

#include "stdafx.h"

#include "stdio.h"

#include

#include "math.h"

#include "time.h"

#include "stdlib.h"

//using namespace std;

#define N 30

void main()

{

double A[N*N][N*N]={0};

double B[N*N]={0};

double X1[N*N]={0};

double X2[N*N]={0};

double temp1=0.0;

double temp2=0.0;

double maxErr=0.0;

double err;

bool flag=1;

int i;

int j;

int k;

//构造矩阵A

for(i=0;i

{

for (j=i;j

{

A[j][j]=4;

if (j

{

A[j+1][j]=-1;

A[j][j+1]=-1;

}

if(j+N

{

A[j+N][j]=-1;

A[j][j+N]=-1;

}

}

}

//构造常数项B矩阵

for(i=0;i

{

B[i]=1+(int)(10.0*rand()/(RAND_MAX+1.0)); //0~10之间的随机数printf("%f\n",B[i]);

}

//构造迭代常数矩阵B

for(i=0;i

{

B[i]=B[i]/A[i][i];

}

//构造迭代矩阵A

for(i=0;i

{

for (j=i;j

{

if (j

{

A[j+1][j]=-A[j+1][j]/A[j][j];

A[j][j+1]=-A[j][j+1]/A[j][j];

}

if(j+N

{

A[j+N][j]=-A[j+N][j]/A[j][j];

A[j][j+N]=-A[j][j+N]/A[j][j];

}

A[j][j]=0;

}

}

//计算

int count=0;//记录迭代次数

while(true)

{

count++;

if(flag==1)//flag==1时用X1中的值进行迭代,把新计算的值放入X2中

{

for(i=0;i

{

temp1=0.0;

temp2=0.0;

for(j=i;j

{

temp1+=A[i][j]*X1[j];//旧值

}

for(k=0;k

{

temp2+=A[i][k]*X2[k];//新值

}

X2[i]=temp1+temp2+B[i];

}

flag=0;

}

else if(flag==0)//flag==2时用X2中的值进行迭代,把新计算的值放入X1中。

{

for(i=0;i

{

temp1=0.0;

temp2=0.0;

for(j=i;j

{

temp1+=A[i][j]*X2[j];//旧值

}

for(k=0;k

{

temp2+=A[i][k]*X1[k];//新值

}

X1[i]=temp1+temp2+B[i];

}

flag=1;

}

//计算误差,判断循环结束的条件

for(i=0;i

{

maxErr=0;

err=fabs(X1[i]*X1[i]-X2[i]*X2[i]);

if(err>maxErr)

maxErr=err;

}

if(maxErr<0.0000000001)

{

printf("循环了%d次\n",count);

break;

}

printf("循环了%d次\n",count);

}

//输出线性方程组的解

if(flag==0)

{

for(i=0;i

printf("%f,",X2[i]);

}

else

{

for(i=0;i

printf("%f,",X1[i]);

}

system("PAUSE");

}

2.实验结果

N=10时,迭代次数为295次 N=15时,迭代次数为 661次 N=20时,迭代次数为 1040次 N=30时,迭代次数为 2213次

3.实验分析

1)用高斯消去解线性方程组,随着矩阵规模的增大,迭代次数也迅速增加。

2)高斯方法与雅可比相比,在相同矩阵,雅可比迭代次数更多,雅可比迭代次数大约是高斯迭代次数的一倍。

二 用Gauss 列主元消去法、QR 方法求解如下方程

组:

12341211025034.

179212812

18x x x x -?????? ?

? ? ? ? ?

= ? ? ? ?

? ?---????

??

(三)高斯列主元消去法求方程组 1.程序代码

#include "stdio.h" #include #include "math.h" #include "time.h" #include "stdlib.h"

void main()

{

float A[4][5]={1,2,-1,1,0,2,5,0,3,4,1,7,9,2,12,8,-1,-2,1,-8};

float X[4]={0};

float max=0;

int maxindex=0;//记录最大值元素的行下标。

int i;

int j;

int k;

float temp;

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

{

//扫描第i列最大的元素的行号,

max=0;

maxindex=i;

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

{

if(fabs(A[j][i])>fabs(max))

{

max=A[j][i];

maxindex=j;

}

}

//找到第i列最大元素的行号,与第i行交换位置;

if(maxindex!=i)

{

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

{

temp=A[i][j];

A[i][j]=A[maxindex][j];

A[maxindex][j]=temp;

}

}

//高斯消去

for(j=i+1;j<4;j++)

{

temp=A[j][i];//暂存

for(k=i;k<5;k++)

{

A[j][k]=-A[i][k]/A[i][i]*temp+A[j][k];

}

}

printf("第%d迭代结果:\n",i+1);

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

{

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

{

printf("%f,",A[k][j]);

}

printf("\n");

}

printf("\n");

}

//把结果写入X矩阵中

for(i=3;i>=0;i--)

{

float sum=0.0;

for(j=i+1;j<4;j++)

{

sum+=A[i][j]*X[j];

}

X[i]=(A[i][4]-sum)/A[i][i];

}

//输出X[]

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

{

printf("X[%d]=%f\n",i,X[i]);

}

system("PAUSE");

}

2.实验结果

3.实验分析

高斯列主元消去法,避免了小主元做除数,在Gauss消去法中增加选主元的过程,在第K步消元时,首先在第K列主对角元以下元素中挑选绝对值最大的数,并通过初等行变换,使得该数位于主对角上,让后继续消元。

(四)QR方法方程组

1.程序代码

#include "stdio.h"

#include "math.h"

#define N 4

void main()

{

int i;

int j;

int k;

int l;

double X[N];

double sum=0.0;

double sumW=0.0;

double A[N][N]={1,2,-1,1,2,5,0,3,1,7,9,2,8,-1,-2,1};

double B[N]={0,4,12,-8};

double tempB[N]={0};

double W[N]={0};

double temp1Q[N][N]={0};

double temp2Q[N][N]={0};

for(i=0;i

{

//计算W列向量

sum=0;

for(k=i;k

{

sum+=A[k][i]*A[k][i];//第i列中从第k个元素到第N-1个元素的内积,}

for(j=i;j

{

if(i==j)

W[j]=A[j][i]-sqrt(sum);

else

{

W[j]=A[j][i];

}

printf("W[%d]=%f\n",j,W[j]);

}

//计算W的内积

sumW=0;

for(j=i;j

{

sumW+=W[j]*W[j];

}

//初始化矩阵

for(j=0;j

{

for(k=0;k

{

temp1Q[j][k]=0;

temp2Q[j][k]=0;

}

tempB[j]=0;

}

//计算temp1Q矩阵

for(j=i;j

{

for(k=i;k

{

if(j==k)

{

temp1Q[j][k]=1-2.0/sumW*W[j]*W[k];

}

else

{

temp1Q[j][k]=-2.0/sumW*W[j]*W[k];

}

}

}

//把temp1Q[][]*A[][] 暂时存放在tempQ2中;temp1Q[][]*B[]暂存到tempB[]中

for(j=i;j

{

for(k=i;k

{

for(l=i;l

{

temp2Q[j][k]+=temp1Q[j][l]*A[l][k];

}

tempB[j]+=temp1Q[j][k]*B[k];

}

}

//把temp2Q放入A中tempB放入B中

for(j=i;j

{

for(k=i;k

{

A[j][k]=temp2Q[j][k];

}

B[j]=tempB[j];

}

//输出A

printf("A:\n");

for(j=0;j

{

for(k=0;k

{

printf("%f,",A[j][k]);

}

printf("%f\n",B[j]);

}

}

//解出X[]

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

数值分析上机题 第一章 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 姓名:万轩 实验二插值法

数值分析实验报告176453

实验报告 插值法 数学实验室 数值逼近 算法设计 级 ____________________________ 号 ____________________________ 名 _____________________________ 实验项目名称 实验室 所属课程名称 实验类型 实验日期

实验概述: 【实验目的及要求】 本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插 多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的 优劣。 本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并 去实现。 【实验原理】 《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值, 拉格朗日 插值的相应算法和相关性质。 【实验环境】(使用的软硬件) 软件: MATLAB 2012a 硬件: 电脑型号:联想 Lenovo 昭阳E46A 笔记本电脑 操作系统: Win dows 8专业版 处理器:In tel ( R Core ( TM i3 CPU M 350 @2.27GHz 2.27GHz 实验内容: 【实验方案设计】 第一步,将书上关于三种插值方法的内容转化成程序语言,用 MATLA B 现; 第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。 【实验过程】(实验步骤、记录、数据、分析) 实验的主要步骤是:首先分析问题,根据分析设计 MATLA 程序,利用程序算出 问题答案,分析所得答案结果,再得出最后结论。 实验一: 已知函数在下列各点的值为 试用4次牛顿插值多项式 P 4( x )及三次样条函数 S ( x )(自然边界条件)对数据进行插值。 用图给出{( X i , y i ), X i =0.2+0.08i , i=0 , 1, 11, 10 } , P 4 ( x )及 S ( x )。 值方法:牛顿 在MATLAB 件中

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 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);

数值分析实验报告模板

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

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

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 的帮助。

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

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和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.通过上机计算,了解舍入误差所引起的数值不稳定性。 二.实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三.实验内容 对20,,2,1,0 =n ,计算定积分 ?+=10 5dx x x y n n . 算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n , 取 ?≈-=+=1 00182322.05ln 6ln 51dx x y . 算法2:利用递推公式 n n y n y 51511-= - 1,,19,20 =n . 注意到 ???=≤+≤=10 10202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果 程序一: t=log(6)-log(5);

n=1; y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1; end y y =0.0884 y =0.0581 y =0.0431 y =0.0346 y =0.0271 y =0.0313 y =-0.0134 y =0.1920 y =-0.8487 y =4.3436 y =-21.6268 y =108.2176 y =-541.0110 y =2.7051e+003 y =-1.3526e+004 y =6.7628e+004 y =-3.3814e+005 y =1.6907e+006 y =-8.4535e+006 y =4.2267e+007 程序2: y=zeros(20,1); n=1; y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end 运行结果:y = 0.0884 0.0580 0.0431 0.0343 0.0285 0.0212 0.0188 0.0169

数值分析上机题参考答案.docx

如有帮助欢迎下载支持 数值分析上机题 姓名:陈作添 学号: 040816 习题 1 20.(上机题)舍入误差与有效数 N 1 1 3 1 1 设 S N ,其精确值为 。 2 2 2 N N 1 j 2 j 1 (1)编制按从大到小的顺序 1 1 1 ,计算 S 的通用程序。 S N 1 32 1 N 2 1 N 2 2 (2)编制按从小到大的顺序 1 1 1 ,计算 S 的通用程序。 S N 1 (N 1)2 1 22 1 N N 2 (3)按两种顺序分别计算 S 102 , S 104 , S 106 ,并指出有效位数。 (编制程序时用单精度) (4)通过本上机题,你明白了什么? 按从大到小的顺序计算 S N 的通用程序为: 按从小到大的顺序计算 S N 的通用程序为: #include #include float sum(float N) float sum(float N) { { float j,s,sum=0; float j,s,sum=0; for(j=2;j<=N;j++) for(j=N;j>=2;j--) { { s=1/(j*j-1); s=1/(j*j-1); sum+=s; sum+=s; } } return sum; return sum; } } 从大到小的顺序的值 从小到大的顺序的值 精确值 有效位数 从大到小 从小到大 0.740049 0.74005 0.740049 6 5 S 102 0.749852 0.7499 0.7499 4 4 S 104 0.749852 0.749999 0.749999 3 6 S 106 通过本上机题, 看出按两种不同的顺序计算的结果是不相同的, 按从大到小的顺序计算 的值与精确值有较大的误差, 而按从小到大的顺序计算的值与精确值吻合。 从大到小的顺序 计算得到的结果的有效位数少。 计算机在进行数值计算时会出现“大数吃小数”的现象,导 致计算结果的精度有所降低, 我们在计算机中进行同号数的加法时, 采用绝对值较小者先加 的算法,其结果的相对误差较小。

大连理工大学矩阵与数值分析2017年考题

大连理工大学2017年研究生矩阵与数值分析考试 考试日期:2017年6月5日 一、填空题(50分,每空2分) 1.a=0.3000经过四舍五入具有4位有效数字,则 x a a -≤,ln ln x a -≤ 2.已知X=(1,5,12)T ,Y=(1,0,a)T ,则由X 映射到Y 的Householder 矩阵为:,计算||H||2=,cond 2(H)= 3.根据3次样条函数的性质(后面-前面=a (x-x0)3),一个求其中的参数b== 4.2 '3u u t =,写出隐式Euler 格式: 梯形法格式: 5.已知A=XX T ,其中X 为n 维列向量,则||A||2=,||A||F =,矩阵序列的极限:2lim k k A A →∞?? ? ? ?? = 6.A=LU ,其解为x ,写出一步迭代后的改善格式: 7. 531A -?? ? = ? ?-?? ,请问通过幂法与反幂法计算出的特征值分别是, 8.1111A ?? ?= ? ??? ,sin A =,823A A A +-=,At e =,d d At e t =,2 1At e dt ?= 9. ()()()()2 1 2 012f x dx A f A f A f =++?是Newton-cotes 公式,则1 A =,具有代数精度= 10. f(x)=7x 7+6x 6+…+x ,f[20,21,22….,28]= 11. 0.40.200.5A ??= ???,1 k k A ∞=∑= 12.f(0)=1,f(1)=-1,f(2)=1,f(3)=19,请问对该节点进行插值后最高次的系数= 还有2空没有回忆出来,但是比上面题目还简单,因此不用担心。 二、121232352A -?? ?=-- ? ?--??,121b ?? ? = ? ?-?? (1)计算LU 分解 (2)利用LU 求逆矩阵 (3)写出G-S 格式(12分)

数值分析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) 附录

数值分析实验报告

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

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 ?? ???? ?? ???? ?? ???? = ?? ???? - ?? ???? - ???? ?? 得到如下结果:

矩阵与数值分析_大连理工大学2011试卷

2011级工科硕士研究生 《矩阵与数值分析》课程数值实验题目 一、 对于数列1111 1,,, ,,392781 ,有如下两种生成方式 1、首项为01a =,递推公式为11 ,1,2,3 n n a a n -== ; 2、前两项为011 1,3 a a ==,递推公式为1210,2,3,3n n n a a a n --=-= ; 给出利用上述两种递推公式生成的序列的第50项。 二、 利用迭代格式 1 0,1,2,k x k += = 及Aitken 加速后的新迭代格式求方程324100x x +-=在[1, 1.5]内的根 三、解线性方程组 1.分别Jacobi 迭代法和Gauss-Seidel 迭代法求解线性方程组 12346212425027,208511 3270x x x x -?????? ? ? ? - ? ? ? = ? ? ? -- ? ? ? ???? ?? 迭代法计算停止的条件为:6)() 1(3 110max -+≤≤<-k j k j j x x . 2. 用Gauss 列主元消去法、QR 方法求解如下方程组: 1234221 2141312. 4201123 230x x x x ?????? ? ? ?- ? ? ? = ? ? ? -- ? ? ????? ?? 四、已知一组数据点,编写一程序求解三 次样条插值函数满足

并针对下面一组具体实验数据 求解,其中边界条件为. 五、编写程序构造区间上的以等分结点为插值结点的Newton插值公式,假设结点数为(包括两个端点),给定相应的函数值,插 值区间和等分的份数,该程序能快速计算出相应的插值公式。以 ,为例计算其对应的插值公式,分别取 不同的值并画出原函数的图像以及插值函数的图像,观察当增大 时的逼近效果. 实验须知: (1)所有的数值实验的题目要求用C语言或Matlab编程; (2)实验报告内容应包括问题、程序、计算结果及分析等; (3)12月26日前在本课程网站上提交实验报告; (4)本次实验成绩将占总成绩的10%。 (5)报告上要注明:所在教学班号、任课老师的姓名;报告人所在院系、学号。电子版提交到课程网站ftp://202.118.75.63/中各自老师目录下的homework文件夹内,文件名用学号命名。 《矩阵与数值分析》课程教学组 2011年11月30日

数值分析实验报告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 =

矩阵与数值分析实习题2018秋

矩阵与数值分析2018秋上机实习 1. 用秦九韶算法编程计算f (x )=1+x +x 2+?+x 50在x =1.00001处的值。 2. 设f (x )=54x 6+45x 5?102x 4?69x 3+35x 2+16x ?4.在区间[?2,2] 上画出函数, (1)使用Newton 迭代法找出该区间上的5个根,并计算e i+1/e i 2和e i+1/e i ,由此判断哪个根是1阶收敛,哪个根是2阶收敛?(2)使用割线法计算这5个根,并判断哪个根是线性收敛,哪个是超线性收敛? 3. 令H 表示n ×n 的Hilbert 矩阵,其中(i,j)元素是1/(i +j ?1), b 是元素全为1的向量,用Gauss 消去法求解Hx =b,其中取(a) n =2; (b) n =5; (c) n =10. 4. 已知方程组 [ 3?1?13?1??? ?13?1?13] [x 1?x n ]=[ 21?12] 分别用Jacobi 迭代和Gauss-Seidel 迭代求解方程组,精确到小数点后6位 5. 用共轭梯度法求解第3题中的方程组 6. 令f (x )=e |x|,x ∈[?1,1],分别用等距节点和Chebyshev 的零点去插值f(x),等距节点包括左右两个端点,分别取n =5,10,15,20,画出插值函数以及原函数的图并比较,观察有没有龙格现象发生。 7. 编程求解教材183页例3,并计算出样条函数在插值结点及相邻结点的中点处的导数值,并画出原函数及插值函数,原函数的导函数及插值函数的导函数的图像。把步长变为0.1重复上述操作。 8. (1)给定数据点(x i ,x i 2),x i =0,1n ,2n ,…,1,当n =5,10,15,20,25,30时分别用直线拟合这组数据点并注意观察当点数逐渐增加时直线的表达式的变化.(2)计算函数f (c 1,c 2)=∫(x 2?c 1?c 2x )2dx 1 0的最小值,并解释与(1)的关系 9. 已知常微分方程 {du dx =2x u +x 2e x x ∈[1,2],u (1)=0 , 分别用Euler 法,改进的Euler 法,Runge-Kutta 法去求解该方程,步长选为0.1,0.05,0.01.画图观察求解效果。 要求: 1.考试前提交作业(word 形式提交,包括代码和实验结果),主题写“学号+姓名+学部(学院)”发送至邮箱zhuke_2015@https://www.360docs.net/doc/2610234872.html, ,文件名“学号+姓名+学部学院”。考试后提交的数值试验部分成绩记为零分。 2.可用任何一种语言编程

数值分析实验报告77712

《数值分析》 实验报告 学院:计算机科学与软件学院姓名:XXX 班级:计算机XX班 学号:XXXXXX 实验一:舍入误差与数值稳定性

实验目的: 1、 通过上机编程,复习巩固以前所学程序设计语言; 2、 通过上机计算,了解舍入误差所引起的数值不稳定性。 3、 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。 实验内容:用两种不同的顺序计算644834.1100001 2≈∑=-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、拉格朗日插值 实验内容: x i -3.0-1.0 1.0 2.0 3.0 y i 1.0 1.5 2.0 2.0 1.0 作二次插值,并求x 1=-2,x 2 =0,x 3 =2.75时的函数近似值。

相关文档
最新文档