数值计算基础实验指导+部分实验源代码+复习指导+三套试题及其答

更新时间:2024-07-02 18:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数值计算基础

实验指导书

2010 年

目录

实验一 直接法解线性方程组的 ................................ 3 实验二 插值方法............................................ 12 实验三 数值积分............................................. 6 实验四 常微分方程的数值解 .................................. 8 实验五 迭代法解线性方程组与非线性方程 ..................... 10

实验一 直接法解线性方程组

一、实验目的

掌握全选主元消去法与高斯-塞德尔法解线性方程组。

二、实验内容

分别写出 Guass 列选主元消去法与追赶法的算法,编写程序上机调试出结果,要求所编 程序适用于任何一解线性方程组问题,即能解决这一类问题,而不是某一个问题。实验中以 下列数据验证程序的正确性。

1、用 Guass 列选主元消去法求解方程组

?2.5 ? ??5.3??8.1

2.3 ? 5.1? ? x1 ???3.7??

? ? ? ???9.61.5 3.8 ?2 ??? ??? ?x ??

?1.7 ? 4.3 ?x3 ????? ????5.5??

?

?

2、用追赶法求解方程组

?? 2 0 0 0 0 ? ? x1 ???? 10??

? 1 ? 2 0 0 0 ? ? x ??? 0 ??? ? ? 2 ? ? ??? 0 1 ? 2 0 0 ? ? x3 ? ? ? 0 ??? ? ? ? ? ??? 0 0 1 ? 2 0 ? ? x4 ??? 0 ??0 0 0 1 ? 2 x5 0

三、实验仪器设备与材料

主流微型计算机

四、实验原理

1、Guass 列选主元消去法 对于 AX =B

~

A B 是上三角矩阵。即: ~ ~

1)、消元过程:将(A|B)进行变换为 ( | ) ,其中 A

a ? a 1n b ? a b ? a ?? ? 1 a ??11 12 1 12 1n 1 ? ? ?? ??

? a21 a22 ? a2 nb2 ?? 0 1? a2 nb2 ??

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

??a???? ???? n1 an 2 ? ann b n ???? 0 0 ? ann bn

k 从 1 到 n-1 a、 列选主元

k ?i?n

选取第 k 列中绝对值最大元素 max aik 作为主元。 b、 换行

akj ? aij , j ? k ? 1,?, n bk ? bi

c、 归一化

akj / akk ? akj , j ? k ? 1,?, n

bk / akk ? bk

d、 消元

aij ? aik akj ? aij , i ? k ? 1,?, n; j ? k ? 1,?, n

bi ? aik bk ? bi , i ? k ? 1,?, n

2)、回代过程:由 ( ~ A | B~) 解出 x

n , xn?1 ,?, x 1 。

bn / ann ? xn

n

bk ??? akj x j ? xk , k ? n ? 1,?,2,1

j ?k ?1 2、追赶法

线性方程组为:

?? a 1 c 1 ?? x 1 ???? f 1 ???a?? ?? f ???? b2 2 c2 ?? x2 ??? 2 ??b3 a3 c3 ?? ???? x 3 ??? f ???? ? ? ???? ????? ? ?? 3 ???????????? ??

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

?b???? ??

n ?1 an ?1 cn?1 ?????

? f n?1 ??? b?? ?x n?1

n a?? ????

n xn ???

f n ????

做 LU 分解为:

?

??

????1 ? ? 1 ?1 ? ? ? ? 2 ? 2 ?? ? 1 ? ? L ? ?

? 3 ?3? ? 2 ??, R ? ? ? ?? ? ? ? ? ? ??? ???????? ? ? ? ? ???nn ?? ?

分解公式:

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

1 ???n?1 ??1 ???

?

?

???

?? ?? ?? a (i ? 2,3,?, n) i

? i

? bi ? ? i ? (i ? 2,3,?, n) ??1 ? b1 ,? i i

?1

??ci ?? ? i ?? i ?

(i ? 1,2,?, n ? 1)

?Ly ? f Ax ? f? LUx ? f? ??

?Ux ? y

回代公式:

? ?f1 y 1?? ?1 ????

??y ? f i ? ? i yi ?1 i?? i ?

?xn ? yn ??

i xi ?xi ? yi ? ?

?1

(i ? 2,3,?, n)

(i ? n ? 1, n ? 2,?,1)

五、实验步骤

1、理解并掌握全选主元消去法与高斯-塞德尔迭代法公式; 2、画出全选主元消去法与高斯-塞德尔迭代法的流程图 3、使用 C 语言编写出相应的程序并调试验证通过

