Python에서 Fsolve 사용

Abid Ullah 2023년6월21일
  1. Python의 fsolve 함수
  2. fsolve 함수를 사용하여 Python에서 솔루션 찾기
Python에서 Fsolve 사용

이 기사에서는 fsolve를 사용하여 Python에서 솔루션을 찾는 방법을 살펴봅니다. 또한 특정 종류의 결과에 도달하기 위해 언제 어떻게 사용할 수 있는지 더 잘 이해하기 위해 사용되는 시나리오와 일부 샘플 코드를 탐색할 것입니다.

fsolve가 무엇이고 왜 사용되는지 이해하는 것으로 시작하겠습니다.

Python의 fsolve 함수

방정식은 데이터 과학의 뿌리이며 데이터 과학자, 수학자, 화학 엔지니어 및 의사가 매일 처리하는 다양한 시나리오를 이해하는 데 도움이 됩니다. 이제 컴퓨터가 우리의 일상에 와닿으면서 더 큰 규모의 방정식을 순차적으로 푸는 것이 점점 더 어려워지고 있습니다.

Python의 fsolve를 사용하면 이러한 전문가와 다른 사람들이 Python 라이브러리가 제공하는 다양한 모듈을 사용하여 이러한 방정식을 쉽게 풀 수 있습니다. fsolve는 본질적으로 비선형 방정식의 근을 반환하는 SciPy 모듈입니다.

다양한 시나리오에 대해 fsolve가 제공하는 다양한 매개변수가 있습니다. 온라인에서 사용할 수 있는 SciPy 문서에서 직접 쉽게 찾을 수 있습니다.

fsolve의 전체 매개변수 목록은 다음과 같습니다.

예제 코드:

scipy.optimize.fsolve(
    func,
    x0,
    args=(),
    fprime=None,
    full_output=0,
    col_deriv=0,
    xtol=1.49012e-08,
    maxfev=0,
    band=None,
    epsfcn=None,
    factor=100,
    diag=None,
)

SciPy 문서에서 모든 매개변수에 대한 자세한 설명과 각 매개변수에 대한 설명을 찾을 수 있습니다. 그러나 간략하지만 이해하기 쉬운 매개 변수 요약을 살펴보겠습니다.

모수 설명
func, 호출 가능 f(x, *args) 이것은 본질적으로 하나 이상의 벡터 인수를 취하고 인수와 동일한 길이의 값을 반환하는 함수에 대한 설명입니다.
x0, ndarray 이 인수는 f(x)=0 함수의 근에 대한 초기 추정치가 무엇인지를 나타냅니다.
args, 튜플(선택 사항) 이들은 함수에 필요할 수 있는 추가 인수입니다.
fprime, 호출 가능 f(x, *args)(선택 사항) 이것은 함수의 자코비 행렬의 추정값을 행의 미분과 함께 계산하는 함수입니다.
full_output, 부울(선택 사항) 조건이 충족되거나 True인 경우 선택적 출력 값을 반환합니다.
col_deriv, 부울(선택 사항) 이 인수를 통해 Jacobian 함수가 열 아래로 도함수를 계산하는지 여부를 지정합니다. SciPy 문서에 따르면 전치 작업이 없기 때문에 더 빠릅니다.
xtol, float(선택 사항) 이 인수를 사용하면 함수가 두 개의 연속 반복 값 사이의 상대적 오류의 최대 xtol을 기반으로 계산을 종료할 수 있습니다.
maxfev, int(선택 사항) 이는 함수에 대한 최대 호출 수를 정의합니다.
밴드, 튜플(선택 사항) fprimeNone으로 설정된 경우입니다. Jacobi 행렬은 인수가 행렬 내의 부대각선과 슈퍼대각선의 수를 포함하는 2-시퀀스로 설정된 경우 밴딩된 것으로 간주됩니다.
epsfcn, float(선택 사항) fprimeNone으로 설정된 경우 이 인수에는 야코비 행렬의 순방향 차이를 근사화하는 데 적합한 단계 길이가 포함됩니다. epsfcn이 기계 정밀도보다 작은 경우 함수의 상대 오류는 기계 정밀도 순서로 간주됩니다.
계수, float(선택 사항) 이 인수는 초기 단계 범위를 결정하며 (0.1, 100) 사이여야 합니다.
diag, 시퀀스(선택 사항) 이러한 N-양수 항목은 변수의 배율 인수 역할을 합니다.

