文档视界 最新最全的文档下载
当前位置:文档视界 › 计算数值实验报告(太原理工大学)

计算数值实验报告(太原理工大学)

本科实验报告

课程名称:计算数值方法

实验地点:综合楼五层506室

专业班级:计科1002 学号:14 学生姓名:xxx

指导教师:王峥

2012 年 6 月20

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

五、结构程序设计

迭代法:

#include<>

#include<>

main()

{

int i;

double xn[15],y,x1,x2,m ;

printf("请输入x1,x2的值:\n" );

scanf("%lf%lf",&x1,&x2);

printf("请输入精度要求:\n" );

scanf("%lf",&m);

printf(" n xn\n");

i=0;

do{

xn[0]=(x1+x2)/2 ;

xn[i+1]= sqrt(10/(4+xn[i]));

????

??????=????????????????????13814142210321321x x x ???

?

??

??????=?????????????????????

???

??--?-2178.4617.5911212592.1121130.6291.51314

.59103.043

2115

x x x x =

?

?

??????????????????????201161263841027851

2

4

4321x x x x ?????????

???????----=???????????

?????????????-555721

121

121121M M O O O

n n x x x x

追赶法:

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

程组l*y=b,u*x=y,来求解x.

、主要仪器设备

c++ C-free CodeBlocks

、结构程序设计

Gauss 消元法:

#include

#include using namespace std; int main() {

int n,i,j,k;

double a[100][100],b[100],o;

cout<<"输入未知数个数:"<>n;

cout<<"输入数列:"<>a[i][j]; for (i=1;i<=n;i++) for (j=i+1;j<=n;j++)

if (fabs(a[j][i])>1e-7)

{

o=a[i][i]/a[j][i];

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

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

}

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

{

b[i]=a[i][n+1]/a[i][i];

for (j=i-1;j>0;j--)

a[j][n+1]=a[j][n+1]-b[i]*a[j][i];

}

cout<<"解得:"<

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

lf\n",i,d[i]);

}

、结果讨论和分析

消元法:列主元素消元法:

解法:追赶法:

讨论

从消元过程可以看出,对于n阶线性方程组,只要各步主元素不为零,经过n-1步消元,就可以得到一个等价的系数三角形阵的方程组,然后再利用回代过程可求得原方程组的解. 由于列主元素法相似且优于完全主元素法所以省略消元过程相当于分解A为单位下三角阵L与上三角阵U的乘积,解方程组Ly=b回代过程就是解方程组Ux=y。其中的单位下三角阵、U为上三角阵. 在 A 的LU 分解中, L取下三角阵, U 取单位上三角阵,这样求解方程组Ax=d 的方法称。另外是追赶法和其他方法求同一方程结果不一样,我多次修改源程序,也不知道原因。再就是追赶法有很大的局限良。

图:

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

x1[0]=x10;

x2[0]=x20;

x3[0]=x30;

x1[i+1]=*x2[i]+*x3[i]+;

x2[i+1]=*x1[i]+*x3[i]+;

x3[i+1]=*x1[i]+*x2[i]+;

printf("%5d %5lf %5lf %5lf\n",i,x1[i],x2[i],x3[i]);

} }

六、实验结果与分析:

雅克比迭代法:

分析讨论:

其实,这两个迭代法是之前迭代法的升级,多了几个迭代式子而已,而且两者相差不大比较简单,所以选择了雅克比迭代法进行求解,但是没有与另一种方法高斯赛德尔迭代法进行实质性的比较。

流程图:

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

temp=0;

for(j=0;j

V[i]=temp;

}

for(i=0;i

if(k==1)r1=MaxValue(V,N);

else r2=MaxValue(V,N);

if(fabs(r2-r1)

r1=r2;

}

printf("r=%f\n",r2);

for(i=0;i

}

void main()

{

float A[N][N]={{2,-1,0},{-1,2,-1},{0,-1,2}} ;float U[N]; //A的值

U[0]=1;

U[1]=1;

U[2]=1;//x0的值

PowerMethod(A[0]);

}

六、结果讨论和分析

分析讨论

由于该程序将A矩阵和x0的值编写在程序中,所以要想修改成其他矩阵时比较麻烦,所以也有一定的局限性。幂法是一种求任意矩阵A的按模最大特征值及其对应特征向量的迭代算法。该方法的最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为适合,但有时收敛速度很慢。

流程图:

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

P=M[0][1]+N;

}

cout<<"其函数值:y="<

}

六、结果讨论和分析

分析讨论

拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。所以该程序选择了牛顿法,由于在输入数据的时候比较麻烦所以将数据存在了程序里面,只能在程序里修改数据。另外由于精度问题计算结果有一定的误差。

流程图:

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

相关文档
相关文档 最新文档