您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 东北大学数值分析第一次实验报告
数值分析实践报告姓名学号班级指导教师开设学期开设时间报告日期2015年5月16日评定成绩评定人评定日期东北大学软件学院1实验一:1.实验目的1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤或k(予给的迭代次数),对迭代法敛散性的意义;4、体会初始解x,松弛因子的选取,对计算结果的影响。2.实验环境使用平台:MicrosoftVisualC++使用语言:C++3.实验关键代码(1)存放系数矩阵double**A=newdouble*[n];for(i=0;in;i++)A[i]=newdouble[n];cout请输入4阶系数矩阵A:endl;for(i=0;in;i++)for(j=0;jn;j++)cinA[i][j];(2)迭代算法voidDiedai(intn,double**A,doubleb[],doublee,doublew,doubleX[]){inti,j,flag;double*t=newdouble[n];double*Y=newdouble[n];double*X_T=newdouble[n];cout矩阵为:endl;cout**************************endl;for(i=0;in;i++){for(j=0;jn;j++)coutA[i][j]'\t';coutendl;}cout**************************endl;for(intk=0;k2000;k++){2flag=0;for(i=0;in;i++){Y[i]=0;for(j=0;jn;j++){if(i!=j)Y[i]=Y[i]+A[i][j]*X[j];}X_T[i]=(1-w)*X[i]+w*(b[i]-Y[i])/A[i][i];t[i]=fabs(X[i]-X_T[i]);X[i]=X_T[i];}for(i=0;in;i++)if(t[i]=e)flag++;if(flag==n){cout迭代次数为:endl;cout(k+1)endl;break;}}if(k==2000)cout超出最大迭代次数2000!endl;delete[]t;delete[]X_T;delete[]Y;}注:以上仅是关键算法的代码,不是完整代码。4.实验结果依次输入7个超松弛因子,结果如下:因子为0.15时,需要迭代44次;3因子为0.45时,需要迭代17次;因子为0.75时,需要迭代10次;因子为1.0时,需要迭代6次;4因子为1.25时,需要迭代6次;因子为1.5时,需要迭代32次;因子为1.75时,需要迭代超过2000次。超松弛迭代法收敛速度的快慢与松弛因子的选择有密切关系,迭代次数随着超松弛因子增加先减少再增加。5实验二:1.实验目的1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤或k(予给的迭代次数),对迭代法敛散性的意义;4、体会初始解x,松弛因子的选取,对计算结果的影响。2.实验环境使用平台:MicrosoftVisualC++使用语言:C++3.实验关键代码(1)系数矩阵的定义cout请输入矩阵的规格(?X?):;cinmatrixNum;matrixA=allocMem(matrixNum*matrixNum);matrixD=allocMem(matrixNum*matrixNum);matrixL=allocMem(matrixNum*matrixNum);matrixU=allocMem(matrixNum*matrixNum);B=allocMem(matrixNum*matrixNum);f=allocMem(matrixNum);x=allocMem(matrixNum);6xk=allocMem(matrixNum);b=allocMem(matrixNum);coutendlendlendl请输入矩阵中各元素值(为matrixNum*matrixNum,共计matrixNum*matrixNum个元素):endl;for(i=0;imatrixNum;i++){cout请输入矩阵中第i+1行的matrixNum个元素:;for(j=0;jmatrixNum;j++)cin*(matrixA+i*matrixNum+j);}(2)高斯列主元素消去法voidGaussLineMain(double*A,double*x,double*b,intnum){inti,j,k;for(i=0;inum-1;i++){doublelineMax=fabs(*(A+i*num+i));intlineI=i;for(j=i;jnum;j++)if(fabs(*(A+j*num+i))fabs(lineMax))lineI=j;for(j=i;jnum;j++){lineMax=*(A+i*num+j);*(A+i*num+j)=*(A+lineI*num+j);*(A+lineI*num+j)=lineMax;//b中对应元素做交换lineMax=*(b+i);*(b+i)=*(b+lineI);*(b+lineI)=lineMax;}if(*(A+i*num+i)==0)continue;for(j=i+1;jnum;j++){doubletemp=-*(A+j*num+i)/(*(A+i*num+i));for(k=i;knum;k++)*(A+j*num+k)+=temp*(*(A+i*num+k));*(b+j)+=temp*(*(b+i));}}doubledeterminantA=1;for(i=0;inum;i++)determinantA*=*(A+i*num+i);if(determinantA==0){coutendlendl通过计算,矩阵A的行列式为|A|=0,即A没有唯一解。\n程序退出...endlendl;exit(0);}7for(i=num-1;i=0;i--){for(j=num-1;ji;j--)*(b+i)-=*(A+i*num+j)*(*(x+j));*(x+i)=*(b+i)/(*(A+i*num+i));}}(3)雅可比迭代算法voidJacobi(double*x,double*xk,double*B,double*f,intnum,inttime){intt=1,i,j;while(t=time){for(i=0;inum;i++){doubletemp=0;for(j=0;jnum;j++)temp+=*(B+i*num+j)*(*(x+j));*(xk+i)=temp+*(f+i);}for(i=0;inum;i++)*(x+i)=*(xk+i);t++;}}(4)分配内存空间double*allocMem(intnum){double*head;if((head=newdouble[num])==NULL){cout内存空间分配失败,程序终止运行!endl;exit(0);}returnhead;}注:以上仅是关键算法的代码,不是完整代码。4.实验结果结果如图:8则答案如下:第二问:稳定种群数量为(8481,,2892,1335,601,141)第三问:x迭代后x5=-259,所以无法达到。5.实验总结1、超松弛迭代法收敛速度的快慢与松弛因子的选择有密切关系;2、迭代次数随着超松弛因子增加先减少再增加;3、在实际计算中,可采用试算方法来确定较好的松弛因子。
本文标题:东北大学数值分析第一次实验报告
链接地址:https://www.777doc.com/doc-2792850 .html