Bagaimana Menyelesaikan Persamaan dengan Java?

Saya memiliki tiga persamaan seperti berikut:

  • x + y + z = 100;
  • x + y - z = 50;
  • x - y - z = 10;

Bagaimana cara mencari nilai x, y, dan z dengan Java?

String equation1="x+y+z=100;";
String equation2="x+y-z=50;";
String equation3="x-y-z=10;";

int[] SolveEquations(equation1,equation2,equation3) {
   // to do
   // how to do?    
} 

Apakah Anda memiliki kemungkinan solusi atau kerangka umum lainnya?


person Cong De Peng    schedule 16.09.2009    source sumber
comment
Sumber lain, dengan kode contoh dalam berbagai bahasa diberikan di sini   -  person DaveJohnston    schedule 16.09.2009
comment
Saya berharap orang-orang berhenti mengambil pekerjaan rumah. Itu satu hal jika seseorang memposting sesuatu langsung dari masalah buku teks seperti Menulis algoritma nonrekursif untuk mencapai pengurutan O(log n) untuk sebuah array.   -  person Jason S    schedule 18.09.2009


Jawaban (8)


Anda dapat menggunakan determinan untuk menghitung nilai x y dan z. Logikanya dapat ditemukan di sini http://www.intmath.com/Matrices-determinants/1_Determinants.php

Dan kemudian Anda perlu mengimplementasikannya di java menggunakan array 3 dimensi.

person Xinus    schedule 16.09.2009
comment
Ini valid secara matematis, tetapi tidak terlalu baik dalam hal efisiensi. lihat Transkrip - Kuliah 20 dari video ceramah Profesor Gilbert Strang mengajar 18.06 Jika Anda harus -- dan Matlab tidak akan pernah melakukannya. Maksudku, itu akan menggunakan eliminasi. ocw.mit.edu/OcwWeb/Mathematics/ 18-06Musim Semi-2005/VideoKuliah/ - person Liran Orevi; 16.09.2009
comment
Menghitung determinannya (menurut saya) O(n!). Eliminasi Gaussian adalah O(n^2). - person erikkallen; 17.09.2009
comment
TIDAK TIDAK TIDAK JANGAN PERNAH menggunakan determinan. Apa yang dikatakan dua komentator sebelumnya. - person Jason S; 18.09.2009

Karena Anda menulis Java, Anda dapat menggunakan paket JAMA untuk menyelesaikan masalah ini. Saya akan merekomendasikan metode dekomposisi LU yang bagus.

Ini adalah soal aljabar linier sederhana. Anda seharusnya bisa menyelesaikannya dengan tangan atau menggunakan sesuatu seperti Excel dengan cukup mudah. Setelah Anda memilikinya, Anda dapat menggunakan solusi tersebut untuk menguji program Anda.

Tentu saja tidak ada jaminan bahwa ada solusinya. Jika matriks Anda berbentuk tunggal, berarti tidak ada perpotongan ketiga garis tersebut dalam ruang 3D.

person duffymo    schedule 16.09.2009
comment
Apa alasan memilih dekomposisi LU? - person Liran Orevi; 16.09.2009
comment
Dekomposisi LU efisien secara komputasi hanya jika kita harus menyelesaikan persamaan matriks beberapa kali untuk b yang berbeda; dalam hal ini lebih cepat melakukan dekomposisi LU terhadap matriks A satu kali dan kemudian menyelesaikan matriks segitiga untuk b yang berbeda, daripada menggunakan eliminasi Gaussian setiap kali. - umum untuk analisis elemen hingga dengan beberapa vektor beban. Anda benar - mungkin tidak masalah dalam kasus ini. - person duffymo; 17.09.2009

Anda juga dapat menggunakan Matematika Umum. Mereka memiliki bagian ini di panduan pengguna (lihat 3.4)

person Valentin Rocher    schedule 16.09.2009

Buat parser menggunakan ANTLR. Kemudian evaluasi AST menggunakan Eliminasi Gaussian.

person erikkallen    schedule 16.09.2009
comment
waoh, ilmunya sangat profesional. Saya perlu waktu untuk mencernanya. - person Cong De Peng; 16.09.2009
comment
Saya tidak yakin saya mendapatkan hubungan antara parsing dan penyelesaian linier. - person Liran Orevi; 16.09.2009
comment
Tidak sama sekali - ini adalah soal aljabar linier. ANTLR tidak berlaku. - person duffymo; 16.09.2009
comment
@duffymo: Menambahkan langkah terakhir ke penjelasan. - person erikkallen; 16.09.2009
comment
penguraiannya karena postingan asli menetapkan persamaan sebagai string. - person Martin DeMello; 16.09.2009
comment
Saya telah berubah pikiran dan memilih jawabannya. Saya tidak akan merekomendasikan memasukkan persamaan sebagai string, tetapi jika itu yang diinginkan OP maka jawaban erikkallen benar. Terimakasih atas klarifikasinya. - person duffymo; 17.09.2009

