[java] pierwiastki zespolone równania kwadratowego

Awatar użytkownika
nuclear
Użytkownik
Użytkownik
Posty: 1501
Rejestracja: 22 paź 2006, o 12:01
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 16 razy
Pomógł: 264 razy

[java] pierwiastki zespolone równania kwadratowego

Post autor: nuclear »

Witam
Chciałbym zmodyfikować swój aby liczyć pierwiastki np równania \(\displaystyle{ x^2+2x+1+i=0}\)

z góry dziękuję za pomoc
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[java] pierwiastki zespolone równania kwadratowego

Post autor: spajder »

Najłatwiej - napisz klasę Complex (albo w javie jest, nie wiem) i zaimplementuj za jej pomocą wszystkie działania arytmetyczne.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[java] pierwiastki zespolone równania kwadratowego

Post autor: smiechowiec »

Spróbuj może tak

Kod: Zaznacz cały


import java.io.IOException;
public class Complex {
  public Double re = .0;  // cześć rzeczywista
  public Double im = .0;  // cześć urojona
  java.text.DecimalFormat df = new java.text.DecimalFormat("####.####");

  private Complex() {
  }

  private Complex(Double re, Double im) {
    this.re = re;
    this.im = im;
  }
  
  public Complex add(Complex number) {
    Complex result = new Complex();
    result.re = this.re + number.re;
    result.im = this.im + number.im;
    return result;
  }

  public Complex mul(Complex number) {
    Complex result = new Complex();
    result.re = (this.re * number.re) + (this.im * number.im);
    result.im = (this.re * number.im) + (this.im * number.re);
    return result;
  }

  public Complex mul(Double number) {
    Complex result = new Complex();
    result.re = number * this.re;
    result.im = number * this.im;
    return result;
  }

  public Double getz() {
    return Math.sqrt(re * re + im * im);
  }

  public Double geta() {
    if (im == .0)
      return .0;
    if (re == 0)
      return (Math.PI / 2);
    return Math.atan2(re, im);
  }

  public Complex pow(Double exponent) {
    Complex result = new Complex();
    Double z = Math.pow(getz(), exponent);
    Double a = geta() * exponent;
    result.re = z * Math.cos(a);
    result.im = z * Math.sin(a);
    return result;
  }

  @Override
  public String toString() {

    return "(" + df.format(re) + "; " + df.format(im) + ") ";
  }

  public static void main(String[] arg) {
    Complex a = new Complex();
    Complex b = new Complex();
    Complex c = new Complex();

    java.io.BufferedReader kbd = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
    try {
      System.out.print("Współczynnik a część rzeczywista : ");
      a.re = new Double(kbd.readLine()).doubleValue();
      System.out.print("Współczynnik a część urojona : ");
      a.im = new Double(kbd.readLine()).doubleValue();
      if ((a.re == .0) && (a.im == .0)) {
        System.out.print("Współczynnik a powinien być różny od zera");
        return;
      }

      System.out.print("Współczynnik b część rzeczywista : ");
      b.re = new Double(kbd.readLine()).doubleValue();
      System.out.print("Współczynnik b część urojona : ");
      b.im = new Double(kbd.readLine()).doubleValue();

      System.out.print("Współczynnik c część rzeczywista : ");
      c.re = new Double(kbd.readLine()).doubleValue();
      System.out.print("Współczynnik c część urojona : ");
      c.im = new Double(kbd.readLine()).doubleValue();

    } catch (IOException ex) {
      // Obsługa Błędu      
    }

    Complex delta = new Complex();
    Complex ac = new Complex();
    ac = a.mul(c).mul(-4.0); // -4ac
    delta = b.mul(b).add(ac); // b^2 - 4ac
    delta = delta.pow(0.5); // pierwiastek z delty
    Complex result = new Complex();
    result = b.add(delta).mul(-0.5); //
    System.out.print("Pierwiastki trójmianu to : " + result + "   ");
    result = b.add(delta.mul(-1.0)).mul(-0.5); //
    System.out.println(result);            
  }
}
Wynik dla Twojego trójmianu

Kod: Zaznacz cały

Współczynnik a część rzeczywista : 1
Współczynnik a część urojona : 0
Współczynnik b część rzeczywista : 2
Współczynnik b część urojona : 0
Współczynnik c część rzeczywista : 1
Współczynnik c część urojona : 1
Pierwiastki trójmianu to : (-1,7071; -0,7071)    (-0,2929; 0,7071) 
ODPOWIEDZ