高斯-约当(Gauss-Jordan)消元法——c++代码实现
2017-04-09 23:23
375 查看
具体算法的详细原理请参照此篇博客:高斯-约当(Gauss-Jordan)消元法
下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见。——大神勿喷呀,我是一个小菜鸟~
自己编写的代码,所以不是很规范,希望大家多提意见,谢谢!
下面是具体c++代码,不保证程序最优化,提供一个可行的程序,供大家改进,同时感谢大家提意见。——大神勿喷呀,我是一个小菜鸟~
void Guss_Jordan(int n,double *a)//阶数n 系数矩阵a { double*a_temp = new double[n*n * 2];//a与单位矩阵的组合 double *temp = new double[n*n];//单位矩阵 for (int i = 0; i < n; i++)//生成对应的单位矩阵 { for (int j = 0; j < n; j++) { if (i==j) { *(temp + i*n + j) = 1; } else { *(temp + i*n + j) = 0; } } } for (int i = 0; i < n; i++)//把a与单位矩阵组合 { for (int j = 0; j < 2*n; j++) { if (j>n-1) { *(a_temp+i*n*2+j) = *(temp + i*n + j - n); } else { *(a_temp + i*n * 2 + j) = *(a+i *n + j); } } } delete[]temp;//释放临时空间 for (int i = 0; i < n; i++) { double m = *(a_temp + i*n * 2 + i);//把对角线元素当做分母 if (m==0)//对角线元素不能为0 { cout << "程序失败,对角线元素为0"; return; } for (int j = 0; j < 2*n; j++) { *(a_temp + i*n * 2 + j) = *(a_temp + i*n * 2 + j) / m;//对角线元素化为1 } for (int k = i+1; k < n; k++) { double Multiples = *(a_temp + k * 2 * n + 0);//每行减去的倍数 for (int j = 0; j < 2 * n; j++)//化简每行 { *(a_temp + k * 2 * n + j) = *(a_temp + k * 2 * n + j) - Multiples*(*(a_temp + (k - 1) * 2 * n + j));//由对角线元素化简本列 } } for (int k = i; k >0; k--) { double Multiples =*(a_temp+(k-1)*n*2+k) /(*(a_temp + k * 2 * n + k));//每行减去的倍数 for (int j = 0; j < 2 * n; j++)//化简前对应列面行 { *(a_temp + (k-1) * 2 * n + j) = *(a_temp + (k-1) * 2 * n + j) - Multiples*(*(a_temp + k * 2 * n + j));//由行首元素化简本列其他元素 } } } cout << "逆矩阵为:\n"; for (int i = 0; i < n; i++)//输出逆矩阵 { for (int j = 0; j < 2 * n; j++) { if (j>n - 1)//只输出逆矩阵 { cout << a_temp[i * 2 * n + j]<<'\t'; } } cout << endl; } delete[]a_temp; }
自己编写的代码,所以不是很规范,希望大家多提意见,谢谢!
相关文章推荐
- 高斯消元法 & 高斯-约当 (Gauss-Jordan) 消元法
- C/C++语言实现矩阵求逆运算—高斯约化/消元法
- 选主元的高斯-约当(Gauss-Jordan)消元法解线性方程组和求逆矩阵
- 高斯-约当 (Gauss-Jordan) 消元法 [学习笔记]
- 高斯-约当(Gauss-Jordan)消元法
- 选主元的高斯-约旦(Gauss-Jordan)消元法解线性方程组/求逆矩阵
- 使用C/C++实现Socket聊天程序(代码+实验报告)
- C++ + WMI + DDK 实现获得显卡信息 代码
- Singleton模式的C++实现研究(示例代码)
- 用C/C++实现SMC动态代码加密技术
- 代码--C++全排列和子集的实现
- Singleton模式的C++实现研究(示例代码)
- Singleton模式的C++实现研究(示例代码)
- 用C/C++实现SMC动态代码加密技术
- 用vim实现C++代码的自动补全功能
- C++基本算法收集及代码实现
- 用C/C++实现SMC动态代码加密技术
- 三元组Triplet的C++代码(类)实现
- Symbian下用C++实现网页浏览的代码
- 用C/C++实现SMC动态代码加密技术