Solving Differential Equations with Python Part 1

Let's start with the fact that solving differential equations manually may not be entirely easy.

On this resource http://mathprofi.ru/differentnye_uravnenija_primery_reshenii.html there are tips on how to do this manually, there are many tips on various sections of higher mathematics, for example, this was useful to me, because it is not always possible to remember everything and everyone.

Specifically, in this post I will try to solve 10 examples from the first topic of this subject.

First order differential equations. Examples of solutions. Differential equations with separable variables

Considering that mathprofi already has solutions and answers to these 10 examples, I will propose to supplement it with solutions to these equations using a personal computer, and specifically using the Python programming language and the symbolic calculation and equation solving library SymPy.

Example 1:

xy'=y

I suggest solving this example using Python

import sympy
print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 1")

x = sympy.symbols('x')#Независимая переменная
y = sympy.Function('y')#Зависимая переменная

equation = sympy.Eq(x*y(x).diff(x), y(x))#Условие задачи выражение
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)#Метод решения диф. уравнения
print("Общее решение:")
print(solution)
print("Ответ сошелся")
print("-----------------------------------------------------------------")

The result of this script will be the following output:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 1
Условие:
Eq(x*Derivative(y(x), x), y(x))
Общее решение:
Eq(y(x), C1*x)
Ответ сошелся

Let's look at the answer on mathprofi:

y=Cx

Exactly what is written in line 7 of the output.

Example 2:

y'=-2y,y(0)=2

This is a conditional problem, so the code will be a little more complicated.

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 2")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq(y(x).diff(x), -2*y(x))
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
C1=sympy.solve(solution.subs(x,0).subs(y(0),2),'C1')[0]#Подставляем условия
z=solution.subs('C1',C1)
print("Частное решение:")
print(z)
print("Ответ сошелся")

Let's look at the output of the script:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 2
Условие:
Eq(Derivative(y(x), x), -2*y(x))
Общее решение:
Eq(y(x), C1*exp(-2*x))
Частное решение:
Eq(y(x), 2*exp(-2*x))
Ответ сошелся

Let’s compare lines 7 and 9 of the script’s output with the general and specific solutions on the website, respectively:

y=Ce^{-2x} ,y=2e^{-2x}

Example 3:

y'+(2y+1)ctg(x)=0

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 3")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq(y(x).diff(x)+(2*y(x)+1)*sympy.cot(x),0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
print("Ответ сошелся")

Exhaust:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 3
Условие:
Eq((2*y(x) + 1)*cot(x) + Derivative(y(x), x), 0)
Общее решение:
Eq(y(x), C1/sin(x)**2 - 1/2)
Ответ сошелся

Answer:

y=\frac{C}{(2sin^2x)}-\frac{1}{2}

Example 4:

ylny+xy'=0,y(1)=e

Code:

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 4")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq(y(x)*sympy.ln(y(x))+x*y(x).diff(x),0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
C1=sympy.solve(solution.subs(x,1).subs(y(1),sympy.exp(1)),'C1')[0]
z=solution.subs('C1',C1)
print("Частное решение:")
print(z)
print("Ответ сошелся")

Exhaust:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 4
Условие:
Eq(x*Derivative(y(x), x) + y(x)*log(y(x)), 0)
Общее решение:
Eq(y(x), exp(C1/x))
Частное решение:
Eq(y(x), exp(1/x))
Ответ сошелся

Answer:

y=e^{\frac{c}{x}},y=e^{\frac{1}{x}}

Example 5:

y^{yx^2}dy-2xdx=0,y(0)=ln2

Code

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 5")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq(y(x).diff(x)*sympy.exp(y(x)-x*x)-2*x,0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
C1=sympy.solve(solution.subs(x,0).subs(y(0),sympy.ln(2)),'C1')[0]
z=solution.subs('C1',C1)
print("Частное решение:")
print(z)
print("Ответ сошелся")

Exhaust:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 5
Условие:
Eq(-2*x + exp(-x**2 + y(x))*Derivative(y(x), x), 0)
Общее решение:
Eq(y(x), log(C1 + exp(x**2)))
Частное решение:
Eq(y(x), log(exp(x**2) + 1))
Ответ сошелся

Answer:

y=ln(e^{x^2}+C),y=ln(e^{x^2}+1)

Example 6:

\sqrt{3+y^2}dx+\sqrt{1-x^2}ydy=0

Code:

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 6")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq((y(x).diff(x))*y(x)*sympy.sqrt(1-x*x)-sympy.sqrt(3+y(x)*y(x)),0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
print("Ответ неизвестен правилен ли")

Exhaust:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 6
Условие:
Eq(sqrt(1 - x**2)*y(x)*Derivative(y(x), x) - sqrt(y(x)**2 + 3), 0)
Общее решение:
[Eq(y(x), -sqrt(C1**2 + 2*C1*asin(x) + asin(x)**2 - 3)), Eq(y(x), sqrt(C1**2 + 2*C1*asin(x) + asin(x)**2 - 3))]
Ответ неизвестен правилен ли

