- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验目的和要求 目的
《计算数值方法》是一门实践性和实用性都很强的课程,学习的目的在于应用。本配合课堂教学实践环节巩固课堂和书本上所学知识加强能力提高启发创新思想。
一.方程求根 一、实验内容
熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|0.5×10-5 计算公式
(1) 牛顿法 Xn_1=Xn-f(Xn)/f(Xn)
(2)二分法 Xn=(b—a)/2 |Xn—X*|(b—a)/2n 结构程序设计
(1)
#include stdafx.h
#include math.h
#define delta 0.0001//满足精度
int main(int argc, char* argv[])
{
double x_n1,x_n;
x_n=1.5;
while(1)
{
x_n1=x_n-(x_n*x_n*x_n+4*x_n*x_n-10)/(3*x_n*x_n+8*x_n);//计算公式
printf(x=%lf\n,x_n1);
if(fabs(x_n1-x_n)delta)
{
printf(x=%lf\n,x_n1);
return 0;
}else{
x_n=x_n1;
}
}
return 0;
}
(2)
#include stdafx.h
#includeiostream.h
#includemath.h
#define f(x) (x*x*x-4*x*x-10)
void main()
{
int a=1,b=2;
double x_n,x_n1,x_k;
x_n=a,x_n1=b;
if(f(x_n)*f(x_n1)=0)return ;
else{
while(fabs(x_n1-x_n)0.000005)
{x_k=(x_n+x_n1)/2;
coutx=x_kendl;
if(f(x_n)*f(x_k)0)
{x_n=x_k;}
else{x_n1=x_k;}
}}}
实验结果与分析讨论
(1)(2)
分析与讨论:
结果较满意,牛顿法收敛较快,但要求函数的一阶导数存在;二分法收敛较慢。程序较清晰,好理解。
二.线性方程组的直接解法 实验内容
合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:
①
②
③
④(n=5,10,100,…) 计算公式
通过消元、再回代的求解方法称为高斯消元法。特点是始终消去主对角线
下方的元素。 结构程序设计
#include stdafx.h
#include stdio.h
double a[4][5],a0[4][5];
double l[5],sum;
int n;
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); }}
void main()
{ FILE *f;
int i,j,k;
f=fopen(Gaussdata.txt,r);
fscanf(f,%d,n);
for(i=1;i=n;i++)
{ for(j=1;j=n+1;j++)
{ fscanf(f,%lf,a[i][j]);
a0[i][j]=a[i][j];}}
displayA();
fclose(f);//消元过程
k=1;
do
{ for(i=k+1;i=n;i++)
{ l[i]=a0[i][k]/a0[k][k];
printf(l[%i][%i]=%lf,i,k,l[i]);
//for(j=k+1;j=n+1;j++)
for(j=1;j=n+1;j++)
{ a[i][j]=a0[i][j]-l[i]*a0[k][j];}
displayA();}
k++;
if(k==n) break;
for(j=1;j=n;j++)
{ for(i=1;i=n+1;i++)
a0[j][i]=a[j][i];}}
while(1); //回代过程
l[n]=a[n][n+1]/a[n][n];
for(k=n-1;k=1;k--)
{ sum=0;
for(j=k+1;j=n;j++)sum+=a[k][j]*l[j];
l
文档评论(0)