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 根 ...
随机推荐
- Allegro 串扰仿真
利用于博士的那个电路板,看一下cadence软件的串扰仿真,我们选取3跟信号线,见下图. U6.N3-R36-U7.56 U6.P3-R36-U7.54 U6.P2-R36-U7.53 下面启动sig ...
- 较完整checkstyle.xml及说明
具体项的具体说明请参考:https://www.cnblogs.com/ziyuyuyu/p/9870717.html 梳理此次完整checkstyle.xml说明,以备以后再此基础上删减 <? ...
- php核心技术与最佳实践 --- 错误与异常
<?php /*php error*/ /* * 异常和错误的概念不一样 * 在PHP里,遇到任何自身错误都会触发一个错误,而不是抛出异常(对于一些情况,会同时抛出异常和错误) * 异常处理机制 ...
- 概念理解_L2范数(欧几里得范数)
L1范数 L1范数是指向量中各个元素绝对值之和 L2范数 L2范数.欧几里得范数一些概念. 首先,明确一点,常用到的几个概念,含义相同. 欧几里得范数(Euclidean norm) ==欧式长度 = ...
- mysql中间件proxysql实现mysql读写分离
目录 1. mysql实现读写分离的方式 2. ProxySQL简介 3. ProxySQL安装 4. ProxySQL的Admin管理接口 5. 和admin管理接口相关的变量 5.1 admin- ...
- Flink架构(一)- 系统架构
1. 系统架构 Flink是一个分布式系统,用于有状态的并行数据流处理.也就是说,Flink会分布式地运行在多个机器上.在分布式系统中,常见的挑战有:如何对集群中的资源进行分配与管理.协调进程.数据存 ...
- 题解【2.23考试T2】str
2. str [题目描述] 这是一道传统题,源代码的文件名为 str.cpp/c/pas. 构造 n 个 01 字符串 S1...Sn,使得对于任意 i≠j,Si 不是 Sj 的前缀.在最小化串长和的 ...
- [lua]紫猫lua教程-命令宝典-L1-01-09. string字符串函数库
L1[string]01. ASCII码互转 小知识:字符串处理的几个共同的几点 1.字符串处理函数 字符串索引可以为负数 表示从字符串末尾开始算起 所有字符串处理函数的 字符串索引参数都使用 2.所 ...
- 问题 B: 奇怪的电梯
问题 B: 奇怪的电梯 时间限制: 1 Sec 内存限制: 128 MB[命题人:admin] 题目描述 大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0& ...
- Linux - Shell - find - 进阶: 范围
概述 继续昨天的 find 背景 还有一些 过滤条件 1. 约束: 目录层数 概述 约束目录的层级 选项 -maxdepth 作用 约束最大目录层级 相对路径 -mindepth 作用 约束最小目录层 ...