六、实验报告要求

1、统一使用《武汉科技大学实验报告》本书写,实验报告的内容要求有:实验目的、 实验内容、程序流程图、源程序、运行结果及实验小结六个部分。

2、源程序需打印后粘贴在实验报告册内;

3、运行结果以屏幕截图形式保存并打印后粘贴在实验报告册内。

七、实验注意事项

注意如何定义数据结构以保存矩阵和解以降低算法的复杂性。

八、思考题

若使用全主元消去法,在编程中应如何记录保存对于未知数的调换。

for(int i=0;i

for(int j=0;j>*(a+i*N+j); cin>>*(b+i); }

//flag 中存储的值对应相应的 x 值,当方程的解由于列变换交换后,flag 中 //的值也相应交换,最后用于恢复解的顺序 for( i=0;i

void Matrix::Max(const int r) {

double max=0; for(int i=r;i

for(int j=r;j

if(max

max=fabs(*(a+i*N+j)); //设定最大主元的行、列 location.row=i; location.column=j; } }

//最大主元小于输入的精度时,认为方程组无解,退出程序 if(max<=esp) {

cout<<\方程组无解!\\n\exit(EXIT_FAILURE); } }

void Matrix::ChangeRC(const int r) {

double temp;

//如果最大主元所在的行不在当前行,则进行行变换 if(location.row!=r) {

for(int i=r;i

temp=*(a+r*N+i);

*(a+r*N+i)=*(a+location.row*N+i); *(a+location.row*N+i)=temp;

}

temp=b[r];

b[r]=b[location.row]; b[location.row]=temp;

}

//若最大主元所在的列不在当前的 r 列,则进行列变换 if(location.column!=r) {

for(int i=r;i

temp=*(a+i*N+r);

*(a+i*N+r)=*(a+i*N+location.column); *(a+i*N+location.column)=temp; }

//交换 flag 中的元素来标记方程解的位置变化

int temp1;

temp1=*(flag+r);

*(flag+r)=*(flag+location.column); *(flag+location.column)=temp1; }

}

void Matrix::Eliminate(const int r) {

if(fabs(*(a+N*r+r))<=esp) {

cout<<\方程组无解!\\n\exit(EXIT_FAILURE); }

for(int i=r+1;i

for(int j=r+1;j

(*(a+i*N+j))-=(*(a+i*N+r))*(*(a+r*N+j))/(*(a+r*N+r));

(*(b+i))-=(*(b+r))*(*(a+i*N+r))/(*(a+r*N+r));

}

}

void Matrix::Result()const

{

if(fabs(*(a+N*(N-1)+N-1))<=esp) {

cout<<\方程组无解!\\n\exit(EXIT_FAILURE); }

double temp;

*(b+N-1)/=(*(a+N*(N-1)+N-1)); //求出 X[N-1] //依次求出 X[i](i=N-2,N-3···,1) for(int i=N-2;i>=0;--i) {

temp=0;

for(int j=i+1;j

//根据 flag 中的数据用冒泡排序法恢复方程组解的次序 for(i=0;i

for(int j=0;j*(flag+j+1)) {

int temp1;

//交换解的顺序 temp=*(b+j); *(b+j)=*(b+j+1); *(b+j+1)=temp;

//交换用于标记的元素的顺序 temp1=*(flag+j);

*(flag+j)=*(flag+j+1); *(flag+j+1)=temp1; }

}

void Matrix::Calculate()

{ //根据矩阵行数重复进行寻找最大主元、变换行或列、消元

for(int i=0;i

Result(); }

int Matrix::GetRank()const {

return N;//返回矩阵的行数 }

double Matrix::GetX(const int i)const {

return *(b+i-1); }

运行结果

追赶法求解方程组的算法:

1. 输入方程组的维数 n,将主对角元素 b(i)(i=0:n-1),,主对角元素左边的元素 a(i)(i=0:n-2),主对角元素右边的元素 c(i)(i=0:n-2),右端项的元素 f(i)(i=0:n-1) 2. 对方程组的系数矩阵作 Crout 分解, α (0)=b(0),对于 i=0:n-2, c(i):=β (i):= c(i)/b(i), b(i+1):=α (i+1):= b(i+1)-a(i)* β (i) 3.解方程组 Ly=f

b(0):=y(0):=[f(0)/ α (0)]:=[f(0)/b(0)]

对于 i=1:n-1, b(i):=y(i):=[f(i)-a(i-1)*y(i-1)]/b(i) 4..解方程组 Ux=y

a(n-1):=x(n-1):=b(n-1)

对于 i=n-2:0,a(i)=x(i):=b(i)-c(i)*a(i+1); 5.输出方程组的解 a(0:n-1)

用追赶法求解方程组的源程序及运行结果

#include #include using namespace std;

class MatrixThr {

public:

MatrixThr(); ~MatrixThr();

void SetMatrixThr(const int n);//设置三对角矩阵的数据 void Result();//计算三对角矩阵的解

double GetX(const int i)const;//取得第 i 个解,i 从 1 开始 int GetN() const;//返回未知数的数目 private:

int N;//N 为未知数的数目

//b 为矩阵主对角线的元素首地址,a 为主对角线左边一斜条元素的首地址, //c 为主对角线右边一斜条元素首地址,f 为方程组的常数首地址 double *a,*b,*c,*f; };

int main() {

MatrixThr matrix; int n; do{

cout<<\输入三对角方程组的变量的数目 N:\cin>>n; }while(n<3);

cout<<\请依次输入三对角方程组每行的数据(0 元素除外):\\n\matrix.SetMatrixThr(n); //计算方程组的解 matrix.Result();//输出方程组的解

cout<<\方程的解如下:\\n\

for(int i=1;i<=matrix.GetN();++i)

cout<<\

return 0; }

MatrixThr::MatrixThr() { //初始化相关数据

N=0; a=NULL; b=NULL; c=NULL; f=NULL; }

MatrixThr::~MatrixThr() { //释放分配的内存空间

delete []a; delete []b; delete []c; delete []f; }

void MatrixThr::SetMatrixThr(const int n)

{ //根据输入的未知数个数设置矩阵的数据

N=n;

a=new double[N]; b=new double[N]; c=new double[N]; f=new double[N];

//若内存分配失败,退出程序

if(a==NULL||b==NULL||c==NULL||f==NULL) {

cout<<\初始化分配存储空间失败!\\n\exit(EXIT_FAILURE); }

//依次输入三对角矩阵每行的元素 cin>>*b>>*c>>*f;

for(int i=1;i>*(a+i-1)>>*(b+i)>>*(c+i)>>*(f+i); cin>>*(a+i-1)>>*(b+i)>>*(f+i); }

void MatrixThr::Result()

{ //对系数矩阵 A 作 Crout 分解

for(int i=0;i

{ //将 U 中的α 存于指针 b 中,L 中的β 存于指针 c 中

*(c+i)/=(*(b+i));

*(b+i+1)-=(*(a+i))*(*(c+i)); }

//解方程组 Ly=f,求得的 y 值存于指针 b 中 *b=(*f)/(*b);

for(i=1;i

//解方程组 Ux=y,求得的 x 值存于指针 a 中 *(a+N-1)=*(b+N-1);

for(i=N-2;i>=0;--i) *(a+i)=*(b+i)-(*(c+i))*(*(a+i+1)); }

int MatrixThr::GetN()const {

return N; }

double MatrixThr::GetX(const int i)const {

return *(a+i-1); }

运行结果

Lagrange 插值法的源程序:

#include

#include using namespace std;

class Lagrange {

public:

Lagrange(); ~Lagrange();

void SetLagrange(const int n);//根据用户的输入设置 Lagrange 类中的插值点数 据

bool Exist(const double x,const int i);//检测是否输入了与前 i 个插值结点横坐 标相同的点

int GetN()const;//获取插值结点的数目

void Calculate(const double a);//计算横坐标 a 对应的函数值 double GetResult()const;//返回计算的函数值 private:

int N;//插值结点的数目

double *x,*y,zx,zy;//x、y 分别用于存储插值点的数据,zx、zy 表示所求的坐 标点 };

int main() {

int n=2; Lagrange L; do {

if(n<2) cout<<\用于模拟曲线的插值点数目 N>2\cout<<\请输入用于模拟曲线的插值点数目 N:\cin>>n; }while(n<2);

cout<<\请输入各插值点横、纵坐标的数据\\n\L.SetLagrange(n);

double a;

cout<<\请输入所求点的横坐标 X:\cin>>a;

L.Calculate(a);

cout<<\横坐标\对应的函数值为:\ return 0; }

Lagrange::Lagrange() { //初始化相关数据

N=0;

x=y=NULL; zx=zy=0; }

Lagrange::~Lagrange()

{ //释放分配给指针的内存空间

delete []x; delete []y; }

bool Lagrange::Exist(const double a,const int i)

{ //遍历以输入的插值点,看是否重复插入横坐标相同的插值点

for(int j=0;j

if(a==*(x+j)) return true;

return false;

}

void Lagrange::SetLagrange(const int n) {

N=n;

x=new double[N]; y=new double[N];

//判断是否成功为指针分配了内存空间 if(x==NULL||y==NULL) {

cout<<\分配存储空间失败!\exit(EXIT_FAILURE); }

//输入插值点

for(int i=0;i

cin>>*(x+i)>>*(y+i);

//如果不是输入第一个坐标值,则会对输入的横坐标进行合法性检测 while(i!=0&&Exist(*(x+i),i)==true) {

cout<<\输入了重复的横坐标-------请重新输入第\个插入结

点的数据\\n\

cin>>*(x+i)>>*(y+i); }

}

}

void Lagrange::Calculate(const double a) {

zx=a;

for(int i=0;i

double temp=1;

for(int j=0;j

zy+=(*(y+i)*temp); } }

int Lagrange::GetN()const {

return N;//返回插值点的数目 }

double Lagrange::GetResult() const {

return zy;//返回求得的函数值 }

Lagrange 插值法的运行结果

Newton 插值法的源程序:

#include using namespace std;

class Matrix {

public:

Matrix(); ~Matrix();

void SetMatrix(const int n);//根据用户输入的插值点的数据设置计算结果的矩 阵

int GetN()const;//返回插值点的数目 void Calculate();//计算差商

double GetResult(double x)const;//根据输入的横坐标求函数值,返回运算结果 private:

double *a,*f;//a 和 f 分别用于存储插值点的横坐标和相应的函数值 int N;//记录插值点的数目 };

int main() {

Matrix matrix; int n; do{

cout<<\输入插值点的数目 N:\cin>>n; }while(n<2);

cout<<\输入插值点的数据:\

matrix.SetMatrix(n); matrix.Calculate();

double x;

cout<<\输入所求的横坐标:\cin>>x;

cout<<\所求的函数值为:\ return 1;

}

Matrix::Matrix()

{ //初始化数据

a=f=NULL; N=0; }

Matrix::~Matrix() {

//释放指针 a、f 指向的内存空间 delete []a; delete []f; }

void Matrix::SetMatrix(int n) {

N=n;

//为插值点创建动态数组 a=new double[N]; f=new double[N];

//输入插值点的数据

for(int i=0;i>*(a+i)>>*(f+i);

}

int Matrix::GetN() const {

return N; }

void Matrix::Calculate()

{ //将差商存储在一个一维数组内

for(int i=0;i

for(int j=GetN()-1;j>i;--j)

*(f+j)=(*(f+j)-*(f+j-1))/(*(a+j)-*(a+j-i-1));

}

double Matrix::GetResult(double x) const {

//利用差商和插值点的横坐标及第一个插值点的纵坐标计算函数值 double result=*f;//指针 f 指向第一个插值点的纵坐标 for(int i=1;i

double temp=1;

for(int j=0;j

}

return result; }

Newton 插值法的运行结果

变步长梯形法求定积分的源程序: #include #include using namespace std;

double function(const double x);//求被积函数的值并返回

//accumulate()为求定积分的函数,a、b 分别为积分的上下限,默认精度为 0.00001 double accumulate(const double a,const double b,const double eps=0.00001);

int main() {

double a,b,eps;//a,b 分别为定积分的上限和下限,h 为步长,eps 为要求的精度 a=0; b=1; eps=0.00001;

cout<<\在 0 到 1 上的积分为:\

return 0;

}

double function(const double x) {

if(x==0) return 1;//x 为 0 时函数值为 1 return(sin(x)/x);

}

double accumulate(const double a,const double b,const double eps) {

int n=1;

double h=b-a;//h 为步长

double T1=h*(function(a)+function(b))/2; double T2=T1/2+h*function(a+h/2)/2; //计算结果不满足精度,则继续 while(fabs(T2-T1)>eps) {

n*=2; h/=2;//步长折半 T1=T2; //利用 T1 计算 T2

double temp=0;

for(int i=1;i<=n;++i) temp+=function(a+(i-1.0/2)*h); T2=T1/2+h*temp/2; }

return T2;//返回步长 h 最合适时定积分的近似值 }

sin x

变步长梯形法求定积分 ? 的运行结果

0x

1

Romberg 算法求定积分的源程序: #include #include using namespace std;

//求被积函数的值并返回

double fun(const double x);

//Romberge()为求定积分的函数,a、b 分别为积分的上下限,默认精度为 0.00001 double Romberg(const double a,const double b,const double eps=0.0001); //函数 Tm()为 T-数表的计算公式

double Tm(const double T1,const double T2,const int m); int main() {

double a,b,eps;//a,b 分别为定积分的上限和下限,h 为步长,eps 为要求的精度 a=0; b=1; eps=0.00001;

cout<<\所求积分为:\return 0;

}

double fun(const double x)

《数值计算基础》考试样卷

参考答案

一、单项选择题(每小题 3 分,共 15 分) 1、D 2、D 3、C 4、B 5、D 二、填空题(每小题 3 分,共 15 分)

1 1

? 10?2?1 ??? 10?1 ? 0.00625 1、

2 ? 8 16

xk ? f ( xk ) 2、 xk ?1 ? x k ? 1 ? f ?( x k )

3、 6 4、 b-a 5、 O(h3)

三、解答题(每小题 10 分,共 50 分) 1、解:

? 2 4 0 5? ? 3 ?1 1 9???2 ?

r ? ) r2 ?( 1 ? 3 ?1 1 9? ?r?? ? 2 ?r1 3

?? 2 4 0 5????2 ?? ? ? ? ?r ? r3 ?3 1

??? ?2?2 0 3?? ? ?2?2 0 3???? ? ? ???3 ?1 1 9 ? ?3 ?1 1 9 ? ? ? ? ??4

r3 ? r2 14?2 7 ?0 14 ?2 ?1??????? ?0 ?1??

? ? ? ??3 3 3 3 ?? ?8 2? ? ?2 59 ?? 9 ? ?0 ?0 0

3 3 7 7 59 11 回代得 x3 ??, x x 2 ? 4, 1 ? ? 2 2

2、解:

?

8 分

2 分

1 6 f ( x) ? x 2 ? 6,f ' ( x) ? 2x,? ( x) ? x ??f ( x) ? 1 ( x ? 6),x ? ( x ? ) 7 分n?1 n '

f ( x) 2 2 x n

x0 ? 2

1 6 5

(2 ? ) ? ? 2.500 2 2 2 1 5 12 49 x ( ? ) ? ? 2.4502 ?

2 2 5 20 x 1 ?

3 分

3、 解

法一: 待定系数法

2

0

1

2

设 P (x) ? a ? a x ? a x 2 ,则 (3 分)

?a0 ? a1 ? a2 ? ?a0 ? 1

??1

??

?a0 ? 2a1 ? 4a2 ? 3 ? ?a1 ? ??1 ???

?a0 ? 3a1 ? 9a2 ? ?a2 ? 1 7 即 P (x) ? x 2 ? x ?1

2

(3 分)

(1 分)

法二:Lagrange 插值法

P2 ( x) ? ? yi li ( x)

i ?0

2

(3分) (3分)

( x ? 2)( x ? 3) ( x ? 1)( x ? 3) ( x ? 1)(x ? 2)

?1 ? ? 3 ? ? 7

(1 ? 2)(1 ? 3) (2 ? 1)(2 ? 3) (3 ? 1)(3 ? 2) ? x 2 ? x ? 1 ?

(1分)

法三:Newton 插值法

xi 1 2 3

??

yi 1 3 7 一阶差商 2 4 1 二阶差商 (3 分) (4 分)

N 2 ( x) ??f ( x0 ) ? f [ x0 , x1 ]( x ? x0 ) ? f [ x0 , x1 , x2 ]( x ? x0 )( x ? x1 )

? 1 ? 2( x ? 1) ? ( x ? 1)( x ? 2)

? x 2 ? x ? 1

?

4、

余项为 R2 ( x) ??f ??(? ) ? ( x ?1)(x ? 2)(x ? 3)

6

(3 分)

解:

令 f (x) ? 1, x 时,该公式精确成立,则 2 分

? A 1 A ? B ? 2h? ? ? 2 h??

? ? ?1 ? A ? B ? 0?3

B ? h ? 3

2

4 分

?

h ?h

1 3 1 f ( x)dx ? hf (?h) ? hf (h)

2 2 3

2

1 分

令 f (x) ? x

左=

2 3 1 3 1 2 2 3 2

,右= h ? (? h) ?? h ? ( h) ?? h? 左 ?? h x dx ?? 3 h2 2 3 3

h

2

1 分

令 f (x) ? x3

h

3

3 1 43

左= ??x dx ? 0 ,右= h ? (? h)??h ? ( h)? ??h 4 ? 左

?h 2 2 3 9

3

1

1 分 1 分

即公式的代数精度为 2 次 5、解: 使用欧拉法计

算公式为

yn?1 ? yn ? hf ( xn , yn ) ? yn ? h( xn ? yn ) ? (1 ? h) yn ? hxn ? 1.5 yn ? 0.5xn

6 分

y1 ? 1.5 y0 ? 0.5x0 ? 1.5 ?1 ? 0.5 ? 0 ? 1.500

2 分

y2 ? 1.5 y1 ? 0.5x1

? 1.5 ?1.5000 ? 0.5 ? 0.5 ? 2.500

四、综合题(每小题 10 分,共 20 分)

2 分

1、解:

y( xn?1 ) ? y( xn

) ? ??

xn ?1

xn

h

xn?1 , yn?1 )] ? yn?1 ? yn ??[ f ( xn , yn ) ? f (

2

h

f ( x, y( x)dx ??[ f ( xn , y( xn )) ? f ( xn?1 , y( xn?1 ))]

2

4 分

阶次的证明:

3

? O(h) 即证 y(xn?1 ) ? y n?1

y( x xn ) ? y?( xn )h ? n?1 ) ? y(

h yn?1 ? yn ? [ f ( xn, yn ) ? f ( x n?1 , yn?1 )]

2

y? ( xn ) 2

h ? O(h3 ) 2

(1) 2 分

令 yn ? y(xn ) ,右边的 yn?1 ? y(xn?1 )

h

yn?1 ? y( xn ) ??[ f ( xn , y( xn )) ? f ( xn?1 , y( xn?1 ))]

2

h y? ( xn )

? y( xn ) ? [ y?( x n) ? y?( xn ) ? h ? O(h 2 )]

2 1

y? ( xn ) 2

? y( xn ) ? y?( xn )h ? h ? O(h 3 )

2

(1)-(2),得

3

y(x ) ? y n?1 n?1 ? O(h)

(2) 2 分

2 分

2、

证明: 显

l0 (x0 ) ? 1, l0 (x1 ) ? 0, l0 (x2 ),...l0 (xn ) ? 0

l( x) l( x) 1

l0 [ x0 , x1 ,? xk ] ? ??0 i ? 0 0 ?? ?( xi ) ? ?( x0 ) ( x0 ? x1 )(x0 ? x2 )?( x0 ? xk ) i ?0 ?

则 l0(x)的牛顿插值多项为:

k

2 分

2 分

?

( x ? x0 )(x ? x1 )...(x ? xn?1 ) ( x ? x0 ) ?( x ? x0 )(x ? x1 )

? ... ??N n ( x) ? 1 ? ?( x0 ? x1 ) ( x0 ? x1 )(x0 ? x2 ) ( x0 ? x1 )(x0 ? x2 )...(x0 ? xn )

2 分

又因为 l

( n?1)

0

( x) ? 0 ,故有

( n?1)

l(? ) 0 )(x ? x )...(x ? x) ? 0 l 0 ( x) ? Nn ( x) ? ( x ? x0 1

(n ? 1)!

2 分

所以有

( x ? x0 ) ?( x ? x0 )(x ? x1 ) ( x ? x0 )(x ? x1 )...(x ? xn?1 ) ? ... ??l0 ( x) ? N n ( x) ? 1 ? ?

( x0 ? x1 )(x0 ? x2 )...(x0 ? xn ) ( x0 ? x1 ) ( x0 ? x1 )(x0 ? x2 )

2 分

数值计算方法期末模拟试题二

一、

1、设

填空(共 20 分,每题 2 分)

,取 5 位有效数字,则所得的近似值 x= .

2、设一阶差商

则二阶差商

3、数值微分中,已知等距节点的函数值

则由三点的求导公式,有 4、求方程

的近似根,用迭代公式 ,取初始值

, 那么

5、解初始值问题

近似解的梯形公式是

6、

,则 A 的谱半径

=,A 的

7、设

,则

和 =

8、若线性代数方程组 AX=b 的系数矩阵 A 为严格对角占优阵,则雅可

比迭代和高斯-塞德尔迭代都 9、解常微分方程初值问题的欧拉(Euler)方法的局部截断误差为

本文来源:https://www.bwwdw.com/article/s10.html

Top