Python에서 ode45() 함수 모방

Aditya Raj 2023년10월10일
Python에서 ode45() 함수 모방

상미분 방정식은 MatLab에서 많은 과학적 문제를 해결하는 데 사용됩니다. ode45()는 MatLab에서 미분 방정식을 푸는 데 사용됩니다.

이 기사에서는 Python에서 ode45() 함수를 모방하는 방법을 보여줍니다.

Python에서 ode45() 함수 모방

파이썬에서 ode45() 함수를 모방하기 위해 scipy 모듈에 정의된 solve_ivp() 메서드를 사용할 수 있습니다. solve_ivp() 방법은 상미분 방정식(ODE) 시스템을 통합합니다.

  • solve_ivp() 메소드는 첫 번째 입력 인수로 함수를 사용합니다. 입력 인수에 제공된 함수는 미분 방정식의 계수를 포함하는 배열을 반환해야 합니다.
  • 두 번째 입력 인수에서 solve_ivp() 메서드는 두 개의 숫자 값을 포함하는 튜플 또는 목록을 사용합니다. 값은 통합 간격을 나타내며 튜플의 첫 번째 값은 간격의 시작을 나타내고 튜플의 두 번째 값은 간격의 가장 높은 값을 나타냅니다.
  • 세 번째 입력 인수에서 solve_ivp() 메서드는 초기 값을 나타내는 배열을 사용합니다.
  • 실행 후 solve_ivp() 메소드는 다양한 속성을 가진 묶음 객체를 반환합니다.
    1. t 속성은 시점을 포함하는 numpy 배열을 포함합니다.
    2. y 속성은 t의 값과 시점이 있는 numpy 배열을 포함합니다.
    3. sol 속성에는 미분 방정식의 솔루션이 포함된 Odesolution 개체가 포함되어 있습니다. dense_output 인수가 solve_ivp() 메서드에서 false로 설정되면 sol 속성에 None이 포함됩니다.

이것을 더 잘 이해하려면 다음 예를 참조하십시오.

from scipy.integrate import solve_ivp


def function(t, y):
    return 2 * y


interval = [0, 10]
initial_values = [10, 15, 25]
solution = solve_ivp(function, interval, initial_values)
print("Time:", solution.t)
print("Y:", solution.y)

출력:

Time: [ 0.          0.07578687  0.56581063  1.18741382  1.85887096  2.55035821
  3.25007544  3.95320486  4.65775424  5.36289544  6.06828346  6.77377445
  7.47930839  8.18486026  8.89041961  9.59598208 10.        ]
Y: [[1.00000000e+01 1.16366412e+01 3.10073783e+01 1.07492109e+02
  4.11689241e+02 1.64114780e+03 6.65071446e+03 2.71362627e+04
  1.11036049e+05 4.54874443e+05 1.86437495e+06 7.64300835e+06
  3.13352156e+07 1.28474398e+08 5.26752964e+08 2.15973314e+09
  4.84541488e+09]
 [1.50000000e+01 1.74549617e+01 4.65110674e+01 1.61238163e+02
  6.17533861e+02 2.46172171e+03 9.97607169e+03 4.07043941e+04
  1.66554074e+05 6.82311665e+05 2.79656243e+06 1.14645125e+07
  4.70028233e+07 1.92711598e+08 7.90129446e+08 3.23959970e+09
  7.26812231e+09]
 [2.50000000e+01 2.90916029e+01 7.75184457e+01 2.68730272e+02
  1.02922310e+03 4.10286951e+03 1.66267862e+04 6.78406569e+04
  2.77590123e+05 1.13718611e+06 4.66093739e+06 1.91075209e+07
  7.83380389e+07 3.21185996e+08 1.31688241e+09 5.39933284e+09
  1.21135372e+10]]

위의 예에서 ty를 입력 인수로 사용하고 y를 기반으로 값을 반환하는 function이라는 함수를 먼저 정의했습니다.

그런 다음 intervalinitial_values 변수를 각각 사용하여 ODE에 대한 간격과 초기 값을 정의했습니다. function, intervalinitial_valuessolve_ivp() 함수에 대한 입력 인수로 전달하고 마지막으로 변수 솔루션에서 출력을 얻습니다.

출력에서 시간 값이 0에서 10까지의 간격에 걸쳐 분포되어 있음을 관찰할 수 있습니다. 마찬가지로 출력에는 각 시간 값에 해당하는 y 값이 포함됩니다.

솔루션의 속성 t에서 시점을 명시적으로 지정할 수도 있습니다. 이를 위해 아래와 같이 solve_ivp() 메소드의 t_eval 인수에 y 값이 필요한 원하는 시간 값을 포함하는 배열을 전달해야 합니다.

from scipy.integrate import solve_ivp


def function(t, y):
    return 2 * y


interval = [0, 10]
initial_values = [10, 15, 25]
time_values = [1, 2, 3, 6, 7, 8]
solution = solve_ivp(function, interval, initial_values, t_eval=time_values)
print("Time:", solution.t)
print("Y:", solution.y)

출력:

Time: [1 2 3 6 7 8]
Y: [[7.38683416e+01 5.46053271e+02 4.03089733e+03 1.62618365e+06
  1.20160156e+07 8.87210156e+07]
 [1.10802512e+02 8.19079906e+02 6.04634600e+03 2.43927547e+06
  1.80240234e+07 1.33081523e+08]
 [1.84670854e+02 1.36513318e+03 1.00772433e+04 4.06545912e+06
  3.00400390e+07 2.21802539e+08]]

시간 값에는 t_eval 매개변수에 대한 입력 인수로 전달된 값만 포함되어 있음을 알 수 있습니다. 마찬가지로 속성 y에는 지정된 t 값에 대한 값만 포함됩니다.

이 접근 방식을 사용하면 구간의 특정 지점에 대한 값을 얻을 수 있습니다.

작가: Aditya Raj
Aditya Raj avatar Aditya Raj avatar

Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.

GitHub

관련 문장 - Python Function