




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上本科实验报告课程名称: 计算机数值方法 实验地点: 专业班级: 学号:学生姓名: 指导教师: 成 绩: 年 月 日专心-专注-专业太原理工大学学生实验报告学院名称计算机科学与技术学院专业班级学号学生姓名实验日期成绩课程名称计算机数值方法实验题目实验一 方程求根1、 实验目的和要求:(1)实验目的: 熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。求方程:f(x)=x*x*x+4*x*x-10=0在1,2内的一个实根,且要求满足精度|x*-xn|<0.001(2)实验要求:1.应用C,C+或JAVA编出通用程序,源程序要有详细的注释和说明;2
2、.比较计算结果,对不同方法进行比较分析;3.实验完成,提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训。2、 实验内容和原理: (1) 增值寻根法:基本思想为:从初始值x0开始,按规定的一个初始步长h来增值。令x(n+1)=x(n)+h,(n=0,1,2.),同时计算f(x(n+1).在增值过程中会遇到三种情况:1. f(x(n+1))=0,此时x(n+1)即为方程根。2. f(x(n))和f(x(n+1)同号,说明区间内无根。3. f(x(n))和f(x(n+1)同号,说明区间内有根,则把步长缩小,直至满足精度要求为止,x(n)或x(n+1)就是满足
3、精度的近似根。 (2) 二分法:基本思想为:设f(x)在a,b内连续,且f(a)*f(b)<0,则方程f(x)=0在(a,b)内有实根x*.然后逐步对分区间a,b,通过判断两端点函数值乘积的符号,进一步缩小有根区间从而求出满足精度要求的近似值。(3) 牛顿迭代法:基本思想为给定一个初始值由牛顿法的迭代公式:x(n+1)=x(n)-f(x(n)/f(x(n) (n=0,1,2.)逐步求出x(n),直至(x(n+1)-x(n))的绝对值小于给定精度,则x(n+1)即可作为近似值。 (4) 双点割线法:由给出的两个初始近似值,再根据双点割线法迭代公式:x(n+1)=x(n)-(f(x(n)/(
4、f(x(n)-f(x(n-1)*(x(n)-x(n-1),(n=1,2,3.)逐步求出x(n),直至x(n+1)-x(n)的绝对值满足精度,则x(n+1)即可作为近似值。 (5) 单点割线法:由给出的两个初始近似值,再根据双点割线法迭代公式:x(n+1)=x(n)-(f(x(n)/(f(x(n)-f(x(0)*(x(n)-x(0),(n=1,2,3.)逐步求出x(n),直至x(n+1)-x(n)的绝对值满足精度,则x(n+1)即可作为近似值。3、 主要仪器设备:笔记本电脑 4、 操作方法:源代码:(1)增值寻根法: #include<stdio.h>double fun(doubl
5、e x) /原函数 return(x*x*x+4*x*x-10);/求解方程f(x)=x*x*x+4*x*x-10=0的根,精度为10-3. int main() double a=1.25,h=1,x=a; printf("初始近似值为:%lfn",a); doif(fun(x)=0)printf("根为:%f",x);return 0; /*如果初始值函数值为0,则初始值即为根*/ else if(fun(x)*fun(x+h)>0) /*如果fun(x)和fun(x+h)同号则使X加h并跳出本次循环执行下一次*/ x=x+h;continue
6、; else if(fun(x)*fun(x+h)<0) /若异号则说明在X和X+h之间存在函数根,则缩/短步长继续寻根 h=h/10.0;while(h>0.001);/当不满足精度要求时继续执行循环体 printf("根为:%fn",x);/跳出循环说明满足精度要求则x可近似作为方程根 return 0;(2)二分法:#include<stdio.h>#include<math.h>#define esp 1e-3 /精度double f(double x) /原函数 return (x*x*x+4*x*x-10);double ro
7、ot(double (*fun)(double),double left,double right,double deviation)/用二分法求方程根 /其中形参*fun为指向原函数的指针 double x,y; while(fabs(right-left)>deviation)/当不满足精度要求继续执行循环体 x=(right+left)/2; /求出中点的横坐标 y=fun(x); /计算中点的函数值if(y=0)return x; /如果中点函数值等于0则中点即为所求根if(y>0)right=x; /若中点函数值大于0则令其为区间右终点值else left=x; /否则令
8、其为左端点值 return(right+left)/2; /以中点值作为最终近似值int main() double a,b;printf("请输入区间左右端点值:n");scanf("%lf%lf",&a,&b);printf("近似根为%lfn",root(f,1,2,esp); return 0;(3)牛顿迭代法:#include<stdio.h>#include<math.h>double f1(double x) /原函数 return x*x*x+4*x*x-10;double f2
9、(double x) /导函数 return 3*x*x+8*x;double newton(double x0,double e) double x1; do x1=x0; /按牛顿迭代公式Xn+1=Xn-(f1(Xn)/f2(Xn)求解x0=x1-f1(x1)/f2(x1); while(fabs(x0-x1)>e); /当不满足精度要求时继续执行循环体 return x0; /满足精度要求时返回Xn+1的值int main()double x0=1.5;/初始近似值double e=pow(10,-3); /精度printf("初始近似值为:%lfn",x0);
10、 printf("近似根为:%lfn",newton(x0,e); return 0;(4)双点割线法:# include <stdio.h># include <math.h>#define esp 10e-3 /精度 double f(double x) /原函数 return(x*x*x+4*x*x-10); double fun(double x0,double x1) /双点割线法求近似根 double x; int i=0; while(fabs(x1-x0)>esp) /当不满足精度要求继续执行循环体 x=x1-f(x1)*(x1
11、-x0)/(f(x1)-f(x0); x0=x1; x1=x; i+; /达到精度要求后跳出循环 printf("执行循环次数为 i=%dn",i); return (x1); /返回最终近似根main () double m,n,result; printf("请输入两个双精度初始近似值 m n: n"); /输入两个双精度初始近似值 scanf("%lf%lf",&m,&n); result=fun(m,n); printf("result=%lfn",result);/输出最后结果,保留四位小
12、数(5)单点割线法:# include <stdio.h># include <math.h>#define esp 5*(10e-3) /精度 double f(double x) /原函数 return(x*x*x-3*x-1); double fun(double x0,double x1) /单点割线法求近似根 double x; int i=0; while(fabs(x1-x0)>esp) /当不满足精度要求继续执行循环体 x=x1-f(x1)*(x1-x0)/(f(x1)-f(x0); x1=x; i+; /达到精度要求后跳出循环 printf(&q
13、uot;执行循环次数为 i=%dn",i); return (x1); /返回最终近似根main () double m,n,result; printf("please input m n: n"); /输入两个双精度初始近似值 scanf("%lf%lf",&m,&n); result=fun(m,n); printf("result=%.4fn",result);/输出最后结果,保留四位小数5、 实验结果: 程序运行结果:(1)增值寻根法:初始近似值为:1.根为:1.Press any key to c
14、ontinue(2)二分法:请输入区间左右端点值:1 2近似根为1.Press any key to continue (3)牛顿迭代法:初始近似值为:1.近似根为:1.Press any key to continue(4) 双点割线法:请输入两个双精度初始近似值 m n:1 2执行循环次数为 i=4result=1.Press any key to continue(5)单点割线法:please input m n:1 2执行循环次数为 i=15result=1.Process returned 14 (0xE) execution time : 4.411 sPress any key
15、to continue. 6、 结果分析: (1)通过对不同方法比较可知,收敛速度:牛顿迭代法>双点割线法> 单点割线法,二分法和增值寻根法的收敛速度就相对较慢,且结果相对前三种方法较不精确。(2)但二分法和增值寻根法的优点是简单,对f(x)只要求连续,局限性是只能用于求实根,不能求复根及偶数重根。(3)牛顿法则收敛很快,而且可求复根,缺点是对重根收敛较慢,要求函数一阶导数存在。(4)割线法省去了牛顿法求函数导数过程,简化了计算步骤,且收敛速度也较快,其中双点割线法比单点割线法收敛速度快。 七、心得体会: 本次实验内容较为简单,最主要的是要学会将数学方法转变为程序上机实现,同时要学
16、会对不同方法进行比较,确定时间复杂度最小的算法。 实验地点指导教师 太原理工大学学生实验报告学院名称计算机科学与技术学院专业班级学号学生姓名实验日期成绩课程名称计算机数值方法实验题目实验二 线性方程组的直接求解法1、 实验目的和要求:(1)实验目的:合理利用Gauss消元法、LU分解法求解下列方程组:0.001X1+2.000X2+3.000X3=1.000-1.000X1+3.712X2+4.623X3=2.000-2.000X1+1.072X2+5.643X3=3.000(2)实验要求:1.应用C,C+或JAVA编出通用程序,源程序要有详细的注释和说明;2.比较计算结果,对不同方法进行比较
17、分析;3.实验完成,提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训。2、 实验内容和原理:(1)Gauss消元法:基本思想为:对于n阶线性方程组,只要各步主元素不为0,经过n-1步消元,就可以得到一个等价的的系数矩阵为上三角形矩阵的方程组,然后再利用回代过程即可求得原方程的解。时间复杂度约为O(n3)。(2)Gauss列主元素消元法:基本思想:在用高斯消元法求解方程组时,用作除法的小主元素可能使舍入误差增加,因此需要考虑依次按列选主元素,然后换行使之变到主元素位置上,再进行消元计算。(3)Gauss完全主元素消元法:基本思想:首先在系数矩阵A中选取绝
18、对值最大的元素作为主元素,然后交换相应行和列,进行高斯消元,其次在A(1)的2n行及2n列选取主元素进行消元,依次进行下去。(4)LU分解法:当系数矩阵A满足顺序主子式不为0时,可将A分解为为一个单位下三角矩阵L和一个上三角矩阵U的乘积,且分解唯一,然后方程式变为Ly=b,Ux=y,接着先求y,再求出x。三、主要仪器设备:笔记本电脑四、操作方法:(1)Gauss消元法: 源代码:/*矩阵A用于存放线性方程组的增广矩阵,向量X表示线性方程组的解,例题为P43例2*/#include<stdio.h>#include<math.h>int main() double m,p
19、,A1010,X10; int n,i,j,k,q; char c; printf("请输入方程的阶数(小于等于8):n"); scanf("%d",&n); for(i=1;i<=n;i+)/方便起见从A11开始存入数据 printf("请输入增广矩阵第%d行:n",i); for(j=1;j<=n+1;j+) scanf("%lf",&Aij); /for for(i=1;i<n;i+) m=fabs(Aii);j=i; /m表示矩阵第i列中的最大值,j用来标记最大值所在的行数
20、 for(k=i+1;k<=n;k+) if(fabs(Aki)>m)m=fabs(Aki);j=k;/易错 /for for(q=i;q<=n+1;q+)/交换第i行和第j行 p=Aiq;Aiq=Ajq;Ajq=p; /for /*消去过程* for(k=i+1;k<=n;k+) m=-Aki/Aii; for(j=i;j<=n+1;j+) Akj=Akj+Aij*m;/易错 /for /for /*回代过程* Xn=Ann+1/Ann; for(i=n-1;i>=1;i-) p=0.0;for(j=i+1;j<=n;j+)p=p+Aij*Xj;Xi
21、=(Ain+1-p)/Aii; /for printf("线性方程组的解为:n"); for(i=1;i<=n;i+) printf("x%d=%lfn",i,Xi); c=getchar(); return 0;(2)Gauss列主元素消元法: 源代码:/*矩阵A用于存放线性方程组的增广矩阵,向量X表示线性方程组的解,例题为P43例2*/#include<stdio.h>#include<math.h>int main() double m,p,A1010,X10; int n,i,j,k,q; char c; print
22、f("请输入方程的阶数(小于等于8):n"); scanf("%d",&n); for(i=1;i<=n;i+)/方便起见从A11开始存入数据 printf("请输入增广矩阵第%d行:n",i); for(j=1;j<=n+1;j+) scanf("%lf",&Aij); /for for(i=1;i<n;i+) m=fabs(Aii);j=i; /m表示矩阵第i列中的最大值,j用来标记最大值所在的行数 for(k=i+1;k<=n;k+) if(fabs(Aki)>m
23、)m=fabs(Aki);j=k;/易错 /for for(q=i;q<=n+1;q+)/交换第i行和第j行 p=Aiq;Aiq=Ajq;Ajq=p; /for /*消去过程* for(k=i+1;k<=n;k+) m=-Aki/Aii; for(j=i;j<=n+1;j+) Akj=Akj+Aij*m;/易错 /for /for /*回代过程* Xn=Ann+1/Ann; for(i=n-1;i>=1;i-) p=0.0;for(j=i+1;j<=n;j+)p=p+Aij*Xj;Xi=(Ain+1-p)/Aii; /for printf("线性方程组的
24、解为:n"); for(i=1;i<=n;i+) printf("x%d=%.3lfn",i,Xi); c=getchar(); return 0;(3)Gauss完全主元素消元法: 源代码:/*矩阵A用于存放线性方程组的增广矩阵,向量X表示线性方程组的解*/#include<stdio.h>#include<math.h>int main() double m,p,A1010,X10; int n,i,j,k,q,l,c,w; char a; printf("请输入方程的阶数(小于等于8):n"); scanf(
25、"%d",&n); for(i=1;i<=n;i+)/方便起见从A11开始存入数据 printf("请输入增广矩阵第%d行:n",i); for(j=1;j<=n+1;j+) scanf("%lf",&Aij); /for for(i=1;i<n;i+) m=fabs(Aii);j=i;l=i; /m表示矩阵第i列中的最大值,j用来标记最大值所在的行数,l用来标记最大值所在的列数 for(k=i;k<=n;k+) for(c=i;c<=n;c+) if(fabs(Akc)>m)m=f
26、abs(Akc);j=k;l=c;/易错,忘加fabs for(q=i;q<=n+1;q+)/交换第i行和第j行 p=Aiq;Aiq=Ajq;Ajq=p; /for for(w=i;w<=n;w+)/交换第i列与第c列 p=Awi; Awi=Awc; Awc=p; /*消去过程* for(k=i+1;k<=n;k+) m=-Aki/Aii; for(j=i;j<=n+1;j+) Akj=Akj+Aij*m;/易错 /for /for /*回代过程* Xn=Ann+1/Ann; for(i=n-1;i>=1;i-) p=0.0;for(j=i+1;j<=n;j
27、+)p=p+Aij*Xj;Xi=(Ain+1-p)/Aii; /for printf("线性方程组的解为:n"); for(i=1;i<=n;i+) printf("x%d=%lfn",i,Xi); a=getchar(); return 0;(4)LU分解法: 源代码:#include<stdio.h>#include<math.h>int main() double p,A1212,x12,L1212,R1212,b12,y12; int n,i,j,k,m; printf("请输入方程组的阶数(小于等于10)
28、:n"); scanf("%d",&n); for(i=1;i<=n;i+) printf("请输入系数矩阵的第%d行:n",i);for(j=1;j<=n;j+)scanf("%lf",&Aij); /for printf("请输入右端向量b:n"); for(i=1;i<=n;i+) scanf("%lf",&bi); for(j=1;j<=n;j+) R1j=A1j;/上三角矩阵R的第一行为A的第一行 for(i=2;i<=n
29、;i+) Li1=Ai1/R11;/求出L的第一列 for(k=2;k<=n-1;k+) for(j=k;j<=n;j+)p=0.0; for(m=1;m<=k-1;m+)p=p+Lkm*Rmj;Rkj=Akj-p;/forfor(i=k+1;i<=n;i+) p=0.0; for(m=1;m<=k-1;m+)p=p+Lim*Rmk; Lik=(Aik-p)/Rkk;/for /for p=0.0; for(j=1;j<=n-1;j+)/求Rnn p=p+Lnj*Rjn; Rnn=Ann-p; y1=b1;/回代过程求y for(k=2;k<=n;k+
30、) p=0.0;for(j=1;j<=k-1;j+)p=p+Lkj*yj;yk=bk-p; /for xn=yn/Rnn;/回代过程求方程解x for(k=n-1;k>=1;k-) p=0.0;for(j=k+1;j<=n;j+)p=p+Rkj*xj;xk=(yk-p)/Rkk; /for printf("线性方程组的解为:n"); for(i=1;i<=n;i+) printf("x%d=%.3lfn",i,xi); getchar(); return 0;五、实验结果:程序运行结果:(1)Gauss消元法:请输入方程的阶数(小
31、于等于8):3请输入增广矩阵第1行:0.001 2.000 3.000 1.000请输入增广矩阵第2行:-1.000 3.712 4.623 2.000请输入增广矩阵第3行:-2.000 1.072 5.643 3.000线性方程组的解为:x1=-0.490x2=-0.051x3=0.368Process returned 0 (0x0) execution time : 57.365 sPress any key to continue.(2)Gauss列主元素消元法:请输入方程的阶数(小于等于8):3请输入增广矩阵第1行:0.001 2.000 3.000 1.000请输入增广矩阵第2行:
32、-1.000 3.712 4.623 2.000请输入增广矩阵第3行:-2.000 1.072 5.643 3.000线性方程组的解为:x1=-0.490x2=-0.051x3=0.368Process returned 0 (0x0) execution time : 57.365 sPress any key to continue.(3)Gauss完全主元素消元法:请输入方程的阶数(小于等于8):3请输入增广矩阵第1行:0.001 2.000 3.000 1.000请输入增广矩阵第2行:-1.000 3.712 4.623 2.000请输入增广矩阵第3行:-2.000 1.072 5.6
33、43 3.000线性方程组的解为:x1=-0.491x2=-0.051x3=0.367Process returned 0 (0x0) execution time : 57.365 sPress any key to continue.(4)LU分解法:请输入方程组的阶数(小于等于10):3请输入系数矩阵的第1行:0.001 2.000 3.000请输入系数矩阵的第2行:-1.000 3.712 4.623请输入系数矩阵的第3行:-2.000 1.072 5.643请输入右端向量b:1.000 2.000 3.000线性方程组的解为:x1=-0.490x2=-0.051x3=0.368Pro
34、cess returned 0 (0x0) execution time : 47.830 sPress any key to continue.六、结果分析:通过对不同方法比较可知:(1)运算的简单程度:高斯消元法>列主元素消元法>完全主元素消元法,同时LU分解法的运算量与高斯消元法差不多。(2)运算精确度:高斯消元法解方程的时候,用做除法的小主元素可能使舍入误差增加,而完全主元素消元法和列主元素消元法可以避免采用绝对值小的主元素,使高斯消元法有较好的数值稳定性,减小舍入误差。同时通过对程序分析可知完全主元素消元法比列主元素更精确些。七、心得体会: 将一种数学方法转化为程序还应考
35、虑它的通用性,应将程序设计成通用性高,能够解决一类问题而不是一种问题,这才是一个计算机专业人员应该考虑的。实验地点指导教师 太原理工大学学生实验报告学院名称计算机科学与技术学院专业班级学号学生姓名实验日期成绩课程名称计算机数值方法实验题目实验三 线性方程组的迭代求解法1、 实验目的和要求:(1)实验目的:使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。 10X1-X2-2X3=7.2 -X1+10X2-2X3=8.3 -X1-X2+5X3=4.2(2)实验要求:1.应用C,C+或JAVA编出通用程序,源程序要有详细的注释和说明;2.比较计算结果,对不同方法进行比较分析;3.实验完成,
36、提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训。2、 实验内容和原理:(1)雅克比迭代:基本思想:对线性方程组AX=b的系数矩阵A可逆且主对角元素均不为0,令D=diag(a11,a22,a33,.ann),并将A分解成A=(A-D)+D,从而方程组可写为DX=(D-A)X+b,令X=B1X+f1,其中B1=I-AD-1,f1=bD-1,以B1为迭代矩阵的迭代法公式:X(k+1)=B1X(k)+f1,称为雅克比迭代法。(2)高斯赛德尔迭代法:基本思想:由雅克比迭代法可知,在迭代的每一步都是用X(k)的全部分量来计算X(k+1)的所有分量,在计算Xi(
37、k+1)时,Xi(k+1)(i=0,1,.i-1)没有被利用。因此,对这些最新计算出来的第k+1次近似X(k+1)的分量加以利用,就得到解方程组的高斯赛德尔迭代法。3、 主要仪器设备: 笔记本电脑4、 操作方法:源代码:(1)雅克比迭代法:#include<stdio.h>#include<math.h>int main() double e,m,q,A1212,x012,x112;/*x0和x1分别表示第k次和第k+1次迭代结果,且初始x0=0*/ int n,i,j,k; printf("请输入方程组的阶数(小于等于10):n"); scanf(
38、"%d",&n); for(i=1;i<=n;i+) printf("请输入增广矩的第%d行:n",i);/逐行输入增广矩阵,并对x0赋初值 for(j=1;j<=n+1;j+) scanf("%lf",&Aij); x0i=0.0; /forprintf("请输入误差限e:n");scanf("%lf",&e);for(i=1;i<=n;i+)/*按照迭代公式x1i=(Ain+1-Aij*x0j)/Aii(1<=i<=n,j!=i,k=0,
39、1,2,3.)计算求解*/ m=0.0; for(j=1;j<=i-1;j+) m=m+Aij*x0j; for(j=i+1;j<=n;j+) m=m+Aij*x0j; x1i=(Ain+1-m)/Aii;/forq=0.0;/q为x1与x0间的误差for(i=1;i<=n;i+) q=q+fabs(x1i-x0i);while(q>e) /*当不满足精度要求则执行迭代过程*/ for(i=1;i<=n;i+) x0i=x1i; for(i=1;i<=n;i+) m=0.0; for(j=1;j<=i-1;j+) m=m+Aij*x0j; for(j=
40、i+1;j<=n;j+) m=m+Aij*x0j; x1i=(Ain+1-m)/Aii;/forq=0.0;for(i=1;i<=n;i+) q=q+fabs(x1i-x0i);/whileprintf("线性方程组的解为:n");for(i=1;i<=n;i+) printf("x%d=%.4lfn",i,x1i);return 0;(2)高斯赛德尔迭代法: #include<stdio.h>#include<math.h>int main() double e,m,q,A1212,x012,x112;/*x0
41、和x1分别表示第k次和第k+1次迭代结果,且初始x0=0*/ int n,i,j,k; printf("请输入方程组的阶数(小于等于10):n"); scanf("%d",&n); for(i=1;i<=n;i+) printf("请输入增广矩的第%d行:n",i);/逐行输入增广矩阵,并对x0赋初值 for(j=1;j<=n+1;j+) scanf("%lf",&Aij); x0i=0.0; /forprintf("请输入误差限e:n");scanf("%
42、lf",&e);for(i=1;i<=n;i+)/*按照迭代公式x1i=(bi-Aij*x1j-Aij*x0j)/Aii(1<=i<=n,j!=i,k=0,1,2,3.)计算求解*/ m=0.0; for(j=1;j<=i-1;j+) m=m+Aij*x1j; for(j=i+1;j<=n;j+) m=m+Aij*x0j; x1i=(Ain+1-m)/Aii;/forq=0.0;/q为x1与x0间的误差for(i=1;i<=n;i+) q=q+fabs(x1i-x0i);while(q>e) /*当不满足精度要求则执行迭代过程*/ f
43、or(i=1;i<=n;i+) x0i=x1i; for(i=1;i<=n;i+) m=0.0; for(j=1;j<=i-1;j+) m=m+Aij*x1j; for(j=i+1;j<=n;j+) m=m+Aij*x0j; x1i=(Ain+1-m)/Aii;/forq=0.0;for(i=1;i<=n;i+) q=q+fabs(x1i-x0i);/whileprintf("线性方程组的解为:n");for(i=1;i<=n;i+) printf("x%d=%.4lfn",i,x1i);return 0;5、 实验结
44、果: 程序运行结果:(1)雅克比迭代法:请输入方程组的阶数(小于等于10):3请输入增广矩的第1行:10 -1 -2 7.2请输入增广矩的第2行:-1 10 -2 8.3请输入增广矩的第3行:-1 -1 5 4.2请输入误差限e:0.0005线性方程组的解为:x1=1.0999x2=1.1999x3=1.2999Process returned 0 (0x0) execution time : 36.599 sPress any key to continue.(2)高斯赛德尔迭代法:请输入方程组的阶数(小于等于10):3请输入增广矩的第1行:10 -1 -2 7.2请输入增广矩的第2行:-1
45、 10 -2 8.3请输入增广矩的第3行:-1 -1 5 4.2请输入误差限e:0.0005线性方程组的解为:x1=1.1000x2=1.2000x3=1.3000Process returned 0 (0x0) execution time : 65.704 sPress any key to continue.6、 结果分析:(1)当系数矩阵A为严格对角优势矩阵时雅克比迭代法和高斯赛德尔迭代法均收敛。(2)通过对两种方法进行比较,高斯赛德尔是对雅克比的进一步改进,雅克比每迭代一次需计算一次矩阵和向量的乘法,在计算机中需两组存储单元用来存放 X(k)和X(k+1)。高斯赛德尔对新计算出来的X
46、(k+1)加以利用,只需一组存储单元来存放近似解,且收敛更快。(3)所以在两种方法都收敛的情况下,高斯赛德尔比雅克比方法收敛更快,但二者都可得到较为准确的近似解。七、心得体会: 设计程序时在实现功能的同时还应考虑设计一个友好的用户界面,当需要输入信息时给以必要的提示。实验地点指导教师太原理工大学学生实验报告学院名称计算机科学与技术学院专业班级学号学生姓名实验日期 成绩课程名称计算机数值方法实验题目实验四 矩阵特征值与特征向量问题1、 实验目的和要求:(1)实验目的: 使用幂法求A模为最大的特征值及其相应的特征向量。A=2351034361(2)实验要求: 1.应用C,C+或JAVA编出通用程序
47、,源程序要有详细的注释和说明; 2.比较计算结果,对不同方法进行比较分析; 3.实验完成,提交实验结果并写出报告,分析计算结果是否符合问题的要求,找出计算成功的原因或计算失败的教训。2、 实验内容和原理: 基本原理:幂法是一种由已知的非零向量x0和矩阵A的乘幂构造向量序列Xk以计算矩阵A的按模最大特征值及其对应特征向量的迭代算法。在计算过程中常采用把每步迭代的向量Xk进行规范化,迭代公式为:Yk=Ax(k-1),m(k)=max(Yk),x(k)=Y(k)/m(k),(k=1,2,3.),则最大特征值近似取m(k),最大特征向量近似取x(k).3、 主要仪器设备: 笔记本电脑4、 操作方法:源
48、代码:#include<stdio.h>#include<math.h>int main() double s,m,lm,mk,e,A1111,x11,y11; int n,i,j,k; printf("请输入矩阵的阶数(小于等于10):n"); scanf("%d",&n); for(i=1;i<=n;i+) printf("请输入第%d行:n",i); for(j=1;j<=n;j+) scanf("%lf",&Aij);printf("请输入误差限:n");scanf("%lf",&e);printf("请输入初始向量:n");for(i=1;i<=n;i+)scanf("%lf",&xi);k=0;mk=0;do k=k+1; /k代表迭代次数 lm=mk; mk=0; for(i=1;i<=n;i+)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《迈向健康之径:课件导航》
- 初二下册政治知识点总结模版
- 《邯郸特色》课件
- 《滑倒预防措施》课件
- 线的认识教学设计
- 《医疗风险防范》课件
- 幼儿园端午节亲子活动小总结模版
- 《中文课程与教学法》课件
- 分享文案情绪管理
- 初一新生代表发言稿模版
- 钢构制品加工协议
- 化肥农药种子购销合同
- 临床护理实践指南2024版
- 儿童糖尿病酮症酸中毒诊疗指南(2024)解读
- 病毒蛋白相互作用
- 2019鲁教版高中地理选择性必修第一册《第二单元 地形变化的原因》大单元整体教学设计2020课标
- 2023年嘉兴海宁水务集团下属企业招聘工作人员考试真题
- 高中英语外研版 单词表 必修1
- 2024年动物疫病防治员(高级)技能鉴定理论考试题库(含答案)
- 凉山州彝族留守儿童心理教育现状及对策
- 知道网课智慧《自动化生产线实训》测试答案
评论
0/150
提交评论