zoukankan      html  css  js  c++  java
  • 求一个n元一次方程的解,Gauss消元

    求一个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 ]

  • 相关阅读:
    jmeter-配置元件---计数器
    jmeter进行数据库测试
    jmeter取样器--FTP测试计划
    配置元件--HTTP授权管理器
    配置元件--HTTP Cookie Manager
    配置元件--HTTP Cache Manager
    配置元件-HTTP信息头管理器
    配置元件--csv data config
    jmeter-线程组
    jmeter-测试计划
  • 原文地址:https://www.cnblogs.com/caoke/p/10451181.html
Copyright © 2011-2022 走看看