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入门到精通教程
查看: 638|回复: 0

JAVA高精度线性方程组(高斯消元) java实例

[复制链接]

该用户从未签到

发表于 2011-9-18 15:23:45 | 显示全部楼层 |阅读模式
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;
    }
   
}
运行:
1
3
2
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 07:22 , Processed in 0.371825 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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