Python에서 ode45() 함수 모방
상미분 방정식은 MatLab에서 많은 과학적 문제를 해결하는 데 사용됩니다. ode45()
는 MatLab에서 미분 방정식을 푸는 데 사용됩니다.
이 기사에서는 Python에서 ode45()
함수를 모방하는 방법을 보여줍니다.
Python에서 ode45()
함수 모방
파이썬에서 ode45()
함수를 모방하기 위해 scipy
모듈에 정의된 solve_ivp()
메서드를 사용할 수 있습니다. solve_ivp()
방법은 상미분 방정식(ODE) 시스템을 통합합니다.
solve_ivp()
메소드는 첫 번째 입력 인수로 함수를 사용합니다. 입력 인수에 제공된 함수는 미분 방정식의 계수를 포함하는 배열을 반환해야 합니다.- 두 번째 입력 인수에서
solve_ivp()
메서드는 두 개의 숫자 값을 포함하는 튜플 또는 목록을 사용합니다. 값은 통합 간격을 나타내며 튜플의 첫 번째 값은 간격의 시작을 나타내고 튜플의 두 번째 값은 간격의 가장 높은 값을 나타냅니다. - 세 번째 입력 인수에서
solve_ivp()
메서드는 초기 값을 나타내는 배열을 사용합니다. - 실행 후
solve_ivp()
메소드는 다양한 속성을 가진 묶음 객체를 반환합니다.t
속성은 시점을 포함하는 numpy 배열을 포함합니다.y
속성은t
의 값과 시점이 있는 numpy 배열을 포함합니다.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]]
위의 예에서 t
와 y
를 입력 인수로 사용하고 y
를 기반으로 값을 반환하는 function
이라는 함수를 먼저 정의했습니다.
그런 다음 interval
및 initial_values
변수를 각각 사용하여 ODE에 대한 간격과 초기 값을 정의했습니다. function
, interval
및 initial_values
를 solve_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 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