- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《计算机数方法B》实验指导书
《计算机数值方法》
实验指导书
计算机科学与技术与学院计算机科学与技术系目 录
实验一 方程求根 1
实验二 线性方程组的直接解法 3
实验三 线性方程组的迭代解法 8
实验四 代数插值 9
实验一
【目的与要求】
1.了解方程求根的基本方法、基本原理、误差估计;
2.能够按照工程实际要求,选择适当的算法;
3.通过编写程序,进行算法设计和数值求解。
1. 熟悉使用二分法、迭代法、牛顿法、割线法等方法。
选择方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5
【示例程序】
增值寻根法又叫做逐步搜索法,是求解方程根的一种方法,也是初步确定方程隔根区间的一种方法。增值寻根法的基本思想是:从初值x0开始, 按规定的一个初始步长h来增值:
xn+1= xn+h n=0,1,2,3……
同时计算f(xn+1)可能遇到三种情形:
f(xn+1)=0,此时,xn+1即为方程的根x*;
f(xn+1)* f(xn)0,说明[xn+1, xn]内无根;
f(xn+1)* f(xn)0,说明[xn+1, xn]内有根;
搜索过程,可从a开始,也可从b开始,这时应取更小的步长h,直到有根区间的长度|xn+1-xn|e。(e为所要求的精度),此时f(xn)或f(xn+1)就可近似认为是零,xn或xn+1就是满足精度的方程的近似根。
基于增值寻根法,设计程序如下:
#include iostream.h
double fun(double x){
double y=x*x;
return y*x+4*y-10;
}
void main(void) {
double x0=-4,x;
double h=1;
double step=0;
x=x0;
while(h0.000001){
cout------- h=h ------endl;
while(true){
step++;
if(fun(x)==0){
coutx=xendl;
h=0;
break;
}
else if(fun(x)*fun(x+h)0){
x+=h;
continue;
}else if(fun(x)*fun(x+h)0){
coutx1=xendl;
coutx2=(x+h)endl;
break;
}
}
h=h/10;
}
coutstep=stependl;
}
实验二 线性方程组的直接解法
【目的与要求】
1.了解Gauss消元法、LU分解法、追赶法的基本方法、基本原理;
2.能够按照工程实际要求,选择适当的算法;
3.通过编写程序,进行算法设计和数值求解。
合理利用主元素消元法、LU分解法、追赶法求解下列方程组:
①
②
③
④(n=5,10,100,…)
【示例程序】
高斯消元法的基本思想是将原有线性方程组化为与之等价的三角形方程组,这个过程也称为消元过程,再通回代过程进行求解。消元过程使用公式为:
回代过程使用公式如下:
首先,设定数据文件Gaussdata.txt中的数据为要求解的线性方程组数据,如下:
3
2 2 3 3
4 7 7 1
-2 4 5 -7
其中的3表示三阶线性方程组,下面是三行四列的系数矩阵。
编写函数displayA()以显示系数矩阵及其的运算中的变化如下:
void displayA()
{
printf(\n);
for(int j=1;j=n;j++)
{
for(int i=1;i=n+1;i++)
printf(%lf ,a[j][i]);
printf(\n);
}
}
定义全局变量如下:
double a[15][16],a0[15][16];//a和a0用以记录方程组系数,
//其中:a为本次运算的结果,a0为上次运算的结果
double l[15],tmp; //l用做消元过程使用系数l的计算和存储,tmp为零时变量
int n; //n为线性方程组阶数
完整的程序如下:
#include stdafx.h
#include stdio.h
double a[15][16],a0[15][16];
double l[15],tmp;
int n;
void displayA()
{
printf(\n);
for(int j=1;j=n;j++)
{
for(int i=1;i=n+1;i++)
pr
原创力文档


文档评论(0)