c++高斯消元法求解线性方程组
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
#define MaxNum 10
int unuse_result[MaxNum];
int GaussFun(int equ, int var, int result[],int array[MaxNum][MaxNum])
{
int i, j, k, col, num1, num2;
int max_r, ta, tb, gcdtemp, lcmtemp;
int temp, unuse_x_num, unuse_index;
col = ;
for (k = ; k < equ && col < var; k++, col++)//循环处理增广矩阵的各行
{
max_r = k;
for (i = k + ; i < equ; i++)
{
if (abs(array[i][col]) > abs(array[max_r][col]))
{
max_r = i;//保存绝对值最大的行
}
}
if (max_r != k)
{
for (j = k; j < var + ; j++)
{
temp = array[k][j];
array[k][j] = array[max_r][j];
array[max_r][j] = temp;
}
}
if (array[k][col] == )
{
k--;
continue;
}
for (i = k + ; i < equ; i++)
{
if (array[i][col] != )
{
num1 = abs(array[i][col]);
num2 = abs(array[k][col]);
while (num2 != )
{
temp = num2;
num2 = num1 % num2;
num1 = temp;
}
gcdtemp = num1;//最大公约数
lcmtemp = (abs(array[i][col]) * abs(array[k][col])) / gcdtemp;
ta = lcmtemp / abs(array[i][col]);
tb = lcmtemp / abs(array[k][col]);
if (array[i][col] * array[k][col] < )
{
tb = -tb;
}
for (j = col; j < var + ; j++)
{
array[i][j] = array[i][j] * ta - array[k][j] * tb;
}
}
}
}
for (i = k; i < equ; i++)
{
if (array[i][col] != )
{
return -;
}
}
if (k < var)
{
for (i = k - ; i >= ; i--)
{
unuse_x_num = ;
for (j = ; j < var; j++)
{
if (array[i][j] != && unuse_result[j])
{
unuse_x_num++;
unuse_index = j;
}
}
if (unuse_x_num > )
{
continue;
}
temp = array[i][var];
for (j = ; j < var; j++)
{
if (array[i][j] != && j != unuse_index)
{
temp -= array[i][j] * result[j];
}
}
result[unuse_index] = temp / array[i][unuse_index];
unuse_result[unuse_index] = ;
}
return var - k;
}
for (i = var - ; i >= ; i--)
{
temp = array[i][var];
for (j = i + ; j < var; j++)
{
if (array[i][j] != )
{
temp -= array[i][j] * result[j];
}
}
if (temp % array[i][i] != )
{
return -;
}
result[i] = temp / array[i][i];
}
return ;
}
int main()
{
int i, type;
int equnum, varnum;
int array[MaxNum][MaxNum] = {
{,,-,},
{,,,-},
{,-,,-} };
int result[MaxNum];
equnum = ;
varnum = ;
type = GaussFun(equnum, varnum, result,array);//调用高斯函数
if (type == -)
{
cout << "该方程无解。" << endl;
}
else if (type == -)
{
cout << "该方程又浮点数解没有整数解。" << endl;
}
else if (type > )
{
cout << "该方程有无穷多解!自由变量的数量为" << type << endl;
for (i = ; i < varnum; i++)
{
if (unuse_result[i])
{
cout << i + << "是不确定的" << endl;
}
else
{
cout << i + << result[i] << endl;
}
}
}
else
{
cout << "该方程的解为:" << endl;
for (i = ; i < varnum; i++)
{
cout << i + << result[i] << endl;
}
}
return ;
}
c++高斯消元法求解线性方程组的更多相关文章
- matlab中求解线性方程组的rref函数
摘自:http://www.maybe520.net/blog/987/ matlab中怎么求解线性方程组呢? matlab中求解线性方程组可应用克拉默法则(Cramer's Rule)即通过det( ...
- matlab 求解线性方程组之LU分解
线性代数中的一个核心思想就是矩阵分解,既将一个复杂的矩阵分解为更简单的矩阵的乘积.常见的有如下分解: LU分解:A=LU,A是m×n矩阵,L是m×m下三角矩阵,U是m×n阶梯形矩阵 QR分解: 秩分解 ...
- 【原创】开源Math.NET基础数学类库使用(06)直接求解线性方程组
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- python 求解线性方程组
Python线性方程组求解 求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了.比如我们要求以下方程的解,这是一个非齐次线性方程组: 3x_1 + x_2 - ...
- Numpy库进阶教程(一)求解线性方程组
前言 Numpy是一个很强大的python科学计算库.为了机器学习的须要.想深入研究一下Numpy库的使用方法.用这个系列的博客.记录下我的学习过程. 系列: Numpy库进阶教程(二) 正在持续更新 ...
- [Matlab]求解线性方程组
转自:http://silencethinking.blog.163.com/blog/static/911490562008928105813169/ AX=B或XA=B在MATLAB中,求解线性方 ...
- Numpy计算逆矩阵求解线性方程组
对于这样的线性方程组: x + y + z = 6 2y + 5z = -4 2x + 5y - z = 27 可以表示成矩阵的形式: 用公式可以表示为:Ax=b,其中A是矩阵,x和b都是列向量 逆矩 ...
- Numpy求解线性方程组
Numpy求解线性方程组 对于Ax=b,已知A和b,怎么算出x? 1. 引入包 2. 求解 验证
- Lapack求解线性方程组
可参见这两个页面: 1. http://www.culatools.com/dense/lapack/ 2. http://www.netlib.org/lapack/lug/node1.html 根 ...
随机推荐
- print format
python基础_格式化输出(%用法和format用法) name = 'jack' age = 18 sex = 'man' job = "IT" salary = 9999.9 ...
- 算法导论2-4 O(nlgn)时间复杂度求逆序对
def mergesort(nums,le,ri): if le>ri-2: return 0 mi=le+(ri-le)//2 a=mergesort(nums,le,mi) b=merges ...
- 线程同步器CountDownLatch
Java程序有的时候在主线程中会创建多个线程去执行任务,然后在主线程执行完毕之前,把所有线程的任务进行汇总,以前可以用线程的join方法,但是这个方法不够灵活,我们可以使用CountDownLatch ...
- AcWing 792. 高精度减法
https://www.acwing.com/problem/content/794/ #include<bits/stdc++.h> using namespace std; //判断是 ...
- 1.4 面试问题整理: ATM机取款
流程图:
- Lingo简单入门,以及对线性规划做敏感性分析设置
Lingo中用!表示注释,注释结束用;表示,lingo不区分大小写,运行时会自动统一装换成大写 编程步骤: 1.推算出正确的模型 2.确定描述集,定义集合 3.确定变量 4.正确写出每个式子 常用函数 ...
- Go_Context
如何通知子goroutine退出? 1. 使用全局变量 package main import ( "fmt" "sync" "time" ...
- 【C语言】多维数组
C 语言支持多维数组.多维数组声明的一般形式如下: type name[size1][size2]...[sizeN]; 二维数组 多维数组最简单的形式是二维数组.一个二维数组,在本质上,是一个一维数 ...
- winform学习(6)控件的对齐、比例、定位操作
窗体控件的常用操作 选中一个控件,按住Ctrl再点选另一个控件(此时编辑的是第二个控件,当使用框选选中多个控件时,编辑的是黑色锚点的控件) 代码中的居顶和居底: 控件标识符.BringToFront( ...
- 迭代器:遍历集合元素的操作. iterator()
package seday11; import java.util.ArrayList;import java.util.Collection;import java.util.Iterator; / ...