一维常系数对流方程的学习——来自流沙公众号

一维常系数对流方程的学习——来自流沙公众号
在这里插入图片描述
认识:
1、时间步长越小越靠后移动;网格越小则波的形状越一致,波形失真在减小,引出Courant数:u*dt/dx<sigma;
2、对numpy中的ones()、linspace()、zeros()有基础认识;
3、再次练习了matplotlib中的pyplot。
4、明白了一维方程编程的简单运算,基础

import numpy as np
# numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。
import matplotlib.pyplot as plt

def linearconv(nx):
	dx = 2/(nx - 1) # 空间网格步长,x方向总长度为2
	nt = 25 # 总的时间步长
	sigma = 0.8  # Courant数
	c = 1 # 常数
	dt =  sigma * dx / c  # 时间步长

	# 指定初始条件
	u = np.ones(nx)
	u[int(0.5/dx):int(1/dx + 1)] = 2 # 这一行实际上是制造了一个方波(0.5--1)
	# 下面将初始条件画出来
	plt.plot(np.linspace(0,2,nx),u,'r',linewidth=3,label = 'init') # linspace用于产生x1,x2之间的N点行矢量,其中x1、x2、N分别为起始值、终止值、元素个数

	# 计算25个时间步后的波长
	un = np.ones(nx)
	for n in range(nt):
		un = u.copy() # 后面的计算会改变u,故将u拷贝到un
		for i in range(1,nx):
			u[i] = un[i] - c * dt / dx * (un[i] - un[i-1])

	plt.plot(np.linspace(0,2,nx),u,'b',linewidth = 3, label = 'current')
	plt.xlabel("distance")
	plt.ylabel("speed")
	plt.legend()
	plt.show()

linearconv(10001)
# 时间步长越小越靠后移动;网格越小则波的形状越一致,波形失真在减小,故引出了Courant数:u*dt/dx<sigma

dt较大
dt较小

猜你喜欢

转载自blog.csdn.net/qq_42000453/article/details/82846034