t=0:0.1:20;
y = (t - 2 .*exp(-t) + 3) .*exp(-t);
y1=-exp(-t) .*(t - 2 .*exp(-t) + 3) + exp(-t).* (1 + 2.* exp(-t));
plot(t,y,'r-',t,y1,'b-'),legend('y','y’')

用MATLAB模拟图像结果:
image.png

3.利用Python求解该方程

通过上述计算,我们利用Python求解系统的零状态响应:

库函数准备

scipy
sympy
matplotlib
numpy

利用sympy进行符号解法

from sympy import *
init_printing()
#定义符号常量x 与 f(x)
x = Symbol('x')
f = symbols('f', cls=Function)
#用diffeq代表微分方程: f''(x) + 3f'(x) + 2f(x) = exp(-x)
diffeq = Eq(f(x).diff(x, x) + 3*f(x).diff(x) + 2*f(x), exp(-x))
#调用dsolve函数,返回一个Eq对象,hint控制精度
print(dsolve(diffeq, f(x)))

得到符号解,输出如下

Eq(f(x), (C1 + C2*exp(-x) + x)*exp(-x))

在带入初始松弛条件:

C1=-2

结果与我们计算结果一致。

利用Numpy和Scipy进行数值解法

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
Pytorch实现中文文本分类任务(Bert,ERNIE,TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer) jgx5201314: Epoch [1/20] /root/miniconda3/lib/python3.8/site-packages/torch/nn/functional.py:652: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.) return torch.max_pool1d(input, kernel_size, stride, padding, dilation, ceil_mode) Iter: 0, Train Loss: 2.3, Train Acc: 16.41%, Val Loss: 2.7, Val Acc: 10.00%, Time: 0:00:08 * Pytorch实现中文文本分类任务(Bert,ERNIE,TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer) jgx5201314: <bound method Module.parameters of Model( (embedding): Embedding(4762, 300) (convs): ModuleList( (0): Conv2d(1, 256, kernel_size=(2, 300), stride=(1, 1)) (1): Conv2d(1, 256, kernel_size=(3, 300), stride=(1, 1)) (2): Conv2d(1, 256, kernel_size=(4, 300), stride=(1, 1)) (dropout): Dropout(p=0.5, inplace=False) (fc): Linear(in_features=768, out_features=10, bias=True) Pytorch实现中文文本分类任务(Bert,ERNIE,TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer) jgx5201314: 楼主,我拉了这个代码,其他的都能跑,为啥TextCNN一直卡在epoch1 Pytorch实现中文文本分类任务(Bert,ERNIE,TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer) Bing激凌: File "D:\111\Bert-Chinese-Text-Classification-Pytorch\utils.py", line 19, in load_dataset content, label = lin.split('\t') ValueError: not enough values to unpack (expected 2, got 1) 加上bert也是这个错吗