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

上传人:b****9 文档编号:137253 上传时间:2022-10-04 格式:DOC 页数:25 大小:2.04MB
下载 相关 举报
计算数值方法实验报告--太原理工大学.doc_第1页
第1页 / 共25页
计算数值方法实验报告--太原理工大学.doc_第2页
第2页 / 共25页
计算数值方法实验报告--太原理工大学.doc_第3页
第3页 / 共25页
计算数值方法实验报告--太原理工大学.doc_第4页
第4页 / 共25页
计算数值方法实验报告--太原理工大学.doc_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

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

《计算数值方法实验报告--太原理工大学.doc》由会员分享,可在线阅读,更多相关《计算数值方法实验报告--太原理工大学.doc(25页珍藏版)》请在冰豆网上搜索。

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

计算数值方法

实验报告

学院:

软件学院

专业:

软件工程

班级:

软件1012班

学号:

2010004719

姓名:

乔婧峰

太原理工大学学生实验报告

学院名称

软件学院

专业班级

软件1012班

学号

2010004719

学生姓名

乔婧峰

实验日期

2012.4

成绩

课程名称

数值计算方法

实验题目

实验一二分法

一、课题名称

方程求根:

熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。

选择上述方法中的两种方法求方程:

二分法f(x)=x3+4x2-10=0在[1,2]内的一个实根,且要求满足精度|x*-xn|<0.5×10-5

迭代法:

用迭代公式x=f(x)进行迭代计算,直到满足|x*-xn|<0.5×10-5为止。

割线法:

x=x-f(x)/g(x),其中f(x)为给定的函数,g(x)为给定函数的导数,直到满足|x*-xn|<0.5×10-5为止。

二、目的和意义

(1)了解非线性方程求根的常见方法,如二分法、牛顿法、割线法。

(2)加深对方程求根方法的认识,掌握算法。

(3)会进行误差分析,并能对不同方法进行比较。

三、计算公式

f(x)在区间(x,y)上连续

  先找到a、b属于区间(x,y),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],

  现在假设f(a)<0,f(b)>0,a

①如果f[(a+b)/2]=0,该点就是零点,

  如果f[(a+b)/2]<0,则在区间((a+b)/2,b)内有零点,(a+b)/2=>a,从①开始继续使用

  中点函数值判断。

  如果f[(a+b)/2]>0,则在区间(a,(a+b)/2)内有零点,(a+b)/2<=b,从①开始继续使用

  中点函数值判断。

  这样就可以不断接近零点。

通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值

四、主要仪器设备

Vc2008,hp

五、结构程序设计

迭代法:

#include"stdafx.h"

#include"stdio.h"

#include"math.h"

#include"iostream"

usingnamespacestd;

floatmain()

{

floata;

cin>>a;

floatt,x;

x=a;

do{

x=sqrt((10-x*x*x)/4);

t=a;

a=x;

}while(fabs(a-t)>0.5*1e-5);

printf("x=%f",a);

system("pause");

}

割线法:

#include"stdafx.h"

#include"stdio.h"

#include"math.h"

#include"iostream"

usingnamespacestd;

floatmain()

{

floatc,a=1.0,b=2.0;

//cin>>a>>b;

while

(1)

{

c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b-(a*a*a+4*a*a));

if(fabs(b-c)<0.5*0.000001)break;

b=c;

}

cout<

}

六、结果讨论和分析

割线法:

迭代法:

分析:

使用不同的方法,可以不同程度的求得方程的解,不同的方法速度不同。

实验地点

ZSA401

指导教师

李志

学院名称

软件学院

专业班级

软件1012班

学号

2010004719

学生姓名

乔婧峰

实验日期

2012.4

成绩

课程名称

数值计算方法

实验题目

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

一、课题名称

线性方程组的直接解法

合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:

④(n=5,10,100………)

二、目的和意义

(1)了解线性方程组常见的直接解法,如Guass消元法、LU分解法、追赶法。

(2)加深对线性方程组求解方法的认识,掌握算法。

(3)会进行误差分析,并能对不同方法进行比较。

三、计算公式

高斯分解法:

⑴将原方程组化为三角形方阵的方程组:

lik=aik/akk

aij=aij-lik*akjk=1,2,…,n-1

i=k+1,k+2,…,nj=k+1,k+2,…,n+1

⑵由回代过程求得原方程组的解:

xn=ann+1/ann

xk=(akn+1-∑akjxj)/akk(k=n-1,n-2,…,2,1)

LU分解法:

将系数矩阵A转化为A=L*U,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.

追赶法:

用来求对角方程组;将系数矩阵A转化为A=L*U,L为普通下n-1对角矩阵,U为单位上n-1对角矩阵,然后通过解方程组l*y=b,u*x=y,来求解x.

四、主要仪器设备

Vc2008,hp

五、结构程序设计

Gauss消元法:

#include"stdafx.h"

#include"stdio.h"

#include"iostream"

usingnamespacestd;

floatmain()

{floata[3][4]={{1,2,3,14},{0,1,2,8},{2,4,1,13}};

floatx[3];

floatsum=0;

intk,i,j;

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

for(i=k+1;i<3;i++)

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

a[i][j]=a[i][j]-a[i][k]/a[k][k]*a[k][j];

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

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

printf("a[%d][%d]=%f,",i,j,a[i][j]);

cout<

x[2]=a[2][3]/a[2][2];

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

{sum=0;

for(j=k+1;j<3;j++)

{

sum+=a[k][j]*x[j];

}

x[k]=(a[k][3]-sum)/a[k][k];

}

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

printf("x[%d]=%f,",i+1,x[i]);

}

LU分解法:

#include"stdafx.h"

#include

#include

#defineL30

doublea[L][L],b[L],l[L][L],u[L][L],x[L],y[L];

intmain(){

intn,i,j,k,r;

scanf("%d",&n);

for(i=1;i<=n;++i){

for(j=1;j<=n;++j){

scanf("%lf",&a[i][j]);

}

}

for(i=1;i<=n;++i){

scanf("%lf",&b[i]);

}

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

{

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

{

l[i][j]=0;

u[i][j]=0.0;

}

}

for(k=1;k<=n;++k){

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

{

u[k][j]=a[k][j];

for(r=1;r

{

u[k][j]-=l[k][r]*u[r][j];

}

}

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

l[i][k]=a[i][k];

for(r=1;r

l[i][k]-=l[i][r]*u[r][k];

}

l[i][k]/=u[k][k];}

l[k][k]=1.0;

}

for(i=1;i<=n;++i){

y[i]=b[i];

for(j=1;j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1