Gunakan Gaussian_elimination ini sangat mudah, tetapi ada beberapa nilai mungkin sulit Anda hitung dalam hidup.

Contoh kode

person Liran Orevi    schedule 16.09.2009

silakan coba ini:

import org.apache.commons.math3.linear.*;
import org.junit.Assert;
import org.junit.Test;

/**
 * Author: Andrea Ciccotta
 */
public class LinearSystemTest extends Assert {

    /**
     * Ax = B
     * 2x + 3y - 2z = 1
     * -x + 7y + 6x = -2
     * 4x - 3y - 5z = 1
     * <p>
     * it will use the LUDecomposition:
     * LU decomposition:
     * 1. find A = LU where LUx = B
     * 2. solve Ly = B
     * 4. solve Ux = y
     */
    @Test
    public void linearSystem3x3Test() {
        final RealMatrix coefficients = new Array2DRowRealMatrix(new double[][]{{2, 3, -2}, {-1, 7, 6}, {4, -3, -5}});
        final DecompositionSolver solver = new LUDecomposition(coefficients).getSolver();

        final RealVector constants = new ArrayRealVector(new double[]{1, -2, 1}, false);
        final RealVector solution = solver.solve(constants);
        final double[] arraySolution = solution.toArray();

        assertEquals(arraySolution[0], -0.36986301369863006, 0);
        assertEquals(arraySolution[1], 0.1780821917808219, 0);
        assertEquals(arraySolution[2], -0.6027397260273972, 0);
    }

}
person Andrea Ciccotta    schedule 13.11.2020

Ada banyak cara untuk menyelesaikan persamaan sistem linier. Ada cara paling sederhana untuk melakukan ini. Dalam contoh kode java memecahkan dua variabel MENGGUNAKAN metode Matriks tetapi Anda dapat memodifikasi untuk melakukan perhitungan 3 variabel.

import java.util.Scanner; //OBJETO SCANNER

public class SYS2 {

    public static void main (String args[]) {

        //VARIABLE DECLARATION SPACE
        int i=0,j = 0;
        float x,y;
         Scanner S = new Scanner (System.in);

         int EC3[][]= new int [2][3]; //ARRAY TO STORE EQUATION 2X3

         float DET1=0;
        float DET2 =0;


        float DETA=0;
         float DETB=0;

        //END VARIABLE DECLARATIONS
       System.out.println("Enter Equation System : ");

for (i=0; i< 2; i++) {
                for (j=0; j< 3; j++) 
                        EC3[i][j] = S.nextInt();
                }    

                System.out.println("SISTEMA DE ECUACION LINEAL: "); //THIS SENTENCE ONLY PRINT THE CATCHED VALUES OF EQUATION

                for (i=0; i< 2; i++) {
                        for (j=0; j< 3; j++) 

                              System.out.print(EC3[i][j] + "  ");

                            System.out.println();


                }    




           //    System.out.print("Determinante A de la Matriz: ");

             //    System.out.print((EC3[0][2] * EC3[1][1]) - (EC3[0][1]*EC3[1][2]) );

                for (i=0;i<2;i++) {
                        for (j=0; j<2;j++)
                                DET1=  ((EC3[0][2] * EC3[1][1]) -( EC3[0][1]*EC3[1][2]));
                }

                           //    System.out.print(DET1 );
                            //       System.out.println();

                                 for (i=0;i<2;i++) {
                                        for (j=0; j<2;j++)
                                         DET2=  ((EC3[0][0] * EC3[1][1]) - (EC3[0][1]*EC3[1][0]));
                }

                               // System.out.print("Determinante B de la Matriz: ");
                               //  System.out.println(DET2 ); 

    x = (DET1 / DET2);

    System.out.println();
    System.out.println("X = " + x);
    System.out.print("=======================");
    //FIN PARA VALOR DE X



    //COMIENZO DE VALOR DE Y

  //  System.out.print("Determinante A de la Matriz Y: ");

                                    for (i=0;i<2;i++) {
                                            for (j=0; j<2;j++)
                                         DETA=  EC3[0][0] * EC3[1][2] - EC3[0][2]*EC3[1][0];


                                        //    System.out.print(DETA );
                                          //  System.out.println();
                }


                                     for (i=0;i<2;i++) {
                                            for (j=0; j<2;j++)
                                         DETB=  EC3[0][0] * EC3[1][1] - EC3[0][1]*EC3[1][0];

                }

                                   // System.out.print("Determinante B de la Matriz Y: ");
                                   //  System.out.println(DETB );                  
                                    y = DETA / DETB;

                                    System.out.print("=======================");
                                    System.out.println();

                                    System.out.println("Y = " + y);
                                    System.out.print("=======================");
    }
}




person Keating Lopez    schedule 05.05.2020

person    schedule
comment
Terima kasih. Hanya ingin contoh sederhana ini, tetapi situs JAMA tidak berfungsi karena penutupan pemerintah. Kamu menyelamatkanku - person Vyacheslav Tsivina; 22.01.2019