计算数值方法试验报告太原理工大学_第1页
计算数值方法试验报告太原理工大学_第2页
计算数值方法试验报告太原理工大学_第3页
计算数值方法试验报告太原理工大学_第4页
计算数值方法试验报告太原理工大学_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算数值方法实验报告实验地点综合楼六层606室指导教师王峥5号TATYW4 UNIVERSITY OF TECHNOLOGY计算数值方法实验报告学院:计算机与软件学院 专业:计算机与科学技术 班级:计算机学号:1111111111姓名:某某太原理工大学学生实验报告学院名称计算机科学与技术专业班级计算机学号1111111111学生姓名实验日期2011-6-13成绩课程名称数值计算方法实验题目实验一二分法、课题名称方程求根:熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x3+4x2-10=0在1,2内的一个实根,且要求满足精度 |x

2、-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<b如果f(a+b)/2=0 ,该点就是零点,如果f(a+b)/2<0, 则在区间(a+b)/2 , b)内有零点,(a+b)/2=>a ,从开始继 续使用中

3、点函数值判断。如果f(a+b)/2>0,则在区间(a,(a+b)/2) 内有零点,(a+b)/2<=b ,从开始继续使用中点函数值判断。这样就可以不断接近零点。通过每次把f(x)的零点所在小区间收缩一半的方法,使区间的两个端点逐步迫近 函数的零点,以求得零点的近似值四、结构程序设计#include <iostream>#include <cmath>using namespace std;double f(double x)return x*x*x + 4*x*x - 10;int main()(double t1 = 1,t2 = 2;double t =

4、 (t1+t2)/2;while (fabs(f(t) >= 1.0/2/1000)(if(f(t1)*f(t)<=0)(t2=t;t=(t1+t2)/2;else if(f(t)*f(t2)<=0)(t1=t;t=(t1+t2)/2;cout<<t<<endl;return 1;结果:五、结果讨论和分析在编写这个程序的时候我感觉到了在编写的过程中的不易,在编写的过程中我改变初 值然后运行,发现在初值的改变对运行时间的影响不大,结果没有影响。ocuBeiitsdiyi ti. exe*在调试的过程中发现自己还是很粗心,容易犯很简单的错误。在今后的学习中

5、应该做编写 程序。中气 : VDorweuts and Set tingsAdBini str at or My1.36523Process returned 1 <0x1 > execution tiirie : 7.188 s Press any key to continue.123X114012 x28241X3130.359.1431X159.175.2916.13012 X246 .7811 .2952X311211 X424215X1287210x274836X371261120x4321X17121X25+ +a- -(n=5,10,100121 Xn 1512Xn

6、5学院名称计算机科学与技术专业班级计算机学号 1111111111学生姓名某某课程名称数值计算方法、课题名称线性方程组的直接解法实验日期2011-6-13成绩实验题目实验二线性方程组的直接解法合理利用Gauss消元法、LU分解法、追赶法求解下列方程组:二、目的和意义(1) 了解线性方程组常见的直接解法,如 Guass消元法、LU分解法、追赶法。(2) 加深对线性方程组求解方法的认识,掌握算法。(3) 会进行误差分析,并能对不同方法进行比较。四、计算公式高斯分解法:将原方程组化为三角形方阵的方程组:l ik =aik /a kka ij = aij - l ik* a kj k=1,2,n-1i

7、=k+1,k+2,- ,n j=k+1,k+2,- ,n+1由回代过程求得原方程组的解:X n= a nn+1/ a nn计算数值方法实验报告x k=( a kn+i- Eakj x j)/ a kk (k=n-l,n-2,,2,1)五、结构程序设计#include "stdio.h"double a1515,a01515;double b15,b015,l15;int n;void displayA()printf("n");for(int j=1;j<=n;j+)for(int i=1;i<=n;i+)printf("a%d%d

8、=%f ",j,i,aji);printf("b%d=%fn",j,bj);for(int m=1;m<=n;m+)printf("l%d=%f ",m,lm);printf("n");int main()FILE *f;int i,j,k;f=fopen("Gaussdata2.txt","r");fscanf(f,"%d",&n);for(i=1;i<=n;i+)for(j=1;j<=n;j+)fscanf(f,"%lf&qu

9、ot;,&aij);a0ij=aij;fscanf(f,"%lf',&bi);b0i=bi;displayA();fclose(f);k=1;dofor(i=1;i<=n;i+)(if(i=k) continue;li=a0ik/a0kk;for (j=k+1;j<=n;j+) akj=a0kj/a0kk;bk=b0k/a0kk;for(i=1;i<=n;i+)(if(i=k) continue;for(j=k+1;j<=n;j+)aij=a0ij-li*a0kj;bi=b0i-li*b0k;displayA();for(i=1;i&l

10、t;=n;i+)(for(j=k+1;j<=n;j+)a0ij=aij;b0i=bi;if(k=n) break;k+;while(1);for(i=1;i<=n;i+)printf("b%2d=%lfn",i,bi);getchar();#计算数值方法实验报告六、结果讨论和分析 第一题答案:9exe1 J1J=1-000600Li21 11=0.000000L3111-2>000060allC2J=2-0B00B0 aE2r21=1.000000 a E3H21=4.000000 a 11E31 =3.090000 2C3=2.000000 aL33J-

11、1.800e0O bLi 1=14-000000 bE21=8.000000 b31-13.CB060011 0.000000 1(2 >0.000003 lt3 J-0.皿皿hil 1 =1 .G0QQ&Q k 21 11-0.000080 Li31-2.00Q00玖1 2 1=2.0 明丽 0 a21C21=1,000000 a(3L21-0-000Q00all J3J=3.BBnnp)n a23=2.600000 a3135.Q00Q00briJ=14.e0QB8BhT21=8.000000b 3IS. 00000011J=0.Q0060Q 1L2=0.006900 1E3

12、J=2.Q00B001 !-!. 000000Li21-0.000000Li 3 Jtl J =2.08000BMlW曲明施 aE2J21-1.060009 a(3H2 1=0.000000a 1) 3 J =-1.000000 a213-2.000000a3133-5.0800B0b11=2.000000bL2=8,000090bE3J=-15-088000111=2.0000801E2=0.000000=0.B0O000Lil !-!. 000000 2JtlJ=0.000000 Li 3 11=2.000000a(1J23-2.000000 aL2 H2J=1.0B00B0aE3 E2

13、1=0.000003aLiicaii.wmna a2133=2.000000aL331=-5.900000bU-1.000000 b2=2.000000b3=3,000Q0011=0.200000 lf2=-0,400000 13-0.00000011-1.009000b 2=2.000800b 3】=3皿施典M "<:Documents and SettingstAdminktrator.SSit&J5计算作业l第二篇GS第二慝kgwZexE"al Hl =0,000000 aLl J 2 1=1971333333333333 .b000 00 aLl 3

14、J=-0.142281 aU4=0. 335412 hri=6.995879aC2Hl-5,291Aflfi 戒2 】【2】=-W4303M666666674.nn朋丽 a23 )=0,050727 a(24 A .03B5?4 b2=l,9B7087a3 H1=11.2000S0 at3 H21=-22078933333333324.G000fi0 a31E3 3=6.029663 a3J41 = -027083 b3 =-1?.418?70a4HM,B00000 a4 )12 1=1971333333333331.500000 aU3E3 .039482 "4】t4= 01350

15、2 bL4=10-425999111-0.023597 12=0-008413 13=2.11&B02 lf4J=0.172395a Cl Hl 1=0.000000 al J 21=197133333333333 3.500000 atl 3 =-0.142281 ad 4=0. 335412 hri=3.545464a2JLl=-5,291Ofl0 "2 】【2 J-TM43 目 324666666674 一 M 朋丽 a(23 )=0.05072? a(2J4-B .03B574 bt21=1,590275a3 H1=11.2000S0 at3 H21=-2207893

16、3333333324.G000M0 af313 3=6.029663 a3J4 = -0.427083 b3=-15-055327a 4J 13=1,000000 a4 L2 =-19?1333333333331.500000 aU 3 J =1.039482 a14=l, 013502 b141=10-287103113=0.330943 1(2=Q.038O6Q 13l=-0.421393 114=0-172395bl 11-3.545464bL 21=1.5?02?5 b 3 =-15.055327 bt U=ia.2B7103c、卜tADocu m enti dhd SettihgAA

17、d m inistrdtQ rvtS 佐业'第二黝 G51第三 £gs .exeM11E1 J.00fM03125OQ0静21】=8,丽购丽a2L21-3.Q0600Batl31=3.250008a23=B.n00000a211=0.000000hl J0.b21=-l.«3H3-3.80S000b3-0.5bi (4 H1 >12.00090 ,圆曲跚 1(1=0.1290 12J=0.0Q0O0 13-2.O0E000 14=4,030800a412-0.060000aI43=8.00000044>1,000000b411all Hl J =4.00

18、0009 06000kL2Cl-ft.Q0B0M 0BQ0Q0aLJJtll=4.6S0803alL2JO.S00003a13=9.2S0000aisnsi-i.QMoeaa3K2J=b.H06003a3H3 =2 _B0B000a3n41=3.SQOB0QaL4J11=12.600030 .6O0S091±J-1.1250001C21-0.0O0QB013 3-fl.56088014 J-4_90S80Bhi 13=1.eQGQQQ b 2J=-1.0000Q b 3J=i.皿国丽 hf 4J=-l.B0m0a42=0.a60B00a4L3 J=8.0000fiQaC41t4=l.

19、QeB800fatal=-i.bt+J=-l在编写这个程序的时候我感觉到了在编写的过程中的不易,在编写的过程中我改变初值然 后运行,发现在初值的改变对运行时间的影响不大,结果没有影响。在调试的过程中发现自己还是很粗心,容易犯很简单的错误。在今后的学习中应该做编写 程序。学院名称计算机科学与技术专业班级计算机学号 1111111111学生姓名某某课程名称数值计算方法实验日期实验题目2011-6-13成绩实验三线性方程组的迭代解法课题名称线性方程组的迭代解法使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。”10x1 x2 2x3 =7.2一x1 +10 x2 2x3 =8.3-x1 x2

20、 +5x3 =4.2-赛德尔迭代法二、目的和意义学习使用雅可比迭代法或高斯三、计算公式雅克比迭代法:设线性方程组Ax=b的系数矩阵A可逆且主对角元素311,3 22,ann均不为零,令D=diag( 311,3 22,,a nn)并将A分解成A=(A-D)+D从而线性方程组可写成Dx=(D-A)x+b则有迭代公式x(k+1)=Bx(k)+f1其中 B=I-D-1A,f 1=D1b四、结构程序设计/雅可比#include<iostream>#include<cmath>#include<iomanip>using namespace std;#define M

21、 100/*最大允许的迭代次数*/double fanshu(double *p,int n)/*求向量无穷范数的函数 */计算数值方法实验报告double n1;int i;n1=fabs(p0);for(i=1;i<n;i+)(if(fabs(pi)>n1)n1=fabs(pi);return(n1);void jac(double *s,double *g,int size,double eps)/*雅可比迭代函数 */(int i,j,k;double *b,*x0,*x1,*x1_x0,n2,t;/*b用来表示迭代矩阵,x1_x0表示迭代前后向量x0与x1的差向量*/b=

22、new double*size;/* 动态分配二维数组 */for(i=0;i<size;i+)bi=new doublesize;for(i=0;i<size;i+)for(j=0;j<size;j+)bij=0;x0=new doublesize;/*动态分配一维数组 */x1=new doublesize;x1_x0=new doublesize;for(i=0;i<size;i+)(gi=gi/sii;for(j=0;j<size;j+)(if(i=j)continue;bij=-sij/sii;for(i=0;i<size;i+)/*选择初始向量及

23、构造迭代条件*/(x0i=0;x1i=1;x1_x0i=x1i-x0i;k=0;n2=fanshu(x1 x0,size);/味差向量的无穷范数 */while(n2>=eps)&&(k<M)/* 迭代计算 */(for(i=0;i<size;i+)x0i=x1i;for(i=0;i<size;i+)(t=0;for(j=0;j<size;j+)t=t+bij*x0j;x1i=t+gi;x1_x0i=x1i-x0i;n2=fanshu(x1_x0,size); /*求差向量的无穷范数*/k+;/*k用丁记录累加的次数*/for(i=0;i<s

24、ize;i+)cout<<setprecision(7)<<"x"<<i<<"="<<x1i<<endl;cout<<"迭代了 "<<k<<"次"<<endl;int main()(double *s,*a,eps;int size,m,l;cout<<”输入精度:"<<endl;cin>>eps;cout<<”输入方程解数:"&

25、lt;<endl;cin>>size;a=new doublesize;/*动态分配二维数组 */s=new double*size;for(l=0;l<size;l+)sl=new doublesize;cout<<”输入要矩阵"<<endl;for(l=0;l<size;l+)for(m=0;m<size;m+)cin>>slm;cout<<”输入系数矩阵"<<endl;for(l=0;l<size;l+)cin>>al;cout<<"

26、diao yong ya ke bi han shu "<<endl;jac(s,a,size,eps);return 0;学院名称计算机科学与技 术专业班级计算机学号1111111111学生姓名某某实验日期2011-6-20成绩课程名称数值计算方法实验题目实验四最小二乘法拟合多项式一、课题名称(1) 了解矩阵特征值与特征向量问题解法,掌握籍法。(2) 加深对矩阵特征值与特征向量问题求解方法的认识,掌握算法。(3) 会进行误差分析。二、目的和意义学习使用最小二乘法拟合多项式三、计算公式籍法:由已知的非零向量x0和矩阵A的乘籍构造向量序歹U xn以计算矩阵 A的按模最大特征

27、值及其特征向量的方法,称为籍法。迭代公式:A x k _i=m ax ( y k ), k1, 2,.xk结果可取四、结构程序设计#include <iostream>#include <cmath>const int N(3);using namespace std;void matrixx(double ANN,double xN,double yN) / 求y的值for(int i=0;i<N;i+)yi=0;for(int j=0;j<N;j+)yi+=Aij*xj;double m(double yN)( / 求m的值,即y的最大值double m

28、ax;for(int i=0;i<N-1;i+) max=yi>yi+1?yi:yi+1;return max;void main()(cout<<"矩阵:"<<endl<<"|2 -1 0|"<<endl;cout<<"|-1 2 -1|"<<endl;cout<<"|0 -1 2|"<<endl;double AN=2,-1,0,-1,2,-1,0,-1,2; /矩阵 A (3*3)double xN=1

29、,1,1;/已知非零向量 x0double yN=0,0,0,uN=0,0,0,pN=0,0,0;double e=1e-2,delta=1;int k=0; / 计数器while(delta>=e)for(int q=0;q<N;q+) pq=yq;matrixx(A,x,y);for(int i=0;i<N;i+) ui=yi/(m(y);delta=fabs(m(y)-m(p);k+;for(int l=0;l<N;l+) xl=ul;cout<<"迭代次数是:"<<k<<endl;cout<<&

30、quot;特征值为:"<<m(y)<<endl;cout<<" 特征向量为:"<<"("cout<<u0<<","<<u1<<","<<u2;cout << ")" << endl;23五、结果讨论和分析分析:籍法是一种求任意矩阵A的按模最大特征值及其对应特征向量的迭代 算法。该方法的最大优点是计算简单,容易在计算机上实现,对稀疏矩阵较为 适合,但有时收敛

31、速度很慢。实验地点综合楼六层606室指导教师王峥学院名称计算机科学与技 术专业班级计算机学号1111111111学生姓名某某实验日期2011-6-20成绩课程名称数值计算方法实验题目实验五代数插值一、课题名称使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。x0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.25386目的和意义学习使用拉格朗日插值法或牛顿插值法求解计算公式设函数在区间a,b上n+1互异节点Xo,Xi,Xn上的函数值分别为y0,y

32、1,,y n,求n次插值多项式Pn(x),满足条件Pn(Xj)=yj, j=0,1,门令Ln(x)=y ol o(x)+y il i(x)+ +ynl n(x)= 12 yil i(x)其中lo(x),l l(x), ,l n(x)为以xo,x 1,,x n为节点的n次插值基函数,则Ln(x)是一次数不超过n的多项式,且满足Ln(x j)=y j, L=0,1,,n再由插值多项式的唯一性,得Pn(x)三 Ln(x)四、结构程序设计变量x和函数值y的结构 最多二十组数据牛顿插值法,用以返回插商#include<stdio.h> #include<stdlib.h> #in

33、clude<iostream.h> typedef struct data ( float x; float y;Data;/Data d20;/float f(int s,int t)/(if(t=s+1)return (dt.y-ds.y)/(dt.x-ds.x); elsereturn (f(s+1,t)-f(s,t-1)/(dt.x-ds.x);float Newton(float x,int count)(int n;while(1)(cout<<" 请输入n值(即n次插值):"/获得插值次数 cin>>n;if(n<=c

34、ount-1)/插值次数不得大丁 count 1次break;else system("cls");float t=1.0;float y=d0.y;float yt=0.0;for(int j=1;j<=n;j+)(t=(x-dj-1.x)*t;yt=f(0,j)*t;y=y+yt;return y;float lagrange(float x,int count)(float y=0.0;for(int k=0;k<count;k+)/这儿默认为 count 1 次插值(float p=1.0;/ 初始化 pfor(int j=0;j<count;j+

35、)(/计算p的值if(k=j)continue;/判定是否为同一个数p=p*(x-dj.x)/(dk.x-dj.x);y=y+p*dk.y;/ 求和return y;/ 返回y的值void main()(float x,y;int count;while(1)(cout<<"请输入xi,yi的组数,不得超过20组:”;/要求用户输入数据组数cin>>count;if(count<=20)break;/ 检查输入的是否合法system("cls");/获得各组数据for(int i=0;i<count;i+)(cout<&l

36、t;"请输入第"<<i+1<<"组x的值:"cin>>di.x;cout<<"请输入第"<<i+1<<"组y的值:"cin>>di.y;system("cls");cout<<"请输入x的值:”;/获得变量x的值cin>>x;while(1)(int choice=3;cout<<"请您选择使用哪种插值法计算:"<<endl;cout&

37、lt;<" (0):退出"<<endl;cout<<"(1):Lagrange"<<endl;cout<<”(2):Newton"<<endl;cout<<"输入你的选择:"cin>>choice;/ 取得用户的选择项if(choice=2)(cout<<"你选择了牛顿插值计算方法,其结果为:"y=Newton(x,count);break;/调用相应的处理函数if(choice=1)(cout<&

38、lt;"你选择了拉格朗日插值计算方法,其结果为:y=lagrange(x,count);break;/调用相应的处理函数if(choice=0)break;system("cls");cout<<"输入错误!!"<<endl;cout<<x<<" ,"<<y<<endl;/输出最终结果五、结果讨论和分析分析:拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项 式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的 浪费。实

39、验地点综合楼六层606室指导教师王峥学院名称计算机科学与技术专业班级计算机学号 1111111111学生姓名某某课程名称数值计算方法、课题名称实验日期2011-6-20实验题目实验六成绩最小二乘法拟合多项式给定数据点(Xi y),用最小二乘法拟合数据的多项式,并求平方误差。Xi00.50.60.70.80.91.0yi11.751.962.192.442.713.00、目的和意义1. 熟练运用已学计算方法求解方程组2. 加深对计算方法技巧,选择正确的计算方法来求解各种方程组3. 培养使用电子计算机进行科学计算和解决问题的能力 二、计算公式建立正规方程组:习(习 x/+k) ak=EXijyi

40、, j=0,1, -,n平方误差:I =习(习 akXi k-y i)2四、结构程序设计#include<iostream.h>#include<fstream.h>#define N 15double power(double &a,int n)double b=1;for(int i=0;i<n;i+)b*=a;return b;void Gauss();double XN,YN,sumXN,sumYN,aNN,bN,lNN,xN;void main()ofstream outdata;ifstream double s;int i,j,k,n,ind

41、ex;cout<<"请输入已知点的个数n="cin>>n;cout<<endl;cout<<"请输入X和Y:"<<endl; /输入给定数据for(i=0;i<n;i+)cout<<"X"<<i<<”=”;cin>>Xi;sumX1+=Xi;cout<<"Y"<<i<<"="cin>>Yi;sumY1+=Yi;cout<<endl;cout<<"sumX1="<<sumX1<<"t"<<"sumY1="<<sumY1<<endl;cout<<"请输入拟合次数index="cin>>index;cout<<endl;i=n;sumX0=i;for(i=2;i<=2*index;i+)sumXi=0;for(j=0;j<n;j+)s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论