#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
#define e 0.00000001
#define maxn 50 int n;//规模nXn
double a[maxn][maxn];//系数矩阵
double b[maxn];//b矩阵
double m[maxn][maxn];//中间变量矩阵
double x[maxn];//最终解
int H=;//扩大H被结算(优化)
/*
读取数据
*/
void read(){
cout<<"请输入系数矩阵规模n:= ";
cin>>n;
cout<<"|-----------------------------\n";
cout<<"|请输入系数矩阵,如:\n";
cout<<"|1.1348 3.8326 1.1651 3.4017\n";
cout<<"|0.5301 1.7875 2.5330 1.5435\n";
cout<<"|3.4129 4.9317 8.7643 1.3142\n";
cout<<"|1.2371 4.9998 10.6721 0.0147\n";
cout<<"|-----------------------------\n";
for(int i=;i<=n;i++)
for(int j=;j<=n;j++){
cin>>a[i][j];
a[i][j]*=H;
}
cout<<"|-----------------------------\n";
cout<<"|请输入b矩阵,如:\n";
cout<<"|9.5342 6.3941 18.4231 16.9237\n";
cout<<"|-----------------------------\n";
for(int i=;i<=n;i++){
cin>>b[i];
b[i]*=H;
}
} /*
中间矩阵输出
参数:消元次数
*/
void PrintProc(int cases){
printf("--------第%d次消元结果如下:\n",cases);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
cout<<setw()<<a[i][j]<<' ';
}
cout<<setw()<<b[i]<<'\n';
}
cout<<"END THIS SHOW-------------\n";
} /*
显示结果
*/
void Print(){
cout<<"|-----------------------------\n";
cout<<"|结果为:\n";
for(int i=;i<=n;i++){
printf("x[%d]= %lf\n",i,x[i]);
}
cout<<"|-----------------------------\n\n";
} /*
顺序消元法
*/
void ShunXuXiaoYuan(){
//消元计算
for(int k=;k<n;k++){
for(int i=k+;i<=n;i++){
m[i][k]=a[i][k]/a[k][k];
for(int j=k+;j<=n;j++){
a[i][j]-=m[i][k]*a[k][j];
}
}
for(int i=k+;i<=n;i++){
b[i]-=m[i][k]*b[k];
}
PrintProc(k);//输出中间计算过程
}
//回代求解
x[n]=b[n]/a[n][n];
for(int i=n-;i>;i--){
x[i]=b[i];
for(int j=i+;j<=n;j++)
x[i]-=a[i][j]*x[j];
x[i]/=a[i][i];
}
//输出结果
Print();
} /*
列主消元
*/
void LieZhuXiaoYuan(){
for(int k=;k<n;k++){
//选主元[这一列的绝对值最大值]
double ab_max=-;
int max_ik;
for(int i=k;i<=n;i++){
if(abs(a[i][k])>ab_max){
ab_max=abs(a[i][k]);
max_ik=i;
}
}
//交换行处理[先判断是否为0矩阵]
if(ab_max<e){//0矩阵情况
cout<<"det A=0\n";
break;
}else if(max_ik!=k){//是否是当前行,不是交换
double temp;
for(int j=;j<=n;j++){
temp=a[max_ik][j];
a[max_ik][j]=a[k][j];
a[k][j]=temp;
}
temp=b[max_ik];
b[max_ik]=b[k];
b[k]=temp;
}
//消元计算
for(int i=k+;i<=n;i++){
a[i][k]/=a[k][k];
for(int j=k+;j<=n;j++){
a[i][j]-=a[i][k]*a[k][j];
}
b[i]-=a[i][k]*b[k];
}
PrintProc(k);//输出中间计算过程
if(k<n-)continue;
else{
if(abs(a[n][n])<e){
cout<<"det A=0\n";
break;
}else{//回代求解
x[n]=b[n]/a[n][n];
for(int i=n-;i>;i--){
x[i]=b[i];
for(int j=i+;j<=n;j++)
x[i]-=a[i][j]*x[j];
x[i]/=a[i][i];
}
//输出结果
Print();
}
}
}
} /*
主函数
*/
int main(){
while(){
read();
LieZhuXiaoYuan();
//ShunXuXiaoYuan();
}return ;
}
/*
书上高斯消元的例子:
1 1 1
1 3 -2
2 -2 1 6 1 1
*/
/*
书上列主消元的例子:
-0.002 2 2
1 0.78125 0
3.996 5.5625 4 0.4 1.3816 7.4178
*/

