Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 720|回复: 0

Java高精度线性方程组[高斯消元]

[复制链接]

该用户从未签到

发表于 2011-9-13 20:15:00 | 显示全部楼层 |阅读模式
import java.util.*;import java.math.*;class fraction{//分数类    BigInteger a, b;//a/b,b>0;    fraction(){//构造函数1        a = new BigInteger("0");        b = new BigInteger("1");    }    fraction(BigInteger val){//构造函数2        a = new BigInteger(val.toString());        b = new BigInteger("1");    }    fraction(String a){      this.a=new BigInteger(a);       this.b=new BigInteger("1");    }       fraction( BigInteger a0, BigInteger b0){//构造函数3        this.a = a0; this.b = b0;        this.reduction();    }    fraction(String a,String b){       this.a=new BigInteger(a);       this.b=new BigInteger(b);       this.reduction();    }    fraction( fraction other){        this.a=new BigInteger(other.a.toString());        this.b=new BigInteger(other.b.toString());    }    void reduction(){//化简        BigInteger tmp = a.gcd( b );//其值是 abs(a) 和 abs(b) 的最大公约数。        a = a.divide( tmp );        b = b.divide( tmp );        if( b.compareTo( BigInteger.ZERO ) == - 1 )        {            b = b.multiply( BigInteger.valueOf( -1 ));            a = a.multiply( BigInteger.valueOf( -1 ));        }    }    fraction add( fraction t ){//加一个        fraction tmp = new fraction( a.multiply( t.b ).add( b.multiply( t.a )) , b.multiply(t.b) );        tmp.reduction();        return tmp;    }    fraction sub( fraction t ){//减        fraction tmp = new fraction( a.multiply( t.b ).subtract( b.multiply( t.a )) , b.multiply(t.b) );        tmp.reduction();        return tmp;    }    fraction mult( fraction t){//乘        fraction tmp = new fraction( a.multiply( t.a ), b.multiply( t.b ));        tmp.reduction();        return tmp;    }    fraction div( fraction t){//除        fraction tmp = new fraction( a.multiply( t.b ), b.multiply( t.a ));        tmp.reduction();        return tmp;    }    fraction abs(){        fraction tmp=new fraction(this);        tmp.a=tmp.a.abs();        return tmp;    }    void show(){        this.reduction();        if( b.compareTo( BigInteger.ONE ) == 0 )            System.out.println(a);        else            System.out.println(a+"/"+b);    }       boolean Biger( fraction p )    {        return this.sub(p).a.compareTo(BigInteger.ZERO)==1;    }    int zero()    {        this.reduction();        return this.a.compareTo(BigInteger.ZERO);    }}public class Main{     public static void main(String args[]){      /*2x1+2x2-x3=6       * x1-2x2+4x3=4       *5x1+7x2+x3=28       */       fraction a[][]={{ new fraction("2"),new fraction("2"),new fraction("-1")},                       { new fraction("1"),new fraction("-2"),new fraction("4")},                       { new fraction("5"),new fraction("7"),new fraction("1")}};       fraction b[]={new fraction("6"),new fraction("3"),new fraction("28")};       gauss_cpivot(3,a,b);       for(int i=0;i< 3;i++){            b.show();       }               }    static boolean gauss_cpivot(int n,fraction a[][],fraction b[])    {//高斯消元法解方程组,有唯一解返回true,结果放在b[]中,否则返回false        int i,j,k,row=0;        for(k=0;k< n;++k)        {            fraction maxp=new fraction();            for(i=k;i< n;++i)                if(a[k].abs().Biger(maxp.abs()))                {                    row=i;                    maxp=new fraction(a[k]);                }            if(maxp.abs().zero()==0)return false;            if(row!=k)            {                for(j=k;j< n;++j)                {                    fraction t=new fraction(a[k][j]);                    a[k][j]=a[row][j];                    a[row][j]=t;                }                fraction t=new fraction(b[k]);                b[k]=b[row];                b[row]=t;               }            for(j=k+1;j< n;++j)            {                a[k][j]=a[k][j].div(maxp);                for(i=k+1;i< n;++i)                    a[j]=a[j].sub(a[k].mult(a[k][j]));            }            b[k]=b[k].div(maxp);            for(i=k+1;i< n;++i)                b=b.sub(b[k].mult(a[k]));                }        for(i=n-1;i>=0;--i)            for(j=i+1;j< n;++j)                b=b.sub(b[j].mult(a[j]));        return true;    }   }[/pre]
运行:
1
3
2
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2024-5-5 00:12 , Processed in 0.371080 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表