直接法解线性方程组报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
直接法解线性方程组报告

全选主元算法: 输入方程组维数n,矩阵a,右端项b和控制精度eps; 初始化用于标记方程组解顺序的数组flag,flag[i]:=i(i=0:N-1) 对于r=0:n-2 |a(p,q)|=max|a(x,y)|(r=xn,y=rn) %全选主元 如果|a(p,q)|eps则停止 %控制小主元 如果p=r,则转(4),否则 a(p,r:n-1) a (r,r:n-1) ; b(p) b(r) %换行 如果q=r,则转(5),否则 a(r:n-1,r) a(r:n-1,q) ;flag(q) flag(r) %换列 a(r+1:n-1,r+1:n-1):=a(r+1:n-1,r+1:n-1)-a(r+1:n-1,r)*a(r,r+1:n-1)/a(r,r) b(r+1:n-1)=b(r+1:n-1)-a(r+1:n-1,r)*b?/a(r,r) %按行消元 如果|a(n-1,n-1)|=eps则停止 %无解 b(n-1):=b(n-1)/a(n-1,n-1), 对于i=n-2:-1:1,b(i):=[b(i)-a(i,i+1:n-1)*b(i+1:n-1)]/a(i,i) %回带求解 5.输出解b(0:n-1) Gauss全选主元解方程组的源程序及运行结果 #include iostream #include stdlib.h #include math.h using namespace std; class Matrix { public: Matrix(); ~Matrix(); void SetMatrix(const int n,const double esp1);//构造线性方程组相应的矩阵,n为方程的未知数数目,esp1为要求的精度 void Max(const int r);//全选主元 void ChangeRC(const int r);//根据主元变换矩阵的行或列 void Eliminate(const int r);//处理消元工作 void Result()const;//计算方程的解 void Calculate(); int GetRank()const;//返回矩阵的行数 double GetX(const i)const;//确定方程组的第i个解(1=i=N) private: //指针a和b分别用于存储方程组的未知数系数和方程=右边的常数,esp存//储精度 double *a,*b,esp; //指针flag用于记录方程组解的顺序 int *flag; //以下的结构体用于在全选主元中记录最大主元的位置 struct coordinate { int row,column; }location; int N;//方程组未知数的数目 }; int main() { int n; double esp1; Matrix matrix; do{ cout请输入方阵的阶数:; cinn; if(n0) n=0;//如何控制非法字符的输入?????????? }while(n==0); do { cout请输入计算精度:; cinesp1; if(esp10) esp1=0;//输入不合法的精度就把精度置0 }while(esp1==0); cout输入线性方程组的增广矩阵:\n; matrix.SetMatrix(n,esp1);//设置矩阵内的数据 matrix.Calculate();//计算方程组的解 //输出方程组的解 cout\n\n方程组的解如下:\n; for(int i=1;i=matrix.GetRank();++i) coutX[i]:matrix.GetX(i)endl; return 0; } Matrix::Matrix() { //将Matrix类的数据成员初始化 a=NULL; b=NULL; flag=NULL; location.row=0; location.column=0; esp=0; N=0; } Matrix::~Matrix() { //释放指针a、b和flag指向的内存空间 delete[]a; delete[]b; delete[]flag; } void Matrix::SetMatrix(const int n,const double esp1) { N=n; esp=esp1; a=new double[N*N]; b=new double[N]; flag=new int[N]; //判断是否成功分

文档评论(0)

taotao0b + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档