python求解一维弦振动方程

1、一维弦振动方程

2、差分公式及求解

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
l=1    #长度
nx = 101  #x方向网格节点数量
dx = l/(nx-1)  #空间网格步长
t=6    #总时间
dt = 0.01  # 时间步长
t_set=np.array([0.00,0.10,0.20,0.30,0.40,0.50,0.60]) #需要观察的时间
t_get=t_set/dt #需要观察的时间的步数

# 指定初始条件
xp=np.linspace(0,l,num=nx)
u = np.sin(np.pi*xp)
utp=xp*(1-xp)*dt
u1=np.zeros(nx)
u1=u+utp
un1=u.copy()
un2=u1.copy()
# 计算
u_get=[] #需要观察的时间的波形
for n in range(int(t/dt)+1):
    if n in t_get.astype(int):
        if n==0:
            u_get.append(u)
            continue
        if n==1:
            u_get.append(u1)
            continue
        u_get.append(un2)
    un = np.zeros(nx)
    for i in range(1,nx-1):
       un[i] = dt**2/dx**2*(un2[i+1]+un2[i-1])+2*(1-dt**2/dx**2)*un2[i] - un1[i]
    un1=un2.copy()
    un2 = un.copy()


fig = plt.figure()
plt.rcParams['xtick.direction'] = 'in'  # 将x周的刻度线方向设置向内
plt.rcParams['ytick.direction'] = 'in'  # 将y轴的刻度方向设置向内
clist = ['blue', 'red', 'green', 'black', 'darkgreen', 'lime', 'gold', 'purple', 'green', 'cyan', 'salmon', 'grey',
             'mediumvioletred', 'darkkhaki', 'gray', 'darkcyan', 'violet', 'powderblue']
#绘制选的时间步的结果
for i in range(len(t_get)):
    plt.plot(xp, u_get[i], c=clist[i],lw =3,label= f't={t_set[i]}s')
plt.legend()
plt.show()

**注意:**时间不长和空间步长之比dt/dx<=1时,次解法是稳定且收敛的

相关推荐
a1117762 分钟前
Boxer 论文复刻(需要下载的文件都已放到压缩包)
python·开源·cv
不吃肥肉的傲寒4 分钟前
Graphify安装与结合claude code使用指南
java·python·ai编程·图搜索
djjdjdjdjjdj9 分钟前
golang如何编写SSL证书到期检测工具_golang SSL证书到期检测工具编写总结
jvm·数据库·python
axinawang14 分钟前
第2课: 与世界打招呼(输出)
python
2301_8135995514 分钟前
HTML5中Canvas局部刷新区域重绘的算法优化
jvm·数据库·python
m0_6028577615 分钟前
mysql如何防止用户通过子查询窃取权限_MySQL安全参数设置
jvm·数据库·python
我是无敌小恐龙20 分钟前
Java SE 零基础入门 Day05 类与对象核心详解(封装+构造方法+内存+变量)
java·开发语言·人工智能·python·机器学习·计算机视觉·数据挖掘
qq_1898070326 分钟前
Less如何处理CSS长文本换行_封装Mixin解决不同场景需求
jvm·数据库·python
小灰灰搞电子28 分钟前
Python self关键字详解及其应用
开发语言·python
HHHHH1010HHHHH30 分钟前
CSS如何处理带有状态切换的折叠菜单_利用BEM修饰符管理状态
jvm·数据库·python