代码句子(目标:每个句子复习20遍)
np.array
np.zeros1️⃣
np.arange()
plt.spy
np.eye2️⃣
np.roll() 2️⃣
from numpy.linalg import eig
from scipy.linalg import fractional_matrix_power as power
def shift_operator_1d(N):
I = np.eye(N)
return np.roll(I,1,axis = 1)
f = np.array([0,0,1,0])
T1 = shift_operator_1d(4)
T3 = power(T1,-1)
print(T3)
def shift_operator_1d(N):
I = np.eye(N)
return np.roll(I,1,axis = 1)
1.np.eye(N)
生成一个 N×N 的单位矩阵
- 不是一个向量(n行1列或者n列一行),而是两个维度相同的矩阵
- 单位矩阵不是指矩阵内所有元素都是1.【单位矩阵:diagonal元素为1,其余元素全为0】
作用:
生成三种类型的单位矩阵identity matrix:(1)行列数相同,(2)行列数不同,(3)行列数相同,但是单位元素有偏移(垂直于diagonal的两个方向:左上,右下)
function1:output ( n rows n colomns)identity matrix (Identical number of rows and columns)
例一:输出三行三列的单位矩阵:
import numpy as np
I = np.eye(3)
print(I)
输出:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
function2:输出行列数不相同的单位矩阵
例二:输出3行5列的identity matrix
I = np.eye(3, 5)
print(I)
输出:
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]]
3 行 5 列的矩阵(对角线仍然是 1,其余是 0)。
function3:使用 k 参数 偏移单位矩阵的对角线
I = np.eye(4, k=1) # 对角线向上偏移 1
print(I)
#输出
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]
[0. 0. 0. 0.]]
2.np.roll(I,1,axis = 1)
语法
np.roll(a, shift, axis=None)
参数
a:输入数组(这里是单位矩阵I)。shift:要移动的步数,可以是正数(右/下移)或负数(左/上移)。axis:axis=0按行移动(纵向)。--y方向axis=1按列移动(横向)。--x方向
注意:
不要搞混np.roll()和np.eye()中添加第二个参数:k参数进行的操作(可以实操下图中的代码,比较代码1和代码2输出的矩阵的区别)。
下面一张图片的两张代码的作用生成的矩阵一样
#代码1
def shift_operator_1d(N):
I = np.eye(N)
return np.eye(N,k=1)
#代码2
def shift_operator_1d(N):
I = np.eye(N)
return np.roll(I,1,axis = 1)
3.plt.spy()
plt.spy(A)
plt.show()
作用:用点可视化矩阵中非零元素点位置
语法
plt.spy(A, markersize=10)
参数
A:矩阵
markersize:控制点点大小
4.range(a,b)
--[a,b) 包含a,不包含b
5.
-
网格分辨率 (
N) 影响数值精度- 当
N太小时,有限差分方法可能会出现色散误差,导致波前的小波动。 - 增加
N(即减少dx),可以更好地捕捉高频信息,减少数值误差。
- 当
-
有限差分方法的数值误差
- 数值色散(Numerical Dispersion):数值方法的传播速度与真实物理波的速度不同,导致错误的伪波。
- 数值耗散(Numerical Dissipation):高频分量随着时间推移被削弱,导致波形模糊。
-
如何优化你的数值计算 ✅ 增加
N(空间分辨率),减少色散误差。
✅ 使用高阶有限差分格式(比如4阶中心差分),减少误差。
✅ 调整dt(时间步长),避免数值不稳定性。
✅ 检查初始条件,避免太陡的梯度造成误差。
3546

被折叠的 条评论
为什么被折叠?



