이차방정식 계산 함수 만들기 - 파이썬, C언어, Java, Javascript

이차방정식 계산 함수 만들기 - 파이썬, C언어, Java, Javascript

이차방정식은 가장 간단한 방정식입니다. 그렇지만 프로그래밍 언어로 구현하는 것은 생각보다 쉽지 않습니다. 이 글에서는 파이썬, C언어, Java, Javascript에서 이차방정식을 구현하는 방법을 소개하겠습니다.

1. 파이썬과 이차방정식

파이썬으로 이차방정식을 계산하는 함수는 numpy 라이브러리의 roots 함수를 사용하여 구현할 수 있습니다. roots 함수는 다항식의 근을 찾아주는 함수이며, 이차방정식은 다음과 같은 형태의 다항식으로 표현할 수 있습니다.

ax^2 + bx + c = 0

이때 a, b, c는 상수입니다. 이차방정식의 해는 다음과 같이 roots 함수를 사용하여 계산할 수 있습니다.

import numpy as np

def quadratic_equation_solver(a, b, c):
    """이차방정식의 해를 계산하는 함수"""
    roots = np.roots([a, b, c])
    return roots

이 함수에서 a, b, c는 각각 이차방정식의 계수를 나타내며, np.roots([a, b, c])는 이차방정식의 근을 계산하는 numpy 함수입니다. 이 함수는 근이 복소수일 경우에도 정상적으로 처리할 수 있습니다.

이제 함수를 사용하는 방법에 대해서 알아보겠습니다. 함수를 사용하기 위해서는 a, b, c 값을 입력하고, 함수를 호출하면 됩니다. 예를 들어, x^2 + 2x + 1 = 0 이라는 이차방정식을 풀고자 할 경우, 다음과 같이 함수를 호출합니다.

roots = quadratic_equation_solver(1, 2, 1)
print(roots)

위 코드를 실행하면, 이차방정식의 해인 -1.0이 두 번 출력됩니다.

또한, 이차방정식의 해가 복소수일 경우, numpy의 복소수 자료형을 사용하여 계산할 수 있습니다. 예를 들어, x^2 + 2x + 2 = 0 이라는 이차방정식을 풀고자 할 경우, 다음과 같이 함수를 호출합니다.

roots = quadratic_equation_solver(1, 2, 2)
print(roots)

위 코드를 실행하면, 이차방정식의 해인 (-1+1j)와 (-1-1j)이 출력됩니다.

2. C언어와 이차방정식

C언어로 이차방정식을 계산하는 함수를 만들기 위해서는 다음과 같은 공식을 사용할 수 있습니다.

x = (-b ± sqrt(b^2 – 4ac)) / 2a

이때, a, b, c는 각각 이차방정식의 계수입니다. 이 공식을 이용하여 이차방정식의 해를 구하는 함수를 구현할 수 있습니다.

#include <stdio.h>
#include <math.h>

void quadratic_equation_solver(double a, double b, double c) {
    double discriminant = b * b - 4 * a * c;
    double x1, x2;

    if (discriminant > 0) {
        x1 = (-b + sqrt(discriminant)) / (2 * a);
        x2 = (-b - sqrt(discriminant)) / (2 * a);
        printf("The roots are real and different: %.2lf and %.2lf", x1, x2);
    } else if (discriminant == 0) {
        x1 = -b / (2 * a);
        printf("The roots are real and same: %.2lf", x1);
    } else {
        double realPart = -b / (2 * a);
        double imaginaryPart = sqrt(-discriminant) / (2 * a);
        printf("The roots are complex and different: %.2lf + %.2lfi and %.2lf - %.2lfi", realPart, imaginaryPart, realPart, imaginaryPart);
    }
}

위 코드에서 sqrt() 함수는 수학 라이브러리인 math.h 라이브러리에 포함되어 있는 함수로서, 제곱근 값을 계산해주는 함수입니다.

이제 함수를 사용하는 방법에 대해서 알아보겠습니다. 함수를 사용하기 위해서는 a, b, c 값을 입력하고, 함수를 호출하면 됩니다. 예를 들어, x^2 + 2x + 1 = 0 이라는 이차방정식을 풀고자 할 경우, 다음과 같이 함수를 호출합니다.

quadratic_equation_solver(1, 2, 1);

위 코드를 실행하면, 이차방정식의 해인 -1.00이 두 번 출력됩니다.

또한, 이차방정식의 해가 복소수일 경우, 실수부와 허수부를 구분하여 출력할 수 있습니다. 예를 들어, x^2 + 2x + 2 = 0 이라는 이차방정식을 풀고자 할 경우, 다음과 같이 함수를 호출합니다.

quadratic_equation_solver(1, 2, 2);

위 코드를 실행하면, 이차방정식의 해인 -1.00 + 1.00i와 -1.00 – 1.00i가 출력됩니다.

3. Java와 이차방정식

Java에서는 Math 클래스에서 제공하는 sqrt() 함수를 사용하여 제곱근을 계산할 수 있습니다. 이 함수는 인수로 전달된 값의 제곱근을 반환합니다. 또한, Java에서는 double 타입을 사용하여 실수 값을 저장할 수 있으므로 이차방정식의 해도 double 타입으로 반환할 수 있습니다.

