import matplotlib.pyplot as plt
from scipy import linspace,exp
from scipy.integrate import odeint, solve_bvp, solve_ivp
import numpy as np
为了兼容solve_ivp的参数形式,微分方程函数定义的参数顺序为(t,y),因此使用odeint函数时需要使参数tfirst=True
二阶甚至高阶微分方程组都可以变量替换成一阶方程组的形式,再调用相关函数进行求解,因此编写函数的时候,不同于一阶微分方程,二阶或者高阶微分方程返回的是低阶到高阶组成的方程组,
def fvdp1(t,y):
要把y看出一个向量,y = [dy0,dy1,dy2,...]分别表示y的n阶导,那么
y[0]就是需要求解的函数,y[1]表示一阶导,y[2]表示二阶导,以此类推
dy1 = y[1] # y[1]=dy/dt,一阶导
dy2 = -3 * y[1] - 2 * y[0] + exp( -1 * t )
# y[0]是最初始,也就是需要求解的函数
# 注意返回的顺序是[一阶导, 二阶导],这就形成了一阶微分方程组
return [dy1,dy2]
# 或者下面写法更加简单
def fvdp2(t,y):
要把y看出一个向量,y = [dy0,dy1,dy2,...]分别表示y的n阶导
对于二阶微分方程,肯定是由0阶和1阶函数组合而成的,所以下面把y看成向量的话,y0表示最初始的函数,也就是我们要求解的函数,y1表示一阶导,对于高阶微分方程也可以以此类推
y0, y1 = y
# y0是需要求解的函数,y1是一阶导
# 返回的顺序是[一阶导, 二阶导],这就形成了一阶微分方程组
dydt = [y1, -3*y1-2*y0+exp(-t)]
return dydt
def solve_second_order_ode():
求解二阶ODE
t2 = linspace(0,20,1000)
tspan = (0, 20.0)
y0 = [1.0, 2.0] # 初值条件
# 初值[2,0]表示y(0)=2,y'(0)=0
# 返回y,其中y[:,0]是y[0]的值,就是最终解,y[:,1]是y'(x)的值
y = odeint(fvdp1, y0, t2, tfirst=True)
y_ = solve_ivp(fvdp2, t_span=tspan, y0=y0, t_eval=t2)
plt.subplot(211)
y1, = plt.plot(t2,y[:,0],label='y')
y1_1, = plt.plot(t2,y[:,1],label='y‘')
plt.legend(handles=[y1,y1_1])
plt.subplot(212)
y2, = plt.plot(y_.t, y_.y[0,:],'g--',label='y(0)')
y2_2, = plt.plot(y_.t, y_.y[1,:],'r-',label='y(1)')
plt.legend(handles=[y2,y2_2])
plt.show()
solve_second_order_ode()
1.问题:求系统的零状态响应2.引入首先用高数知识求解非齐次常系数微分方程再利用信号与系统中冲激响应求解验证利用MATLAB求解验证y=dsolve('D2y+3*Dy+2*y=exp(-t)','y(0)=1','Dy(0)=2','t')得出结果:y = (t - 2 exp(-t) + 3) exp(-t)根据...
该存储库非常有待开发。
我将在整个学期中对其进行更新,因为我将我的更多代码从用于EP501的MATLAB存储库中移植到了python中。
许多MATLAB代码最终都将被移植,但是我不能保证在学期末它们都会全部移植。
无论哪种方式,您都可以自由地使用python完成分配。
FA2020学期更新的代码
基本的python功能
位于./python_basics
包含脚本,这些脚本显示了如何在Python中执行基本计算和绘图(basic_python.py)。
包含一个脚本,该脚本显示了如何使用python从MATLAB
.mat文件(load_matlab_file.py)中加载数据。
数值线性代数
位于./linear_algebra/
说明并检查解决矩阵问题的各种方法
包含用于消除方程组线性系统的python模块(elimtools.py)和迭代解决方案(ittools.py)。
包含示例脚本,这些脚本显示了简单消除(simple_elim_example.py)和高斯消除(Gauss_elim_e
信号与系统第二次试验:连续时间 LTI 系统的时域分析前言一、实验目的二、实验原理三、实验环境四、实验内容和步骤及实验数据五、实验结论六、实验总结
为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正!
一、实验目的
1.学会运用 MATLAB 符号求解连续系统的零输入响应和零状态响应
2.学会运用 MATLAB 求解连续系统的冲激响应和阶跃响应
二、实验原理
信号一般是随时间而变化的某些物理量。按
1)零状态响应和零输入响应的求解分析
零状态响应就是当前的输入值所产生的影响,而零输入响应则是历史输入产生的影响。可以联系电路中的零状态响应和零输入响应。
一般情况下,遇到应该是全状态响应,零状态响应和零输入响应共同作用。对于这种情况,我们将LTI用...
ke(t)→H→kr(t)ke(t)→H→kr(t)ke(t)→H→kr(t)(kkk为常数)
e1(t)→H→r1(t)e_1(t)→H→r_1(t)e1(t)→H→r1(t)
e2(t)→H→r2(t)e_2(...
(一)零状态响应的定义
零状态响应是系统在初始状态为零时,仅有输入信号f(t)f(t)f(t)引起的响应。用yzs(t)y_{zs}(t)yzs(t)表示
(二)解题步骤
(1)当微分方程右端不含冲击函数δ(t)\delta(t)δ(t)时
由于微分方程右端不含冲击函数δ(t)\delta(t)δ(t),所以零状态响应在t=0t=0t=0时不会发生突变。故
微分方程不同激励对应的特解
(三...
答:我可以为你编写一个使用Python来解决二阶微分方程的脚本,它看起来像这样:def solve_2nd_order_ode(x, y, dy, d2y):
解二阶微分方程
y:函数值
dy:函数导数
d2y:二阶导数
y:解析解
return y + dy*x + d2y/2*x**2