博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
<转>线性方程组求解
阅读量:5059 次
发布时间:2019-06-12

本文共 2721 字,大约阅读时间需要 9 分钟。

//解线性方程组#include
#include
#include
//----------------------------------------------全局变量定义区const int Number=15; //方程最大个数double a[Number][Number],b[Number],copy_a[Number][Number],copy_b[Number]; //系数行列式int A_y[Number]; //a[][]中随着横坐标增加列坐标的排列顺序,如a[0][0],a[1][2],a[2][1]...则A_y[]={0,2,1...};int lenth,copy_lenth; //方程的个数double a_sum; //计算行列式的值char * x; //未知量a,b,c的载体//----------------------------------------------函数声明区void input(); //输入方程组void print_menu(); //打印主菜单int choose (); //输入选择void cramer(); //Cramer算法解方程组void gauss_row(); //Gauss列主元解方程组void guass_all(); //Gauss全主元解方程组void Doolittle(); //用Doolittle算法解方程组int Doolittle_check(double a[][Number],double b[Number]); //判断是否行列式>0,若是,调整为顺序主子式全>0void xiaoqu_u_l(); //将行列式Doolittle分解void calculate_u_l(); //计算Doolittle结果 double & calculate_A(int n,int m); //计算行列式double quanpailie_A(); //根据列坐标的排列计算的值,如A_y[]={0,2,1},得sum=a[0][ A_y[0] ] * a[1][ A_y[1] ] * a[2][ A_y[2] ]=a[0][0]*a[1][2]*a[2][1];void exchange(int m,int i); //交换A_y[m],A_y[i]void exchange_lie(int j); //交换a[][j]与b[];void exchange_hang(int m,int n); //分别交换a[][]和b[]中的m与n两行void gauss_row_xiaoqu(); //Gauss列主元消去法void gauss_all_xiaoqu(); //Gauss全主元消去法void gauss_calculate(); //根据Gauss消去法结果计算未知量的值void exchange_a_lie(int m,int n); //交换a[][]中的m和n列void exchange_x(int m,int n); //交换x[]中的x[m]和x[n]void recovery(); //恢复数据//主函数void main(){ int flag=1; input(); //输入方程 while(flag) { print_menu(); //打印主菜单 flag=choose(); //选择解答方式 }}//函数定义区void print_menu(){ system("cls"); cout<<"------------方程系数和常数矩阵表示如下:\n"; for(int j=0;j
>lenth; if(lenth>Number) { cout<<"It is too big.\n"; return; } x=new char[lenth]; for(i=0;i
>a[i][j]; cin>>b[i]; } //备份数据 for(i=0;i
>choice; switch(choice) { case 1:cramer();break; case 2:gauss_row();break; case 3:guass_all();break; case 4:Doolittle();break; case 5:return 0; default:cout<<"输入错误,请重新输入:"; choose(); break; } cout<<"\n是否换种方法求解(Y/N):"; cin>>ch; if(ch=='n'||ch=='N') return 0; recovery(); cout<<"\n\n\n"; return 1;}//用克拉默法则求解方程.void cramer() { int i,j;double sum,sum_x;char ch; //令第i行的列坐标为i cout<<"用克拉默(Cramer)法则结果如下:\n"; for(i=0;i
i) l++; for(p=1,i=0;i
a[maxi][j]) maxi=i; if(maxi!=k) exchange_hang(k,maxi);// for(i=k+1;i
a[maxi][ maxj]) { maxi=i; maxj=j; } } if(maxi!=k) exchange_hang(k,maxi); if(maxj!=k) { exchange_a_lie(maxj,k); //交换两列 exchange_x(maxj,k); } for(i=k+1;i
=0;i--) { for(j=i+1,sum_ax=0;j

转载于:https://www.cnblogs.com/zhangdongsheng/archive/2011/03/27/1997082.html

你可能感兴趣的文章
Activity启动过程中获取组件宽高的五种方式
查看>>
java导出Excel表格简单的方法
查看>>
SQLite数据库简介
查看>>
利用堆实现堆排序&amp;优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>
unity3d根据手机串号和二维码做正版验证
查看>>
二十六、Android WebView缓存
查看>>
django Models 常用的字段和参数
查看>>
linux -- 嵌入式linux下wifi无线网卡驱动
查看>>
SVN使用教程总结
查看>>
SQL中varchar和nvarchar有什么区别?
查看>>
OpenCV矩阵运算总结
查看>>