2009-09-16 14 views
10

मैं तीन समीकरणों निम्नलिखित लोगों की तरह है:जावा के साथ समीकरण कैसे हल करें?

  • x + y + z = 100;
  • x + y - z = 50;
  • एक्स - वाई - जेड = 10;

मैं जावा के साथ एक्स, वाई, और जेड के मान कैसे पा सकता हूं?

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?  
} 

क्या आपके पास कोई संभावित समाधान या अन्य सामान्य ढांचे हैं?

+5

इस होमवर्क के नीचे इस उदाहरण का पूरा पृष्ठ देखें? – KLE

+14

मेरी इच्छा है कि लोग होमवर्क मानना ​​बंद कर दें। यह एक बात है यदि कोई पाठ्यपुस्तक समस्या से कुछ सही पोस्ट करता है जैसे "एक सरणी के लिए सॉर्टिंग ओ (लॉग एन) को प्राप्त करने के लिए एक गैर-अनुवर्ती एल्गोरिदम लिखें।" –

+0

एक और स्रोत, विभिन्न भाषाओं में नमूना कोड के साथ [यहां दिया गया है] (http://www.cs.umbc.edu/~squire/cs455_l3.html) – DaveJohnston

उत्तर

9

आप एक्स वाई और जेड के मानों की गणना करने के लिए निर्धारक का उपयोग कर सकते हैं। तर्क यहां पाया जा सकता है http://www.intmath.com/Matrices-determinants/1_Determinants.php

और फिर आपको इसे 3 आयामी सरणी का उपयोग करके जावा में लागू करने की आवश्यकता है।

+0

आपके द्वारा अनुशंसित यूआरएल बहुत अच्छा है। धन्यवाद। –

+2

यह गणितीय रूप से मान्य है, लेकिन दक्षता के मामले में बहुत अच्छा नहीं है। देखने के ट्रांसक्रिप्ट - व्याख्यान 20 प्रोफेसर गिल्बर्ट स्ट्रेंग की वीडियो व्याख्यान से 18.06 शिक्षण "आप करना पड़ा है -। और मैटलैब कभी नहीं, यह कर कभी नहीं होगा मेरा मतलब है, यह उन्मूलन का प्रयोग करेंगे।" http://ocw.mit.edu/OcwWeb/Mathematics/18-06Spring-2005/VideoLectures/detail/lecture20.htm –

+6

एक निर्धारक की गणना करना (मुझे लगता है) ओ (एन!)। गॉसियन उन्मूलन ओ (एन^2) है। – erikkallen

6

ANTLR का उपयोग कर एक पार्सर बनाएं। फिर Gaussian elimination का उपयोग कर AST का मूल्यांकन करें।

+1

वाह, ज्ञान इतना पेशेवर है। मुझे पचाने के लिए कुछ समय चाहिए। –

+0

मुझे यकीन नहीं है कि मुझे पार्सिंग और रैखिक हल करने के बीच कनेक्शन मिलता है। –

+0

बिलकुल नहीं - यह एक रैखिक बीजगणित समस्या है। एएनटीएलआर लागू नहीं होता है। – duffymo

3

Gaussian_elimination का उपयोग करें यह अविश्वसनीय रूप से आसान है, लेकिन some values आपके पास कठिन जीवन की गणना हो सकती है।

Code example

11

आप जावा में लिख रहे हैं के बाद से, आप इस को हल करने के JAMA पैकेज का उपयोग कर सकते हैं। मैं एक अच्छी ल्यू अपघटन विधि की सिफारिश करेंगे।

यह एक साधारण रैखिक बीजगणित समस्या है। आपको इसे हाथ से हल करने या एक्सेल जैसे कुछ आसानी से उपयोग करने में सक्षम होना चाहिए। एक बार जब आप अपने प्रोग्राम का परीक्षण करने के लिए समाधान का उपयोग कर सकें।

कोई गारंटी नहीं है कि, कोई समाधान है। यदि आपका मैट्रिक्स एकवचन है, तो इसका मतलब है कि 3 डी स्पेस में उन तीन पंक्तियों का कोई अंतर नहीं है।

+0

LU अपघटन को प्राथमिकता देने का क्या कारण है? –

+1

"LU decomposition केवल कम्प्यूटेशनल रूप से कुशल है जब हमें अलग-अलग बी के लिए कई बार मैट्रिक्स समीकरण हल करना होता है; इस मामले में मैट्रिक्स ए के ल्यू अपघटन करने के लिए यह तेज़ होता है और फिर अलग-अलग बी के लिए त्रिभुज मैट्रिक्स को हल करता है, प्रत्येक बार गॉसियन उन्मूलन का उपयोग करने के लिए। " - एकाधिक भार वैक्टर के साथ परिमित तत्व विश्लेषण के लिए आम है। आप सही हैं - इससे इस मामले में कोई फर्क नहीं पड़ता। – duffymo

+0

@ डफिमो, स्पष्टीकरण के लिए धन्यवाद। –

5

आप Commons Math का भी उपयोग कर सकते हैं। उनके पास userguide में देखें (3.4 देखें)

6

आप जावा मैट्रिक्स पैकेज JAMA का उपयोग कर सकते हैं। here

/* 
*Solving three variable linear equation system 
* 3x + 2y - z = 1 ---> Eqn(1) 
* 2x - 2y + 4z = -2 ---> Eqn(2) 
* -x + y/2- z = 0 ---> Eqn(3) 
*/ 
import Jama.Matrix; 
import java.lang.Math.*; 
public class Main { 
    public Main() { 
     //Creating Arrays Representing Equations 
     double[][] lhsArray = {{3, 2, -1}, {2, -2, 4}, {-1, 0.5, -1}}; 
     double[] rhsArray = {1, -2, 0}; 
     //Creating Matrix Objects with arrays 
     Matrix lhs = new Matrix(lhsArray); 
     Matrix rhs = new Matrix(rhsArray, 3); 
     //Calculate Solved Matrix 
     Matrix ans = lhs.solve(rhs); 
     //Printing Answers 
     System.out.println("x = " + Math.round(ans.get(0, 0))); 
     System.out.println("y = " + Math.round(ans.get(1, 0))); 
     System.out.println("z = " + Math.round(ans.get(2, 0))); 
    } 

    public static void main(String[] args) { 
     new Main(); 
    } 
}