이제 이를 바탕으로 Java로 이차방정식을 계산하는 함수를 만들어보겠습니다.

public static void solveQuadraticEquation(double a, double b, double c) {
    double discriminant = Math.pow(b, 2) - 4 * a * c;
    if (discriminant < 0) {
        System.out.println("해가 없습니다.");
    } else if (discriminant == 0) {
        double x = -b / (2 * a);
        System.out.println("중근입니다. x = " + x);
    } else {
        double x1 = (-b + Math.sqrt(discriminant)) / (2 * a);
        double x2 = (-b - Math.sqrt(discriminant)) / (2 * a);
        System.out.println("해는 다음과 같습니다.");
        System.out.println("x1 = " + x1);
        System.out.println("x2 = " + x2);
    }
}

위 함수는 이차방정식의 계수 a, b, c를 인수로 받아서, 해를 계산하여 출력하는 함수입니다. 우선, 이차방정식의 판별식인 b^2 – 4ac을 계산하여 discriminant 변수에 저장합니다. 이 값이 음수이면 해가 없습니다. 판별식이 0이면 중근입니다. 판별식이 양수이면 두 개의 해가 있습니다. 각각 x1과 x2에 저장하고, 이를 출력합니다.

이제 이 함수를 사용하는 방법을 알아보겠습니다. 예를 들어, a = 1, b = -3, c = 2인 이차방정식을 풀어보고 싶다면, 다음과 같이 함수를 호출하면 됩니다.

solveQuadraticEquation(1, -3, 2);

이 함수는 다음과 같이 출력합니다.

해는 다음과 같습니다.
x1 = 2.0
x2 = 1.0

따라서, 이차방정식의 해는 x = 2 또는 x = 1입니다.

이상으로 Java로 이차방정식을 계산하는 함수를 만드는 방법에 대해서 알아보았습니다.

4. Javascript와 이차방정식

자바스크립트도 위의 경우와 마찬가지로 라이브러리를 활용하여 이차방정식 함수를 작성할 수 있습니다. 자바스크립트로 이차방정식을 계산하는 함수는 다음과 같이 만들 수 있습니다.

function quadraticEquation(a, b, c) {
  let discriminant = Math.pow(b, 2) - 4 * a * c;
  let x1, x2;

  if (discriminant > 0) {
    x1 = (-b + Math.sqrt(discriminant)) / (2 * a);
    x2 = (-b - Math.sqrt(discriminant)) / (2 * a);
    return [x1, x2];
  } else if (discriminant === 0) {
    x1 = -b / (2 * a);
    return [x1];
  } else {
    return [];
  }
}

이 함수는 이차방정식의 계수 a, b, c를 매개변수로 받아서 근의 배열을 반환합니다. 만약 근이 하나인 경우에는 그 하나의 값만 포함된 배열을 반환하고, 근이 없는 경우에는 빈 배열을 반환합니다.

여기서 사용된 함수와 라이브러리는 다음과 같습니다.

  • Math.pow(base, exponent): 제곱 연산을 수행하는 함수입니다. base를 exponent번 제곱한 값을 반환합니다.
  • Math.sqrt(x): 제곱근을 계산하는 함수입니다. x의 양의 제곱근을 반환합니다.

사용 방법은 다음과 같습니다.

// 이차방정식 2x^2 + 5x + 3 = 0의 근을 계산합니다.
let roots = quadraticEquation(2, 5, 3);

// 결과를 출력합니다.
if (roots.length === 0) {
  console.log("근이 없습니다.");
} else if (roots.length === 1) {
  console.log("중근입니다: " + roots[0]);
} else {
  console.log("근은 " + roots[0] + "과 " + roots[1] + "입니다.");
}

이 코드는 이차방정식 2x^2 + 5x + 3 = 0의 근을 계산하고 결과를 출력합니다. 만약 근이 없으면 “근이 없습니다.”를 출력하고, 근이 하나인 경우에는 “중근입니다:”와 함께 그 값을 출력하고, 근이 두 개인 경우에는 “근은”과 함께 두 개의 값을 출력합니다.

4 Comments
  1. 내가 등가속 운동시 빛의 운동 시간을 구하려는데

    빛이 빛시계를 1회 주행할 때마다

    빛시계의 운동 속도가 변하고

    그에 따라 밑변의 길이가 변하기 때문에 빛의 운동 시간도 점점 길어지지.

    이 점점 길어지는 시간은 전부 합하려고 하는데

    식이 사차 방정식이어서 근이 4개가 나오는데,

    그 근 중에서 조건에 맞는 시간 근을 선별해서 누적합을 구해야 한다.

    조건은 우선 t가 음수이면 제외한다.

    양수근 두 개 중 작은 근을 취한다.

    t가 허수이면 버린다.

    일단 4차 방정식을 프로그램에 맞게 변형시킬 줄도 모른다.

    변형시키고 4개 근 중에서 조건에 맞는 시간 근을 선별해서 누적합을 구하는

    스크립트를 만들려는데

    도와줄 수 있나요?

    짜집기 해 봤는데

    https://gall.dcinside.com/mgallery/board/view/?id=jsjs&no=908&page=1

    어디 틀린지 모름.

Leave a reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다