二元一次方程组简单解法(输入样式有介绍)

Posted aikang525

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二元一次方程组简单解法(输入样式有介绍)相关的知识,希望对你有一定的参考价值。

提示输入方程时输入如:5x+3y=2 要求全部字符串无空格

  1 package cn.aikang.Calculation;
  2 
  3 import java.math.BigDecimal;
  4 import java.util.Scanner;
  5 //BigDecimal
  6 /**
  7  * @Description: TODO(这里用一句话描述这个类的作用)
  8  * @Author aikang
  9  * @Date 2019/10/12 8:38
 10  */
 11 public class EquationCalculation {
 12 
 13     // 主方法
 14     public static void main(String[] args) {
 15         //1. 调用用户输入方法接收得到的数组
 16         String[] UserScannerArr = UserScanner();
 17         //["5x+3y=2","3x+2y=1"]
 18 
 19         //2. 调用分割功能
 20         double[][] doubles1 = ExtractUserArr(UserScannerArr);
 21 
 22         //3.调用计算功能返回第一个式子xy的值
 23         double[] doubles2 = CalculationXY(doubles1);
 24 
 25         //4.调用最后结果判断功能
 26         boolean result = Result(doubles1, doubles2);
 27         //做判断看式子是否成立
 28         if(result){
 29             System.out.println("结果为:");
 30             System.out.println("x:"+doubles2[0]+"y"+doubles2[1]);
 31         }else{
 32             System.out.println("此方法无解");
 33         }
 34 
 35     }
 36 
 37     //1. 实现用户输入功能
 38     public static String[] UserScanner(){
 39         // 1.1 创建一个String类型的二维数组用来返回用户输入
 40         String[] ScannerArr = new String[2];
 41         Scanner scanner = new Scanner(System.in);
 42         // 1.2 循环ScannerArr的长度让用户输入
 43         for (int i = 0; i < ScannerArr.length; i++) {
 44             //提示用户输入
 45             System.out.println("请输入第"+(i+1)+"个方程");
 46             //让用户输入方程组
 47             ScannerArr[i] = scanner.nextLine();
 48         }
 49         return ScannerArr;
 50     }
 51 
 52     //2.实现用户传入数组做分割提取系数和等值返回
 53     public static double[][] ExtractUserArr(String[] userArr){
 54         //1.创建一个二维数组用来存储提取出来的系数第一个数组存储第一个方程的系数:x的系数y的系数等值
 55         double[][] userXYxxcc = new double[2][3];
 56 
 57         //2. for循环userArr数组处理两个方程
 58         for (int i = 0; i < userArr.length; i++) {
 59             //3.使用x分割传入对应位置
 60             String[] xes1 = userArr[i].split("x");
 61             //3.1 判断提取出来的是否是空,如果是则赋值1
 62             if (xes1[0] == null || "".equals(xes1[0])){
 63                 userXYxxcc[i][0] = 1;
 64             }else if(xes1[0] == "-"){
 65                 userXYxxcc[i][0] = -1;
 66             }else {
 67                 userXYxxcc[i][0] = Double.parseDouble(xes1[0]);
 68             }
 69 
 70             //4. 使用y继续分割xes[1]得到xes2
 71             String[] xes2 = xes1[1].split("y");
 72             if (xes2[0] == null || "".equals(xes2[0])){
 73                 userXYxxcc[i][1] = 1;
 74             }else if(xes2[0] == "-"){
 75                 userXYxxcc[i][1] = -1;
 76             }else {
 77                 userXYxxcc[i][1] = Double.parseDouble(xes2[0]);
 78             }
 79 
 80             //使用xes2[]=分割得到等值
 81             String[] xes3 = xes2[1].split("=");
 82             userXYxxcc[i][2] = Double.parseDouble(xes3[1]);
 83         }
 84         return userXYxxcc;
 85     }
 86 
 87     //3. 实现传入数组计算出x,y的值
 88     public static double[] CalculationXY(double[][] CcArr){
 89         //1.定义数组存储xy
 90         double[] xy = new double[2];
 91         //1.1创建//BigDecimal用来运算
 92         BigDecimal x1 = new BigDecimal(CcArr[0][0]);
 93         BigDecimal y1 = new BigDecimal(CcArr[0][1]);
 94         BigDecimal e1 = new BigDecimal(CcArr[0][2]);
 95         BigDecimal x2 = new BigDecimal(CcArr[1][0]);
 96         BigDecimal y2 = new BigDecimal(CcArr[1][1]);
 97         BigDecimal e2 = new BigDecimal(CcArr[1][2]);
 98         //2.定义变量计算公约
 99         BigDecimal x1_1 = x1.multiply(y2);
100         BigDecimal y1_1 = y1.multiply(y2);
101         BigDecimal e1_1 = e1.multiply(y2);
102 
103         BigDecimal x2_1 = x2.multiply(y1);
104         BigDecimal y2_1 = y2.multiply(y1);
105         BigDecimal e2_1 = e2.multiply(y1);
106 
107         //3. 计算得出y2-y1 = 0所以(x2-x1)*x = CcArr[0][2]得到x = CcArr[0][2]/(x2-x1)
108         //3.1定义变量x
109         BigDecimal x = (e2_1.subtract(e1_1)).divide((x2_1.subtract(x1_1)));
110 
111         //4.代入x计算出第一个式子的y
112         BigDecimal yy = e1.subtract(x1.multiply(x));
113         BigDecimal y = yy.divide(y1);
114         double userx = x.doubleValue();
115         double usery = y.doubleValue();
116 
117         //赋值
118         xy[0] = userx;
119         xy[1] = usery;
120         //5.返回xy
121         return xy;
122     }
123 
124     //4.实现两个式子代入xy值进行计算查看是否相等
125     //第一个参数为xy的系数和结果,第二个参数为第一个式子计算得出的xy
126     public static boolean Result(double[][] doubles1,double[] doubles2){
127         //定义一个boolean值统计状态
128         boolean rt;
129         //定义BigDecimal计算
130         BigDecimal x2 = new BigDecimal(doubles1[1][0]);
131         BigDecimal y2 = new BigDecimal(doubles1[1][1]);
132         BigDecimal e2 = new BigDecimal(doubles1[1][2]);
133         BigDecimal x = new BigDecimal(doubles2[0]);
134         BigDecimal y = new BigDecimal(doubles2[1]);
135 
136         //判断第二个式子是否成立
137         BigDecimal x1 = x2.multiply(x);
138         BigDecimal y1 = y2.multiply(y);
139         if(x1.add(y1).equals(e2)){
140             rt = true;
141         }else{
142             rt = false;
143         }
144         return rt;
145     }
146 }

 

以上是关于二元一次方程组简单解法(输入样式有介绍)的主要内容,如果未能解决你的问题,请参考以下文章

设计一个求解一般二元一次方程组的算法,并画出程序框图

如何解2元一次方程

python二元一次方程求根简单

二元一次方程组怎么解

matlab求二元一次方程组

多元一次不等式方程组怎样解最方便 如:f(a,b,c,d)=a+b+c+d; 其中a+b