Answer:

y^3+y+x^2+lnx=C

In this example 6 on the site, it was necessary to express the answer through the function above, and the code solves the complex diffuse and expresses it through the dependent variable y. Let us leave this equation and the answer to posterity.

Example 7:

2(xy+y)y'+x(y^4+1)=0

Code:

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 7")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq((y(x).diff(x))*2*(y(x)*x+y(x))+x*(y(x)**4+1),0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
print("Ответ неизвестен правилен ли")

Exhaust:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 7
Условие:
Eq(x*(y(x)**4 + 1) + 2*(x*y(x) + y(x))*Derivative(y(x), x), 0)
Общее решение:
[Eq(y(x), -sqrt(tan(C1 - x + log(x + 1)))), Eq(y(x), sqrt(tan(C1 - x + log(x + 1))))]
Ответ неизвестен правилен ли

Answer:

arctg(y^2)=-xln|x+1|+C

The author of the site calls this answer 7 a general integral and checks by differentiating this answer, and the code solves the complex diffuse and expresses it in terms of y.

Example 8:

2y'siny cozy sin^2x+cosx=0,y(PI/2)=0

Code:

print("#Дифференциальные уравнения первого порядка.")
print("#Дифференциальные уравнения с разделяющимися переменными")
print("#Пример 8")

x = sympy.symbols('x')
y = sympy.Function('y')

equation = sympy.Eq(2*y(x).diff(x)*sympy.sin(y(x))*sympy.cos(y(x))*sympy.sin(x)**2+sympy.cos(x),0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
print("Ответ неизвестен правилен ли")
for sol in solution:
    C1=sympy.solve(sol.subs(x,sympy.pi*0.5).subs(y(sympy.pi*0.5),0),'C1')
    if C1==[] or C1==[-1]:
        continue
    z=sol.subs('C1',C1)
    print("Частное решение:")
    print(z)

Exhaust:

#Дифференциальные уравнения первого порядка.
#Дифференциальные уравнения с разделяющимися переменными
#Пример 8
Условие:
Eq(2*sin(x)**2*sin(y(x))*cos(y(x))*Derivative(y(x), x) + cos(x), 0)
Общее решение:
[Eq(y(x), pi - asin(sqrt(C1 + 1/sin(x)))), Eq(y(x), asin(sqrt(C1 + 1/sin(x))) + pi), Eq(y(x), -asin(sqrt(C1 + 1/sin(x)))), Eq(y(x), asin(sqrt(C1 + 1/sin(x))))]
Ответ неизвестен правилен ли

Answer:

-0.5cos2y=\frac{1}{sinx}+C, -0.5cos2y=\frac{1}{sinx}-1.5

I couldn’t solve this example 8 with the condition, if anyone has any ideas where I made a mistake, please comment.

Example 9:

(1+e^x)ydy-e^ydx=0

Code:

print("# Дифференциальные уравнения первого порядка.")
print("# Дифференциальные уравнения с разделяющимися переменными")
print("# Пример 9")
x = sympy.symbols('x')
y = sympy.Function('y')
equation = sympy.Eq(y(x).diff(x) * y(x) *(1+sympy.exp(x)) - sympy.exp(y(x)), 0)
print("Условие:")
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
print("Ответ неизвестен правилен ли")

Exhaust:

# Дифференциальные уравнения первого порядка.
# Дифференциальные уравнения с разделяющимися переменными
# Пример 9
Условие:
Eq((exp(x) + 1)*y(x)*Derivative(y(x), x) - exp(y(x)), 0)
Общее решение:
Eq(y(x), -LambertW(C1 + x*exp(-1) - exp(-1)*log(exp(x) + 1)) - 1)
Ответ неизвестен правилен ли

Answer:

e^{-y}(y+1)+x-ln(1+e^x)=C

In example 9, the answer again contains a general integral.

Example 10:

y-xy'=3(1+x^2y')

Code:

print("# Дифференциальные уравнения первого порядка.")
print("# Дифференциальные уравнения с разделяющимися переменными")
print("# Пример 10")
x = sympy.symbols('x')
y = sympy.Function('y')
print("Условие:")
equation = sympy.Eq(y(x).diff(x) * (x+3*x*x) -y(x)+3, 0)
print(equation)
solution = sympy.dsolve(equation)
print("Общее решение:")
print(solution)
print("Ответ сошелся")

Exhaust:

# Дифференциальные уравнения первого порядка.
# Дифференциальные уравнения с разделяющимися переменными
# Пример 10
Условие:
Eq((3*x**2 + x)*Derivative(y(x), x) - y(x) + 3, 0)
Общее решение:
Eq(y(x), 3*(C1*x + 3*x + 1)/(3*x + 1))
Ответ сошелся

Answer:

y=\frac{Cx}{(3x+1)}+3

Bottom line

This SymPy library is a very useful library – it simplifies life and solves complex differential equations.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *