JAVA求解线性方程组-列主元高斯消去法

 1 package MyMath;
 2
 3 import java.util.Scanner;
 4
 5 public class Gauss {
 6
 7     /**
 8      * @列主元高斯消去法
 9      */
10     static double x[];
11     static double a[][];
12     static double b[];
13     static double m;
14     static int n;
15     //选主元
16     public static void SelectAndChangeLine(int k){
17         int maxline=k;
18         for(int i=k+1;i<n;i++){
19             if(Math.abs(a[i][k])>a[maxline][k]){
20                 maxline=i;
21             }
22         }
23         if(maxline!=k){
24             for(int j=0;j<n+1;j++){
25                 b[j]=a[k][j];
26                 a[k][j]=a[maxline][j];
27                 a[maxline][j]=b[j];
28             }
29         }
30     }
31     //消元计算
32     public static void Elimination(int k){
33         for(int i=k+1;i<n;i++){
34             m=a[i][k]/a[k][k];
35             a[i][k]=0;
36             for(int j=k+1;j<n+1;j++){
37                 a[i][j]=a[i][j]-m*a[k][j];
38                 //System.out.println("tt="+m*a[k][j]);
39             }
40         }
41     }
42     //回代计算
43     public static void BacksSubstitution(){
44         for(int i=n-1;i>=0;i--){
45             for(int j=n-1;j>i;j--){
46                 a[i][n]=a[i][n]-x[j]*a[i][j];
47             }
48             System.out.println(a[i][n]);
49             x[i]=a[i][n]/a[i][i];
50         }
51     }
52     //打印行
53     public static void PrintLine(double[] args){
54         for(int j=0;j<args.length;j++){
55             System.out.print(args[j]+" ");
56         }
57     }
58     //打印矩阵
59     public static void PrintMatrix(double[][] args){
60         for(int i=0;i<args.length;i++){
61             for(int j=0;j<args[i].length;j++){
62                 System.out.print(args[i][j]+" ");
63             }
64             System.out.println();
65         }
66     }
67     public static void main(String[] args) {
68         Scanner as=new Scanner(System.in);
69         System.out.println("输入方程组的元数:");
70         n=as.nextInt();
71         System.out.println("输入方程组的系数矩阵a:");
72         a=new double[n][n+1];
73         b=new double[n+1];
74         x=new double[n];
75         for(int i=0;i<n;i++){
76             for(int j=0;j<n+1;j++){
77                 a[i][j]=as.nextDouble();
78             }
79         }
80         as.close();
81         for(int i=0;i<n-1;i++){
82             SelectAndChangeLine(i);
83             System.out.println("第"+(i+1)+"次换主元");
84             PrintMatrix(a);
85             Elimination(i);
86             System.out.println("第"+(i+1)+"次消元");
87             PrintMatrix(a);
88         }
89         BacksSubstitution();
90         PrintLine(x);
91     }
92 }

代入求解:

验证正确:

时间: 2024-12-06 23:04:36

JAVA求解线性方程组-列主元高斯消去法的相关文章

[Matlab]求解线性方程组

转自:http://silencethinking.blog.163.com/blog/static/911490562008928105813169/ AX=B或XA=B在MATLAB中,求解线性方程组时,主要采用前面章节介绍的除法运算符“/”和“\”.如: X=A\B表示求矩阵方程AX=B的解: X=B/A表示矩阵方程XA=B的解. 对方程组X=A\B,要求A和B用相同的行数,X和B有相同的列数,它的行数等于矩阵A的列数,方程X=B/A同理. 如果矩阵A不是方阵,其维数是m×n,则有: m=

python 求解线性方程组

Python线性方程组求解 求解线性方程组比较简单,只需要用到一个函数(scipy.linalg.solve)就可以了.比如我们要求以下方程的解,这是一个非齐次线性方程组: 3x_1 + x_2 - 2x_3 = 5 x_1 - x_2 + 4x_3 = -2 2x_1 + 3x_3 = 2.5 import numpy as np from scipy.linalg import solve a = np.array([[3, 1, -2], [1, -1, 4], [2, 0, 3]]) b

JAVA求解大数

题目链接:CLICK HERE~ 有了Java求解大数变得如此简单,以后再也不用担心大数模板了.哦啦啦啦. import java.math.BigInteger; import java.math.BigDecimal; import java.util.Scanner; class Main{ public static void main(String args[]){ Scanner cin = new Scanner(System.in); while(cin.hasNext()){

求解线性方程组的三种基本迭代法

前言 在实际项目的一些矩阵运算模块中,往往需要对线性方程组进行求解以得到最终结果. 然而,你无法让计算机去使用克莱默法则或者高斯消元法这样的纯数学方法来进行求解. 计算机解决这个问题的方法是迭代法.本文将介绍三种最为经典的迭代法并用经典C++源代码实现之. 迭代法简介 从解的某个近似值出发,通过构造一个无穷序列去逼近精确解的方法. 雅克比迭代法 计算流程: 1. 初始化系数矩阵等计算环境 2. 设置精度控制和迭代次数控制变量 3. 采用如下式子进行迭代计算: 4. 循环执行 3,若(条件a)当前

JAVA求解全排列

一,问题描述 给定一个字符串,求出该字符串的全排列. 比如:"abc"的全排列是:abc.acb.bac.bca.cab.cba 二,实现思路 采用递归的方式求解.每次先选定一个字符,然后进行“若干次”交换,求出在选定这个字符的条件下,所有的全排列,并把字符“复位”再交换回来.至此,一趟全排列完成.第二趟,选定下一个字符,然后进行“若干次”交换,求出在选定这个字符的条件下,所有的全排列,并把字符“复位”再交换回来...... 就类似于:(参考网上的解释如下:) 设R={r1,r2,..

matlab求解线性方程组

模电题现在看来是不用matlab解方程不可做了orz 绝望,各种绝望,平时不努力到了期末季就焦虑得不行. 左除法就好 x=A/b; 如果有符号变量,用syms声明一下就好. 越来越懒了orz好吧,解线性方程组这种毫无技术含量的东西用matlab倒是没啥.但是求积分可不能依赖matlab了,现在我积分水平暴低,简直药丸orz

Matlab求解线性方程组Ax=b的几种常见方法Matlab求解线性方程组Ax=b的几种常见方法

原文:http://blog.csdn.net/stzh_bk/article/details/70983856 例如方程组: 法1:左除法 >> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4]; >> x=A\b x = 1.4818 -0.4606 0.3848 法2:求逆法 >> A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4]; >> x=inv(A)*b x = 1.4818 -0.

“中兴捧月”比赛之——二叉查找树(BST)树的最短路径Java求解

问题描述: BST树,又称二叉查找树,求其到所有叶子节点路径的最小值 测试用例一:  10 5 20 返回15: 测试用例二: 100 20 70 110 120 10 null null 89 null null null null 返回130: 程序代码实现: 1 package examination.written; 2 3 /** 4 * 5 * @author ZhuXY 6 * @time 2016-6-12 下午9:57:53 7 * 8 */ 9 public class BS

行列式求解,列主元高斯消元法

高斯消元法的弊端就是针对系数矩阵A,当遇到A(n,n)=0的情况时边无法处理(出现除0错误),以及有效减少计算机在处理浮点运算时出现舍入误差. 列主消元法代码: function [x]=ext_gauss(A,b) n=size(A,1); for k=1:n-1 [value,index]=min(abs(A(k:n,k))); index+=k-1; if value==0 break endif A([k,index],:)=A([index,k],:); b([k,index])=b(