牛顿迭代法解三元二次方程组C_第1页
牛顿迭代法解三元二次方程组C_第2页
牛顿迭代法解三元二次方程组C_第3页
牛顿迭代法解三元二次方程组C_第4页
牛顿迭代法解三元二次方程组C_第5页
全文预览已结束

下载本文档

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

文档简介

1、牛顿迭代法解三元二次方程组(C+版) *方程组为:Y1=-X1+0.3X2*X3-X32+0.6=0Y2=-0.1X12-X2 +0.8X1*X3-X3+0.4=0Y3=0.3X1-0.5X22 +0.7X1*X2-X3+0.5=0 * #include<fstream>#include<iostream>#include <iomanip>#include<cmath>#include <cstdlib>#define N 3 / 非线性方程组中变量个数及方程个数const int N2=N*N; / jacobi矩阵的元素个数#d

2、efine eps 0.00001 / 收敛精度#define Max 2000 / 最大迭代次数using namespace std;double main()double x0N,yN,x1N,es,esmax,jacobiNN,aij;int i,j,k,it=0,iter=0; ofstream fpout1("d:Program FilesMicrosoft Visual StudioMyProjectsxieFCZx0.txt",ios:out); if(!fpout1)cout<<"fpout open fail!"<&

3、lt;endl;return 0; /打开文件失败则结束运行ifstream fpin("d:Program FilesMicrosoft Visual StudioMyProjectsxieFCZX0.txt",ios:in);if(!fpin)cout<<"fpin open fail!"<<endl;return 0; /打开文件失败则结束运行 ofstream fpout2("d:Program FilesMicrosoft Visual StudioMyProjectsxieFCZanswer.txt"

4、;,ios:out); if(!fpout2)cout<<"fpout open fail!"<<endl;return 0; /打开文件失败则结束运行cout<<"* Please input X0 *"<<endl; / 技巧一:为保证jacobi矩阵尽快收敛,初值最好在 0 附近for(i=0;i<N;i+)cin>>x0i;cout<<"输入的初值为:"<<endl;for(i=0;i<N;i+)cout<<x0i<

5、;<"t"cout<<endl;fpout1<<"输入的初值为:"<<endl;do it+;for(i=0;i<N;i+)fpout1<<x0i<<"t"fpout1<<endl;/jacobi have N2 element /计算jacobi矩阵的值jacobi00=0;jacobi01=0.3*x02;jacobi02=0.3*x01-2*x02;jacobi10=-0.2*x00+0.8*x02;jacobi11=0;jacobi12=0.8

6、*x00-1;jacobi20=0.3+0.7*x01;jacobi21=-x01+0.7*x00;jacobi22=0;fpout2<<"第 "<<it<<" 次jacobi矩阵是:"<<endl;for(i=0;i<N;i+) for(j=0;j<N;j+) fpout2.setf(cout.showpoint); /固定小数位数输出fpout2<<setprecision(8)<<jacobiij<<"t"fpout2<<

7、endl;fpout2<<endl;aij=0;for(i=0;i<N;i+) /计算jacobi矩阵元素的平方和aijfor(j=0;j<N;j+)aij=aij+jacobiij*jacobiij;if(aij>1)cout<<"Sorry, aij>1"<<endl;k=rand()%3; x0k=(double)rand()/RAND_MAX;cout<<endl<<"由计算机第 "<<it<<" 次随机产生初值:"&l

8、t;<endl;fpout1<<endl<<"由计算机第 "<<it<<" 次随机产生初值:"<<endl;cout<<" "for(i=0;i<N;i+) cout<<x0i<<"t" cout<<endl; while(aij>1); /保证aij<1for(i=0;i<N;i+)x1i=x0i;fpout2<<"* 牛顿迭代如下 *"<

9、<endl;fpout2<<"迭代次数 x1tt x2tt x3"<<endl<<endl;doiter=iter+1;fpout2<<" "<<iter<<" "<<"t"for(i=0;i<N;i+)fpout2<<x1i<<"t"fpout2<<endl;/迭代格式y0=0.3*x11*x12-x12*x12+0.6; y1=-0.1*x10*x10+0.8*

10、x10*x12-x12+0.4;y2=0.3*x10-0.5*x11*x11+0.7*x10*x11+0.5;/技巧二:由于要使最终的aij小于0,可让方程同除某个数使其系数小于1esmax=0.0;for(i=0;i<N;i+)es=yi-x1i;if(fabs(es)>fabs(esmax)esmax=es;if(fabs(esmax)<eps)fpout2<<endl<<endl<<"方程组的解为 : "<<endl;cout<<endl<<endl<<"方程组的解为 : "<<endl;for(i=0;i<N;i+)cout<<x1i<<"t"fpout2<<x1i<<"t"cout<<endl<<endl;fpout2<<endl;break;for(i=0;i<N;i+)x1i=yi;while(iter<Max);fpin.close();fpo

温馨提示

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

评论

0/150

提交评论