[算法] 高斯消元法 列主消元法 C++ 代码的更多相关文章

  1. javascript数据结构与算法--散列

    一:javascript数据结构与算法--散列  一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...

  2. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  3. C++算法之大数加法计算的代码

    如下代码段是关于C++算法之大数加法计算的代码,希望对大家有用. { int length; int index; int smaller; int prefix = 0; if(NULL == sr ...

  4. jeecg 主-附表生成代码例子

    jeecg 主-附表生成代码例子 - CSDN博客https://blog.csdn.net/u010411264/article/details/51243277 JEECG Online Codi ...

  5. JavaScript数据结构与算法-散列练习

    散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...

  6. 【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解

    01 概述 Greedy Randomized Adaptive Search,贪婪随机自适应搜索(GRAS),是组合优化问题中的多起点元启发式算法,在算法的每次迭代中,主要由两个阶段组成:构造(co ...

  7. 《算法导论》第二章demo代码实现(Java版)

    <算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...

  8. Gauss列主消元

    问题:1.列主消元为什么精度高? 2.fabs函数精确度 #include<iostream> #include<cstdio> #include<cstring> ...

  9. 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法

    算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...

随机推荐

  1. Python延迟打印字符

    我想让python打印类似“正在加载...”,每个句号打印出来与它们之间的睡眠时间0.5秒间隔 实现方法: 1 2 3 4 5 6 7 8 9 10 11 #!/bin/env python # -* ...

  2. iOS响应者链和事件传递机制

    原文来自:http://www.cnblogs.com/zhw511006/p/3517248.html 响应者链(Responder Chain) 通常,一个iOS应用中,在一块屏幕上通常有很多的U ...

  3. 分布式Apache ZooKeeper-3.4.6集群安装

    fesh个人实践,欢迎经验交流!本文Blog地址:http://www.cnblogs.com/fesh/p/3900253.html Apache ZooKeeper是一个为分布式应用所设计的开源协 ...

  4. [转载] 4. JebAPI 之 jeb.api.ui

    本文转载自: https://www.zybuluo.com/oro-oro/note/145250 JebInstance可以通过getUI()方法来获得jeb.api.ui.JebUI. JebU ...

  5. lucene中模糊搜索的应用场景

    模糊搜索:wildCardQuery的时候,是用* 表示全部,?表示一个字符,那么直接用*搜索,就能查到当前索引文件的全部数据个数 这里搜索查到的个数和用工具查到的个数是一致的...

  6. Linux编程下EAGAIN和EINTR宏的含义及处理

    Linux中的EAGAIN含义   在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). linux下使用write\send ...

  7. C#拼接地图瓦片

    为了在AE程序中使用离线的电子地图,思路如下: 利用下载工具下载地图切片,然后利用C#进行切片拼接成一张图片,最后使用ArcMap进行地理配准,然后发布成ArcGIS Server 切片服务供程序使用 ...

  8. textarea 怎么固定大小,不让调整

    1:彻底禁用拖动(推荐) resize: none; 2:只是固定大小,右下角的拖动图标仍在 width: 200px; height: 100px; max-width: 200px; max-he ...

  9. 技术英文单词贴--R

    R redirect 重定向,改变方向 reference 参考,提及,引用 register 注册,登记,挂号 render 渲染 represent 代表,象征 route 路线,路由,通道 ro ...

  10. centos6.5 安装cmake 3.3.2

    os:centos6.5 cmake版本:3.3.2 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel perl 下载cmake 使用wget工具 ...