fsolve 함수를 사용하여 Python에서 솔루션 찾기

지금쯤 알 수 있듯이 fsolve는 다양한 시나리오에서 다양한 비선형 방정식에 사용할 수 있습니다. 몇 가지 간단한 코드 샘플을 살펴보고 fsolve를 사용하는 방법을 더 잘 파악해 보겠습니다.

시작점이 -0.2인 방정식 x+2cos(x)의 근 찾기

예제 코드:

from math import cos
import scipy.optimize


def func(x):
    y = x + 2 * cos(x)
    return y


y = scipy.optimize.fsolve(func, 0.2)
print(y)

이 코드에서는 Python의 방대한 math 라이브러리에서 cos 함수를 가져오고 scipy(fsolve의 소스)에서 optimize를 가져옵니다. 다음으로 방정식을 정의하고 func 메서드의 y에 저장합니다.

방정식이 올바르게 초기화된 후 fsolve를 사용하여 방정식을 포함하는 (func) 메소드를 호출하기만 하면 됩니다. 두 번째 인수에서 방정식의 시작점을 정의합니다.

결과는 변수 y에 저장되고 출력을 위해 인쇄됩니다.

코드 출력:

[-1.02986653]

시작점 0과 2로 방정식 풀기

예제 코드:

from math import cos
import scipy.optimize


def func(x):
    y = [x[1] * x[0] - x[1] - 6, x[0] * cos(x[1]) - 3]
    return y


x0 = scipy.optimize.fsolve(func, [0, 2])
print(x0)

이 코드에서는 Python의 mathscipy 라이브러리에서 cosscipy.optimize를 가져와 코드 1과 동일한 단계를 따릅니다. func라는 메서드에서 방정식을 정의하여 다음 단계로 계속 진행합니다.

그런 다음 이 메서드를 fsolve 함수의 인수라고 부르고 두 개의 시작점 0과 2를 제공한 다음 x0이라는 변수에 저장 및 인쇄합니다.

코드 출력:

[6.49943036 1.09102209]

시작점 0.3에서 방정식 4sin(y)-4의 근 찾기

예제 코드:

from math import sin
import scipy.optimize


def func(y):
    x = 4 * sin(y) - 4
    return x


x = scipy.optimize.fsolve(func, 0.3)
print(x)

이 예제 코드에서는 cos 대신 math 라이브러리에서 sin을 가져옵니다. 코드 구조는 위의 예제와 동일하게 유지되며 fsolve에 대해 scipy.optimize를 가져온 다음 func 메서드 내에서 방정식을 정의합니다.

fsolve에서 시작점 0.3을 사용하여 이 메서드를 인수라고 합니다. 결과 값은 변수 x에 저장되고 출력을 위해 인쇄됩니다.

코드 출력:

[1.57079633]

이 기사에서 우리는 fsolve가 비선형 방정식의 근을 찾는 데 사용된다는 것과 fsolve가 취할 수 있는 다양한 종류의 매개변수 및 각 매개변수에 대해 배웠습니다. 또한 fsolve의 작업 예제를 살펴보고 코드에서 어떻게 사용할 수 있는지 연구했습니다.

fsolve가 솔루션 도출에 어떻게 사용되는지에 대한 이론과 실제 코드 샘플을 살펴보았으므로 이제 fsolve의 작업을 더 자세히 살펴보기 위해 자신만의 코드를 생성할 시간입니다.

이 기사가 fsolve를 사용하여 Python에서 문제를 해결하는 방법을 이해하는 데 도움이 되기를 바랍니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn