求一个n元一次方程的解,Gauss消元

const Matrix=require(‘./Matrix.js‘)

/*Gauss 消元
传入一个矩阵,传出结果
*/
function Gauss(matrix){
    let l=[];//是否为自由元
    let ans=[];//存储解
    const n=matrix.Column-1;//解的个数
    const EPS=0.00001;
    let res=0,r=0;
    for(let i=0;i<matrix.Column;i++){
        for(let j=r;j<matrix.Row;j++){
            if(Math.abs(matrix.getItem(j,i))>EPS){
                if(j!==r){
                    //行交换位置
                    for(let k=i;k<=n;k++){
                        const temp1=matrix.getItem(j,k)
                        const temp2=matrix.getItem(r,k)
                        matrix.setItem(j,k,temp2)
                        matrix.setItem(r,k,temp1)
                    }
                }
                break;
            }
        }
        // console.log(matrix.toString(),r,i)
        if(Math.abs(matrix.getItem(r,i)<EPS)){
            ++res;
            console.log(‘continue‘)
            continue;
        }
        //方程相减,消除元
        for(let j=0;j<matrix.Row;j++){
            if(j!==r&&Math.abs(matrix.getItem(j,i))>EPS){
                let tmp=matrix.getItem(j,i)/matrix.getItem(r,i);
                for(let k=i;k<=n;k++){
                    const item=matrix.getItem(j,k)-tmp*matrix.getItem(r,k)
                    matrix.setItem(j,k,item)
                }

            }
        }
        l[i]=true;
        r++;
    }
    //输出答案
    for(let i=0;i<n;i++){
        if(l[i]){
            for(let j=0;j<n;j++){
                if(Math.abs(matrix.getItem(j,i))>0){
                    ans[i]=matrix.getItem(j,n)/a.getItem(j,i)
                }
            }
        }
    }
    return ans;
}

//x+y+z=6
//x+2y+z=8
//x+2y+3z=15

const a=new Matrix([
    1,1,1,4,
    1,2,1,6,
    1,2,1,6,
    1,2,3,10
],4,4);
console.log(Gauss(a))

[ 0, 2, 2 ]

原文地址:https://www.cnblogs.com/caoke/p/10451181.html

时间: 2024-11-05 17:40:01

求一个n元一次方程的解,Gauss消元的相关文章

Gauss 消元(模板)

1 /* 2 title:Gauss消元整数解/小数解整数矩阵模板 3 author:lhk 4 time: 2016.9.11 5 没学vim的菜鸡自己手打了 6 */ 7 #include<cstdio> 8 #include<iostream> 9 #include<cstring> 10 #include<algorithm> 11 #include<cmath> 12 #define clr(x) memset(x,0,sizeof(x

hdu 5755(GAuss 消元)

Gambler Bo Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1152    Accepted Submission(s): 471Special Judge Problem Description Gambler Bo is very proficient in a matrix game. You have a N×M m

【Luogu】P3389高斯消元模板(矩阵高斯消元)

题目链接 高斯消元其实是个大模拟qwq 所以就着代码食用 首先我们读入 for(int i=1;i<=n;++i) for(int j=1;j<=n+1;++j) scanf("%lf",&s[i][j]); 读入肯定没什么问题(不过我在这卡了一分多钟) 然后我们要进行消元操作 所谓消元操作其实就是对于输入的矩阵 比如说 9 3 2 2 1 4 7 3 1 3 4 5 进行一番乱搞,使得第当前枚举的(比如说枚举第i行第i列)s[i][j]系数变成1. 实际上就是整行

[bzoj1013][JSOI2008]球形空间产生器sphere-题解[高斯消元]

Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. Input 第一行是一个整数n(1<=N=10).接下来的n+1行,每行有n个实数,表示球面上一点的n维坐标.每一个实数精确到小数点后6位,且其绝对值都不超过20000. Output 有且只有一行,依次给出球心的n维坐标(n个实数),两个实数之间用一个空格隔开.每个实数精确到

gauss消元

题意描述:有n个星球,m台望远镜.每台望远镜有一个开始时间和结束时间,但只给出了月.日的信息,没有给出年份,每台望远镜记录了它所观测的星球上发生的各类事件的次数.每类事件持续的时间是恒定的,且不会超过365天,不管在哪个星球上发生.告诉你每台望远镜的起止时间,和它观测到的各类时间发生的次数.问每类事件持续多长时间?可能有多个解,输出一个可行解即可. 数据范围:n<200,m<200 分析:设第i类时间持续的时间为xi,第i个望远镜的观测时间长度为Ci,它观测到的各类事件发生的次数为fi,则第i

POJ1830开关问题——gauss消元

题目链接 分析: 第一个高斯消元题目,操作是异或.奇偶能够用0.1来表示,也就表示成bool类型的方程,操作是异或.和加法没有差别 题目中有两个未知量:每一个开关被按下的次数(0.1).每一个开关的转换次数. 题目仅仅和操作次数的奇偶有关,所以用0.1表示之后,对于每一个开关的转换次数就已经知道了.所以仅仅有一个未知量.能够线性表示.练习使用模板 const int maxn = 40; int a[maxn][maxn]; int gauss(int N, int M) { int r, c,

P3317 [SDOI2014]重建 变元矩阵树定理 高斯消元

传送门:https://www.luogu.org/problemnew/show/P3317 这道题的推导公式还是比较好理解的,但是由于这个矩阵是小数的,要注意高斯消元方法的使用: #include <algorithm> #include <iterator> #include <iostream> #include <cstring> #include <cstdlib> #include <iomanip> #include

51nod1446 Kirchhoff矩阵+Gauss消元+容斥+折半DFS

思路: //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; const int mod=1000000007; int cases,n,maxval,a[44][44],C[44][44],f[44],val[44],X,g[44]; int top2,top,bgn,half,cnts2[2

[ACM] hdu 2262 Where is the canteen (高斯消元求期望)

Where is the canteen Problem Description After a long drastic struggle with himself, LL decide to go for some snack at last. But when steping out of the dormitory, he found a serious problem : he can't remember where is the canteen... Even worse is t