`
dacoolbaby
  • 浏览: 1265892 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java的高斯消元法

    博客分类:
  • Java
阅读更多

算法虽然会,但是用数组的形式进行求值是一件非常非常恶心的事情。

更恶心的是,公司里面的逻辑居然要用到方程组求解,万分无奈之下,上网找了一份Java代码。

谁知道居然是个算法数组从1开始的。

好吧,认了吧,我就把你改过来。

调试通过。

留个代码做纪念。

 

package com;

public class EquationSolver {

	/**
	 * @列主元高斯消去法
	 */
	static double a[][];
	static double b[];
	static double x[];
	static int n;
	static int n2; //记录换行的次数
    public static void Elimination(){  //消元
    	PrintA();
		for(int k=0;k<n;k++)
		{
			Wrap(k);
			for(int i=k+1;i<n;i++)
			{
				double l=a[i][k]/a[k][k];
				a[i][k]=0.0;
				for(int j=k+1;j<n;j++)
					a[i][j]=a[i][j]-l*a[k][j];
				b[i]=b[i]-l*b[k];
			}
			System.out.println("第"+k+"次消元后:");
			PrintA();
		}
				
	}
    public static void Back()//回代
    {
    	x[n-1]=b[n-1]/a[n-1][n-1];
    	for(int i=n-2;i>=0;i--)
    		x[i]=(b[i]-jisuan(i))/a[i][i];
    }
    public static double jisuan(int i){
    	double he=0.0;
    	for(int j=i;j<=n-1;j++)
    		he=he+x[j]*a[i][j];
    	return he;
    }
    public static void Wrap(int k){//换行
    	double max=Math.abs(a[k][k]);
    	int n1=k;                   //记住要交换的行
    	for(int i=k+1;i<n;i++)     //找到要交换的行
    	{
    		if(Math.abs(a[i][k])>max){
    			n1=i;
    			max=Math.abs(a[i][k]);
    		}
    	}
    	if(n1!=k)
    	{
    		n2++;
    	System.out.println("当k="+k+"时,要交换的行是:"+k+"和"+n1);
    	for(int j=k;j<n;j++)  //交换a的行
    	{
    		double x1;
    		x1=a[k][j];
    		a[k][j]=a[n1][j];
    		a[n1][j]=x1;
    	}
    	double b1;   //交换b的行
		b1=b[k];
		b[k]=b[n1];
		b[n1]=b1;
		System.out.println("交换后:");
		PrintA();
    	}
    }
    public static void Determinant(){//求行列式
    	double DM=1.0;
    	for(int i=0;i<n;i++)
    	{
    		double a2=a[i][i];
    	    DM=DM*a2;
    	}
    	double n3=(double)n2;
    	DM=DM*Math.pow(-1.0, n3);
    	System.out.println("该方程组的系数行列式:det A = "+DM);
    }
    public static void PrintA(){//输出增广矩阵
    	System.out.println("增广矩阵为:");
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    			System.out.print(a[i][j]+"    ");
    		System.out.print(b[i]+"    ");
    		System.out.print("\n");
    	}
    }
    public static void Print(){//输出方程的根
    	System.out.println("方程组的根为:");
    	for(int i=0;i<n;i++)
    		System.out.println("x"+i+" = "+x[i]);
    }
	public static void main(String[] args) {
		//Scanner as=new Scanner(System.in);
        System.out.println("输入方程组的元数:");
        //n=as.nextInt();
        n=2;
        a=new double[n][n];
        b=new double[n];
        x=new double[n];
        
        double inputA[][] = {{1,1},{1,-1}};
        a = inputA;
        
        double inputB[] = {2,0};
        b = inputB;
        
        double inputX[] = {1,1};
        
        System.out.println("输入方程组的系数矩阵a:");
//        for(int i=1;i<=n;i++)
//        	for(int j=1;j<=n;j++)
//        		a[i][j]=as.nextDouble();
        System.out.println("输入方程组矩阵b:");
//        for(int i=1;i<=n;i++)
//        	b[i]=as.nextDouble();
        Elimination();
        Back();
        Print();
        Determinant();
	}
}

 

分享到:
评论

相关推荐

    高斯消元法求解方程组

    在Java编程中实现高斯消元法,可以将算法与编程相结合,帮助我们自动化计算过程,提高效率。 首先,我们要理解高斯消元法的基本步骤: 1. **设置矩阵**:将方程组写成增广矩阵的形式,即在一个n×(n+1)的矩阵中,...

    高斯消元法解线性方程组

    在数值计算方法中用高斯消元法和列选主元来求线性方程组的解的C++源代码

    java 求解线性方程组 高斯列主元消去 迭代法 LU二分法

    java 求解线性方程组 高斯列主元消去 迭代法 LU二分法 import java.util.Scanner; public class Gauss { /** * @列主元高斯消去法 */ static double a[][]; static double b[]; static double x[]; ...

    顺序高斯消元法matlab.md

    顺序高斯消元法matlab

    基于Java高斯消元法实现的多项式拟合参数训练和数据拟合(源码).rar

    资源内容:基于高斯消元法实现的多项式拟合参数训练、数据拟合的Java仿真(完整源码).rar 代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 适用对象:工科生、数学专业、算法等方向学习者。 ...

    C语言程序设计实现解非齐次线性方程

    1.1 设计内容 采用阶梯矩阵找出非齐次线性方程组的增广矩阵的秩,用大小为未知量个数的双向栈存栈储自由未知量与非自由未知量,并给出在微机上运行的模拟人工解题的C语言计算程序。 1.2 要求 明确课程设计的目的,能...

    Java单精度高斯消元.doc

    《Java实现单精度高斯消元法》 高斯消元法是一种求解线性方程组的有效算法,它通过一系列基本的代数变换将线性方程组转化为阶梯形或简化阶梯形矩阵,从而方便求解。在本文中,我们将深入探讨如何使用Java编程语言...

    Java实现求解一元n次多项式的方法示例

    Java 实现求解一元 n 次多项式是 Java 编程中的一种常见操作,涉及到矩阵运算和高斯消元法等技术。本文将详细介绍 Java 实现求解一元 n 次多项式的方法,并提供相应的代码示例。 什么是一元 n 次多项式? 一元 n 次...

    数值分析实验之求解线性方程组实现

    1. **高斯消元法**:这是最基础的解法,通过行变换逐步将系数矩阵A转化为上三角矩阵或行简化阶梯形矩阵,然后通过回代求解x。在Java中,可以利用二维数组来表示矩阵,通过增广矩阵的方式进行操作。 2. **高斯-约旦...

    java 实现求行列式的值

    本篇文章将深入探讨如何使用Java语言实现高斯消元法来求解行列式的值。 首先,我们需要理解什么是行列式。行列式是矩阵的一个特殊性质,仅适用于方阵(即行数和列数相等的矩阵)。对于一个n×n的矩阵A,其行列式...

    多元一次方程组的三种算法

    在myeclipse10中,`ZgaussianEliminationMatrix.java`很可能实现了基本的高斯消元法。 3. **改进的高斯消元法(高斯-约旦消元法)**: 高斯-约旦消元法是在高斯消元法的基础上,进一步将行最简形矩阵化为单位矩阵...

    Java Guess&LU(高斯消去法/列主元高斯消去法/LU消去法求解线性方程)(数值分析)实践

    数值分析实践,高斯消去法实现求解线性方程,列主元高斯消去法实现求解线性方程,LU消去法求解线性方程,一个程序实现自主输入输出高斯/列主元高斯的对应增广矩阵,LU中L和U矩阵,最终输出计算结果,增添菜单选项,...

    Java编程Gauss消元和判断闰年

    在给定的“Java编程Gauss消元和判断闰年”主题中,我们有两个主要的知识点:Gauss消元法(一种线性代数中的解方程组的方法)和判断闰年的算法。 首先,让我们来探讨判断闰年的算法。闰年是为了调整公历与地球实际...

    Java求逆矩阵(高斯约旦法)

    本篇文章将深入探讨如何使用高斯约旦法在Java中求解逆矩阵。 高斯约ordan法是一种基于行变换将矩阵化简为阶梯形矩阵,进而得到单位矩阵的方法。逆矩阵的求解可以通过扩展矩阵的方式来实现,即将原始矩阵A与单位矩阵...

    Gaussian_高斯方程求解_plentyjx7_

    1. **源代码**:可能是用Python、C++、Java等编程语言实现的高斯消元法算法。 2. **文档**:详细说明了如何使用该工具,可能包括输入格式、输出格式以及如何处理大型矩阵。 3. **测试数据**:一组方程组和预期解,...

    计算方法 解线性方程组

    直接法通常适用于小型或中型方程组,能够得到精确解,包括高斯消元法、高斯-约旦消元法以及LU分解等。迭代法则适合于大型稀疏方程组,它通过多次迭代逐步逼近精确解,如雅可比法、高斯-塞德尔法等。 二、高斯消元法...

    列主元素高斯消去法(java 实现)(csdn)————程序.pdf

    列主元素高斯消去法是求解线性方程组的一种有效策略,它基于高斯消元法,但通过选择每列的最大绝对值元素作为主元来增加算法的稳定性。 首先,让我们理解什么是列主元素高斯消去法。当处理一个线性方程组时,我们...

    求解线性方程组的解——java实现

    高斯列主消元法 LU分解法 迭代法求解线性方程组 高斯列主消元法 LU分解法 迭代法求解线性方程组 高斯列主消元法 LU分解法 迭代法求解线性方程组 高斯列主消元法 LU分解法 迭代法求解线性方程组 高斯列主消元法 LU...

    gaosixiaoyuan.zip_gaosixiaoyuan.rar

    高斯消元法是线性代数中一种求解线性方程组的算法,它得名于数学家卡尔·弗里德里希·高斯。...而`gaosixiaoyuan.java`的代码则为我们提供了一个实现这一算法的实例,有助于我们更好地学习和应用高斯消元法。

    高斯算法易语言源码.7z

    这个"高斯算法易语言源码"压缩包文件提供了用易语言实现的高斯消元法的源代码,对于学习易语言编程和理解高斯算法的实现者来说,是一份宝贵的参考资料。 高斯算法的核心在于高斯消元法,这是一种用于求解线性方程组...

Global site tag (gtag.js) - Google Analytics