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

本文深入探讨了一维常系数对流方程的数值求解方法,通过Python编程实现,重点介绍了Courant数的概念及其在保证数值稳定性中的作用。文中详细解释了如何利用numpy和matplotlib库进行数据处理和可视化,展示了不同网格尺寸下波形的演变过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一维常系数对流方程的学习——来自流沙公众号
在这里插入图片描述
认识:
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较小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值