【sympy】python 求常微分方程 sympy库

问题1:
f ′ ′ ( x ) − 2 f ′ ( x ) + f ( x ) = s i n ( x ) f''(x)-2f'(x) + f(x) = sin(x) f(x)2f(x)+f(x)=sin(x)

程序,如下

from sympy import *
f = symbols('f', cls=Function)
x = symbols('x')
eq = Eq(f(x).diff(x, x) - 2*f(x).diff(x) + f(x), sin(x))
print(dsolve(eq, f(x)))

结果

Eq(f(x), (C1 + C2*x)*exp(x) + cos(x)/2)

  ~  
  ~  
  ~  
  ~  
附:布置考试中两题
1.利用python的Sympy库求解微分方程的解 y = f ( x ) y=f(x) y=f(x),并尝试利用matplotlib绘制函数图像

f ′ ( x ) + f ( x ) + f 2 ( x ) = 0 , f ( 0 ) = 1 f'(x)+f(x)+f^2(x)=0,\qquad f(0)=1 f(x)+f(x)+f2(x)=0,f(0)=1

程序,如下

from sympy import *
f = symbols('f', cls=Function)
x = symbols('x')
eq = Eq(f(x).diff(x,1)+f(x)+f(x)**2, 0)
print(dsolve(eq, f(x)))
C1 = symbols('C1')
eqr = -C1/(C1 - exp(x))
eqr1 = eqr.subs(x, 0)
print(solveset(eqr1 - 1, C1))
eqr2 = eqr.subs(C1, 1/2)
# 画图
import matplotlib.pyplot as plt
import numpy as np
x_1 = np.arange(-5, 5, 0.1)
y_1 = [-0.5/(0.5 - exp(x)) for x in x_1]
plt.plot(x_1, y_1)
plt.axis([-6,6,-10,10])
plt.grid()
plt.show()

结果

Eq(f(x), -C1/(C1 - exp(x)))
FiniteSet(1/2)

在这里插入图片描述
  ~  
2.利用python的Sympy库求解微分方程的解 y = y ( x ) y=y(x) y=y(x),并尝试利用matplotlib绘制函数图像

y ′ ( x ) = y ( x ) , y ( 0 ) = 1 y'(x)=y(x),\qquad y(0)=1 y(x)=y(x),y(0)=1

程序,如下

from sympy import *
y = symbols('y', cls=Function)
x = symbols('x')
eq = Eq(y(x).diff(x,1), y(x))
print(dsolve(eq, y(x)))
C1 = symbols('C1')
eqr = C1*exp(x)
eqr1 = eqr.subs(x, 0)
print(solveset(eqr1 - 1, C1))
eqr2 = eqr.subs(C1, 1)
# 画图
import matplotlib.pyplot as plt
import numpy as np
x_1 = np.arange(-5, 5, 0.01)
y_1 = [exp(x) for x in x_1]
plt.plot(x_1, y_1, color='orange')
plt.grid()
plt.show()

结果

Eq(y(x), C1*exp(x))
FiniteSet(1)

在这里插入图片描述

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python中有几种方法可以用来解常微分方程。其中两种常用的方法是使用sympy中的dsolve方法和scipy中的odeint函数。 在sympy中,可以使用dsolve方法来解常微分方程。首先,需要导入sympy,并使用init_printing()方法来设置输出格式。然后,可以使用dsolve方法来解方程。通过传入方程和未知函数作为参数,dsolve方法将返回方程的解。 在scipy中,可以使用odeint函数来解常微分方程。首先,需要导入scipy中的linspace、exp和odeint模块,以及numpy。然后,定义一个函数来表示微分方程的右侧。这个函数接收时间和未知函数的数组作为参数,并返回未知函数的导数。接下来,使用linspace函数创建一个时间数组,然后定义一个初始条件的数组。最后,调用odeint函数,传入微分方程函数、初始条件、时间数组和其他参数,odeint函数将返回未知函数的值。 下面是一个常微分方程的示例代码: ```python # 使用sympy常微分方程 from sympy import * init_printing() # 定义未知函数 t = symbols('t') y = Function('y')(t) # 定义常微分方程 ode = Eq(y.diff(t) + 2*y, exp(t)) # 解常微分方程 sol = dsolve(ode, y) sol # 使用scipy常微分方程 import matplotlib.pyplot as plt from scipy import linspace, exp from scipy.integrate import odeint import numpy as np def ode_func(y, t): dydt = -2 * y + np.exp(t) return dydt # 定义时间范围 t = linspace(0, 5, 100) # 定义初始条件 y0 = 0 # 解常微分方程 y = odeint(ode_func, y0, t) # 绘制解的图像 plt.plot(t, y) plt.xlabel('t') plt.ylabel('y') plt.title('Solution of ODE') plt.show() ``` 以上代码示例中,首先使用sympy解了一个常微分方程,并打印出解。然后使用scipy解了另一个常微分方程,并绘制了解的图像。你可以根据具体问题来修改函数和参数,以适应不同的常微分方程解需。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python常微分方程(组)](https://blog.csdn.net/weixin_61268973/article/details/122462611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [用python解决微分方程](https://blog.csdn.net/m0_59309242/article/details/119799476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值