分析JHTDB数据库的Channel5200数据集的数据(SciServer服务器)

代码来自https://github.com/idies/pyJHTDB/blob/master/examples/channel.ipynb

%matplotlib inline
import numpy as np
import math
import random
import pyJHTDB
import matplotlib.pyplot as plt
import time as ttN = 3
T = pyJHTDB.dbinfo.channel5200['time'][-1]
time = np.random.random()*TspatialInterp  = 6  # 6 拉格朗日点
temporalInterp = 0  # 无时间插值
FD4Lag4        = 44 # 4 point Lagrange interp for derivatives# mhdc has starttime .364 and endtime .376
startTime = time
endTime = startTime + 0.012
lag_dt = 0.0004# Select points in the database to query
lpoints = []
for i in range(0,N):lpoints.append([random.uniform(0, 8*3.14),random.uniform(-1, 1),random.uniform(0, 3*3.14)])# 2D array with single precision values
points = np.array(lpoints,dtype='float32')
# load shared library
lTDB = pyJHTDB.libJHTDB()
#initialize webservices
lTDB.initialize()#Add token
auth_token  = "edu.jhu.pha.turbulence.testing-201311"  #Replace with your own token here
lTDB.add_token(auth_token)print('Coordinates of {0} points where variables are requested:'.format(N))
for p in range(N):print('{0}: {1}'.format(p, points[p]))
print('Data is requested at time {0}'.format(time))

68a670ccc8944f25931799ce8dd923ef.png


下面是逐行分析

  • %matplotlib inline:在 Jupyter Notebook 中使 matplotlib 的图表内嵌显示。
  • numpymathrandom:用于数学运算和随机数生成。
  • pyJHTDB:用于访问 Johns Hopkins 湍流数据库 (JHTDB) 的 Python 包。
  • matplotlib.pyplot:用于绘图。
  • time:用于计时。
N = 3
T = pyJHTDB.dbinfo.channel5200['time'][-1]
time = np.random.random()*T

说明

  • N = 3:定义了要查询的点的数量。
  • T = pyJHTDB.dbinfo.channel5200['time'][-1]:获取 channel5200 数据集中时间序列的最后一个时间点,表示整个时间范围。
  • time = np.random.random() * T:生成一个随机的时间 time,范围从 0 到 T
spatialInterp  = 6  # 6 拉格朗日点
temporalInterp = 0  # 无时间插值
FD4Lag4        = 44 # 4 point Lagrange interp for derivatives
  • spatialInterp = 6:设置空间插值类型为 6 点拉格朗日插值。
  • temporalInterp = 0:时间插值设为无插值。
  • FD4Lag4 = 44:用于计算导数的 4 点拉格朗日插值。
startTime = time
endTime = startTime + 0.012
lag_dt = 0.0004

说明

  • startTime = time:设置查询的开始时间。
  • endTime = startTime + 0.012:设置查询的结束时间,时间范围为 0.012 单位。
  • lag_dt = 0.0004:设置时间步长为 0.0004。
lpoints = []
for i in range(0, N):lpoints.append([random.uniform(0, 8*3.14), random.uniform(-1, 1), random.uniform(0, 3*3.14)])

说明

  • 初始化 lpoints 为一个空列表。
  • 使用循环生成 N 个随机的坐标点,每个点是一个 [x, y, z] 的三维位置:
    • x 范围在 0
    • y 范围在 -11
    • z 范围在 0
points = np.array(lpoints, dtype='float32')lTDB = pyJHTDB.libJHTDB()
lTDB.initialize()

说明

  • lpoints 转换为单精度浮点型的 NumPy 数组 points,用于之后的查询。
  • lTDB = pyJHTDB.libJHTDB():创建 libJHTDB 类的实例 lTDB,用于访问 JHTDB。
  • lTDB.initialize():初始化 JHTDB 服务,准备进行数据查询。
auth_token  = "edu.jhu.pha.turbulence.testing-201311"  #Replace with your own token here
lTDB.add_token(auth_token)print('Coordinates of {0} points where variables are requested:'.format(N))
for p in range(N):print('{0}: {1}'.format(p, points[p]))
print('Data is requested at time {0}'.format(time))

说明

  • auth_token:设置授权令牌,用于访问 JHTDB 服务。
  • 如何将auth_token更换为自己的???
  • lTDB.add_token(auth_token):将授权令牌添加到 lTDB 实例,确保能够进行查询
  • 打印出 N 个点的坐标,显示每个点的位置。
  • 打印查询数据的随机时间 time

这段代码的作用是:

  • 导入必要的库和模块。
  • 生成 N 个随机的三维点,用于查询湍流数据库中的物理变量。
  • 设置插值和查询参数。
  • 初始化和授权 JHTDB 服务。
  • 打印出查询的坐标和时间,以便用户确认。

这段代码用于从 JHTDB 获取在特定时间和空间位置上的湍流数据,接下来可以调用相关方法来获取数据并进行分析。

print('Requesting pressure at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',sinterp = spatialInterp, tinterp = temporalInterp,getFunction = 'getPressure')
for p in range(N):print('{0}: {1}'.format(p, result[p]))

e4d78517631a4917b9de1dd0a70176cd.png

说明

  • result 变量接收从 JHTDB 查询得到的数据。
  • lTDB.getData()libJHTDB 类中的方法,用于从数据库中获取物理量数据。以下是各参数的含义:
    • time:请求数据的时间。
    • points:一个包含查询空间位置的数组,即前面生成的 N 个随机点。
    • data_set='channel':指定使用的湍流数据集,这里是 channel 数据集。
    • 想获取别的数据集数据时如何知道别的数据集名称???
    • sinterp=spatialInterp:指定空间插值方法,这里使用的是 6 点拉格朗日插值。
    • tinterp=temporalInterp:指定时间插值方法,这里不使用时间插值。
    • 插值法的作用是什么?为什么要插值???
    • getFunction='getVelocity':指定要获取的数据是速度信息。
  • 遍历 result 数组并打印每个点的结果。
  • '{0}: {1}'.format(p, result[p]) 格式化输出,显示点的索引和对应的速度值。

总结

这段代码的作用是:

  • 从 JHTDB 请求特定时间和空间位置的速度数据。
  • 使用 getData() 方法进行查询。
  • 输出每个查询点的速度结果,方便用户查看和验证。
print('Requesting pressure at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',sinterp = spatialInterp, tinterp = temporalInterp,getFunction = 'getPressure')
for p in range(N):print('{0}: {1}'.format(p, result[p]))

 同理,这段代码获取的压力值

4d02bf3744554b95b29b6ee30bf98ba1.png

print('Requesting velocity and pressure at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',sinterp = spatialInterp, tinterp = temporalInterp,getFunction = 'getVelocityAndPressure')
for p in range(N):print('{0}: {1}'.format(p, result[p]))

这段代码获取的速度和压力值 

92dc96c2e8964b8e94316bc149c35868.png

print('Requesting velocity gradient at {0} points...'.format(N))
result = lTDB.getData(time, points,sinterp = FD4Lag4, tinterp = temporalInterp,data_set ='channel',getFunction = 'getVelocityGradient')
for p in range(N):print('{0}: '.format(p) +'duxdx = {0:+e}, duxdy = {1:+e}, duxdz = {2:+e}\n   '.format(result[p][0], result[p][1], result[p][2]) +'duydx = {0:+e}, duydy = {1:+e}, duydz = {2:+e}\n   '.format(result[p][3], result[p][4], result[p][5]) +'duzdx = {0:+e}, duzdy = {1:+e}, duzdz = {2:+e}'.format(result[p][6], result[p][7], result[p][8]))

2f5d9823edc14ee295099c5dbfa6309f.png

说明

  • 调用 lTDB.getData() 函数来获取速度梯度数据。
    • getFunction='getVelocityGradient':表示要获取速度梯度信息。
    • 遍历 result 数组,并格式化输出每个点的速度梯度。
    • result[p] 包含当前点的速度梯度,排列方式为 [duxdx, duxdy, duxdz, duydx, duydy, duydz, duzdx, duzdy, duzdz],分别表示速度分量 u、v、w 在 x、y、z方向上的偏导数。

4641833fdb814aa7a4e0640d435ac014.png

print('Requesting velocity hessian at {0} points...'.format(N))
result = lTDB.getData(time, points,data_set = 'channel',sinterp = FD4Lag4, tinterp = temporalInterp,getFunction = 'getVelocityHessian')for p in range(N):print('{0}: '.format(p) +'d2uxdxdx = {0:+e}, d2uxdxdy = {1:+e}, d2uxdxdz = {2:+e}\n   '.format(result[p][ 0], result[p][ 1], result[p][ 2])+ 'd2uxdydy = {0:+e}, d2uxdydz = {1:+e}, d2uxdzdz = {2:+e}\n   '.format(result[p][ 3], result[p][ 4], result[p][ 5])+ 'd2uydxdx = {0:+e}, d2uydxdy = {1:+e}, d2uydxdz = {2:+e}\n   '.format(result[p][ 6], result[p][ 7], result[p][ 8])+ 'd2uydydy = {0:+e}, d2uydydz = {1:+e}, d2uydzdz = {2:+e}\n   '.format(result[p][ 9], result[p][10], result[p][11])+ 'd2uzdxdx = {0:+e}, d2uzdxdy = {1:+e}, d2uzdxdz = {2:+e}\n   '.format(result[p][12], result[p][13], result[p][14])+ 'd2uzdydy = {0:+e}, d2uzdydz = {1:+e}, d2uzdzdz = {2:+e}'.format(result[p][15], result[p][16], result[p][17]))

获取速度的二阶导数

5ce08a0ccf0646e0a1ba7f073530b7d6.png

说明

  • result 变量接收从 JHTDB 查询得到的速度 Hessian 数据。
  • lTDB.getData() 方法用于从数据库中获取数据,参数含义如下:
    • time:请求数据的时间。
    • points:一个包含查询空间位置的数组,即你之前生成的随机点。
    • data_set='channel':指定数据集,这里使用的是 channel 数据集。
    • sinterp=FD4Lag4:使用 4 点拉格朗日插值(FD4Lag4)计算导数,用于计算 Hessian。
    • tinterp=temporalInterp:指定时间插值方法,这里不使用时间插值(设为 0)。
    • getFunction='getVelocityHessian':指定要获取的数据是速度 Hessian。

0aff9d10ed4d47d795aa3df71010c627.png

print('Requesting velocity laplacian at {0} points...'.format(N))
result = lTDB.getData(time, points,sinterp = FD4Lag4, tinterp = temporalInterp, data_set = 'channel',getFunction = 'getVelocityLaplacian')
for p in range(N):print('{0}: '.format(p) +'grad2ux = {0:+e}, grad2uy = {1:+e}, grad2uz = {2:+e}, '.format(result[p][0], result[p][1], result[p][2]))

 81052262ee764bb39d2d1377c20e4bb0.png

850e1b551265488598d5df5edb5e86a5.png

标输出结果解释

8077317075e34ba1b4ffa3f1347d0e02.png da388be9b2eb4cbd899600007441ea9b.png

print('Requesting pressure hessian at {0} points...'.format(N))
result = lTDB.getData(time, points,sinterp = FD4Lag4, tinterp = temporalInterp, data_set = 'channel',getFunction = 'getPressureHessian')
for p in range(N):print('{0}: '.format(p) +'d2pdxdx = {0:+e}, d2pdxdy = {1:+e}, d2pdxdz = {2:+e}\n   '.format(result[p][0], result[p][1], result[p][2])+ 'd2pdydy = {0:+e}, d2pdydz = {1:+e}, d2pdzdz = {2:+e}'.format(result[p][3], result[p][4], result[p][5]))
print('Requesting pressure hessian at {0} points...'.format(N))
result = lTDB.getData(time, points,sinterp = FD4Lag4, tinterp = temporalInterp, data_set = 'channel',getFunction = 'getInvariant')
for p in range(N):print('{0}: '.format(p) +'S2 = {0:+e}, O2 = {1:+e}'.format(result[p][0], result[p][1]))

000af9659b7d4bac8bbf186b3d4908cc.png

说明

  • 从数据库中获取指定时间和位置的压力 Hessian。
  • getFunction='getPressureHessian' 指定请求的是压力的 Hessian 数据。

返回数据结构

  • result[p] 包含每个查询点的 6 个分量,对应 Hessian 矩阵中不重复的上三角部分。
  • 打印每个点的压力 Hessian 分量。
  • result[p][0] 表示 ∂2p∂x2\frac{\partial^2 p}{\partial x^2}∂x2∂2p​,依次类推。
  • 使用科学计数法格式化输出,使结果更清晰。

a997eeaf0fe04c4db4e94ce1d2037161.png

86868330dc654ebe98bcf3881f95a872.png

result = lTDB.getThreshold(data_set = 'channel',field = 'vorticity',time = 0,threshold = 65,x_start = 1, y_start = 1, z_start = 1,x_end = 4, y_end = 4, z_end = 4,sinterp = 40,tinterp = 0)
for p in range(result.shape[0]):print('{0}: '.format(p)+ 'i_x = {0}, i_y = {1}, i_z = {2}, value = {3} '.format(result[p][0], result[p][1], result[p][2],result[p][3]))

886879b6217c483c9d3fa6f6b5dc41af.png

逐句分析

  1. result = lTDB.getThreshold(...):

    • 使用 getThreshold 方法,从指定的 data_set(此处是 'channel')中获取满足特定阈值条件的涡量场('vorticity')数据点。
    • 参数 time = 0 指定在时间 t=0 时刻获取数据。
    • 参数 threshold = 65 表示提取涡量值大于或等于 65 的点。
    • x_start, y_start, z_startx_end, y_end, z_end 定义了要查询的立方体区域在网格中的起始和结束索引范围。
    • sinterp = 40 表示用于空间插值的方法。
    • tinterp = 0 表示没有时间插值。
  2. for p in range(result.shape[0])::

    • 遍历 result 数组的每个数据点。result 中的每个元素对应一个满足阈值条件的点。
  3. print(...):

    • 打印每个满足条件的点的索引和涡量值。
    • i_x, i_y, i_z 表示该点在网格中的索引位置。
    • value 表示该点的涡量值。

解释用途

  • 寻找高涡量区域:此方法有助于在流场中定位具有强旋转运动(高涡量)的区域,这些区域通常与湍流结构相关联,如涡核或强旋涡。
  • 研究湍流结构:提取和分析高涡量点可以帮助研究人员更好地理解湍流的特征,如旋涡生成和消散的机制。
  • 举例说明

    假设你在一个流动实验中想找到所有具有较高旋转速率的点,比如模拟中能量较集中的旋涡结构,这段代码会帮你在指定的立方体区域内找到涡量大于等于 65 的点,并返回这些点的网格位置和涡量值。

start = tt.time()
result = lTDB.getCutout(data_set = 'channel',field='u',time_step=int(1),start = np.array([1, 1, 1], dtype = int),end  = np.array([512, 512, 1], dtype = int),step  = np.array([1, 1, 1], dtype = int),filter_width = 1)
#print(result)
end = tt.time()
print(end - start)

 (这里使用 np.array([512, 512, 1],服务器会崩,不知道为什么,100都不行???问题已解决:由于token用的测试token(只能提取小切片),需要主动申请一个token

这段代码的作用是从指定的湍流数据集中提取特定区域的速度场数据(field='u' 表示获取速度场的 u 分量)。下面是详细的逐句分析和解释:

逐句分析

  1. start = tt.time():

    • 记录当前时间戳,以测量获取数据所需的时间。
  2. result = lTDB.getCutout(...):

    • 使用 getCutout 方法从 channel 数据集中提取指定的切片数据。
    • 参数说明:
      • data_set = 'channel':指定从通道湍流数据集中获取数据。
      • field='u':选择提取的场为速度的 uuu 分量(通常代表流动的 x 方向分量)。
      • time_step=int(1):选择时间步为 1。
      • start = np.array([1, 1, 1], dtype = int):起始位置,表示从网格中的第一个点(x=1, y=1, z=1)开始。
      • end = np.array([512, 512, 1], dtype = int):结束位置,表示在 x 和 y 方向扩展到 512,z 方向只取一个平面。
      • step = np.array([1, 1, 1], dtype = int):步长为 1,意味着在每个方向上提取连续数据点。
      • filter_width = 1:表示用于数据提取的过滤器宽度。
  3. #print(result):

    • 这行被注释掉了,通常用于查看结果数组的内容。可以取消注释以调试或查看数据提取结果。
  4. end = tt.time():

    • 记录数据提取完成后的时间戳。
  5. print(end - start):

    • 打印提取数据所花费的总时间,以秒为单位。这有助于评估从数据库提取数据的效率。

解释用途

这段代码旨在从湍流数据库中提取一个平面切片的数据(在 z=1 位置上、整个 x 和 y 平面的 uuu 分量)。提取这样的切片数据可以用于可视化流场的某一层,或者进一步的流动分析,例如涡结构检测或速度分布研究。

示例用途

例如,你想观察湍流通道中某一个特定平面上的速度分布,或者进行二维的流动分析(如流线图或速度图),这段代码会帮助你快速提取所需的数据切片进行分析。

print(result.shape)
fig = plt.figure(figsize = (20, 40))
a = fig.add_subplot(121)
#a.set_axis_off()
a.imshow(result[0,:,:,0],extent = [0, 3.14, 0, 2],interpolation = 'none')

dc30f3783ab046528aa8224f99fe923f.png

x, t = lTDB.getPosition(starttime = 0.1,endtime = 0.2,dt = 0.01,data_set = 'channel',point_coords = points[0:1,:],steps_to_keep = 10)
print(x)

这段代码的作用是可视化从湍流数据库中提取的速度场数据。下面是逐句分析和解释:

逐句分析

  1. print(result.shape):

    • 打印提取结果 result 的形状,用于确认数据的维度和大小。输出的形状会告诉你数据在 x、y、z方向上的采样点数及其结构。
  2. fig = plt.figure(figsize = (20, 40)):

    • 创建一个 Matplotlib 图形对象 fig,设置图形的大小为 20 × 40 英寸。较大的尺寸通常用于高分辨率的显示或打印。
  3. a = fig.add_subplot(121):

    • 添加一个子图 a 到图形 fig 中。121 表示图像布局为 1 行 2 列,并选择第 1 个子图。
  4. a.imshow(result[0,:,:,0], extent = [0, 3.14, 0, 2], interpolation = 'none'):

    • 使用 imshow 方法在子图 a 上显示数据切片。
      • result[0,:,:,0]:提取 result 中 z=1 处的 uuu 分量(整个 x 和 y 平面上的数据)。
      • extent = [0, 3.14, 0, 2]:指定显示范围,将 x 轴范围映射到 [0, 3.14],y 轴范围映射到 [0, 2]。这些值通常根据实际物理空间进行映射。
      • interpolation = 'none':不进行插值,直接显示原始数据点。
x, t = lTDB.getPosition(starttime = 0.1,endtime = 0.2,dt = 0.01,data_set = 'channel',point_coords = points[0:1,:],steps_to_keep = 10)
print(x)

这段代码使用了 lTDB.getPosition() 方法来追踪流体中的点随时间的移动,具体解释如下:

逐句分析

  1. x, t = lTDB.getPosition(...):

    • 调用 getPosition 方法来获取指定点在流场中随着时间演化的位置轨迹。
    • 返回值 x 是一个包含点在各个时间步的空间坐标的数组,t 是对应的时间步数组。
  2. starttime = 0.1, endtime = 0.2:

    • starttimeendtime 指定了位置追踪的时间范围,从 0.1 到 0.2(时间的单位取决于数据集的定义,如秒或无量纲时间)。
  3. dt = 0.01:

    • 设置每个时间步长为 0.01,这表示在 starttimeendtime 之间,每隔 0.01 个时间单位计算一次点的位置。
  4. data_set = 'channel':

    • 表示使用的流场数据集是 'channel'。
  5. point_coords = points[0:1,:]:

    • 选择 points 数组中的第一个点(points[0])作为起始位置进行追踪。[0:1, :] 表示只取第一个点的全部坐标(x, y, z)。
  6. steps_to_keep = 10:

    • 指定保存每隔多少个时间步的数据。例如,这个值为 10 表示程序会在 10 个计算步长中取 1 个位置来保存。
  7. print(x):

    • 打印 x,输出每个时间步中点的位置坐标。

代码用途

这段代码用于研究单个流体点在指定时间区间内的运动轨迹。输出的 x 是一个包含各个时间步位置坐标的数组,帮助研究人员了解在流场中点的移动情况。

t1 = np.linspace(0, 4*3.14, 256)
t2 = np.linspace(-1, 1, 256)
x = np.zeros((t1.shape[0], t2.shape[0], 3), np.float32)
x[:, :, 0] = t1[np.newaxis, :]
x[:, :, 1] = t2[:, np.newaxis]
x[:, :, 2] = .0
T = pyJHTDB.dbinfo.channel5200['time'][-1]
time = np.random.random()*T
u = lTDB.getData(time,x,data_set = 'channel5200',sinterp = 4,getFunction='getVelocity')
print(u.shape)
fig = plt.figure(figsize = (t1[-1] - t1[0], t2[-1] - t2[0]))
a = fig.add_subplot(121)
a.set_axis_off()
a.imshow(u[:,:,0],extent = [t1[0], t1[-1] - t1[0], t2[0], t2[-1] - t2[0]],interpolation = 'none')

54bf32c332eb4d278d85f0e0e75f4de0.png

65ab17e47b4c43a1aaaafcee28c48131.png

18a00930cc5b4ead8ae6c1576ee1a038.png

84aa6979b6bd4255affe3d39d62507fb.png 最后

lTDB.finalize() 
##是用于释放资源、关闭与数据服务器的连接或清理与 lTDB(如 PyJHTDB 类库)相关的会话的命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Vue零基础入门教程》第十二课:双向绑定指令

往期内容 《Vue零基础入门教程》第六课:基本选项 《Vue零基础入门教程》第八课:模板语法 《Vue零基础入门教程》第九课:插值语法细节 《Vue零基础入门教程》第十课:属性绑定指令 《Vue零基础入门教程》第十一课:事…

windows 应用 UI 自动化实战

UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑: 开发语言 毋庸置疑,在 UI 自动化测试领域&am…

linux部署Whisper 视频音频转文字

github链接:链接 我这里使用anaconda来部署,debian12系统,其他linux也同样 可以使用gpu或者cpu版本,建议使用n卡,rtx3060以上 一、前期准备 1.linux系统 链接:debian安装 链接:ubuntu安装 …

MySQL聚合查询分组查询联合查询

#对应代码练习 -- 创建考试成绩表 DROP TABLE IF EXISTS exam; CREATE TABLE exam ( id bigint, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) ); -- 插入测试数据 INSERT INTO exam (id,name, chinese, math, engli…

mini-spring源码分析

IOC模块 关键解释 beanFactory:beanFactory是一个hashMap, key为beanName, Value为 beanDefination beanDefination: BeanDefinitionRegistry,BeanDefinition注册表接口,定义注册BeanDefinition的方法 beanReference:增加Bean…

redis学习面试

1、数据类型 string 增删改查 set key valueget keydel kstrlen k 加减 incr articleincrby article 3decr articledecyby article 取v中特定位置数据 getrange name 0 -1getrange name 0 1setrange name 0 x 设置过期时间 setex pro 10 华为 等价于 set pro 华为expire pro…

详解MVC架构与三层架构以及DO、VO、DTO、BO、PO | SpringBoot基础概念

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天毛毛张分享的是SpeingBoot框架学习中的一些基础概念性的东西:MVC结构、三层架构、POJO、Entity、PO、VO、DO、BO、DTO、DAO 文章目录 1.架构1.1 基本…

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模,采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声(无回波)特性,仿胎儿超声影像呈对比明显…

【逐行注释】自适应Q和R的AUKF(自适应无迹卡尔曼滤波),附下载链接

文章目录 自适应Q的KF逐行注释的说明运行结果部分代码各模块解释 自适应Q的KF 自适应无迹卡尔曼滤波(Adaptive Unscented Kalman Filter,AUKF)是一种用于状态估计的滤波算法。它是基于无迹卡尔曼滤波(Unscented Kalman Filter&am…

易速鲜花聊天客服机器人的开发(上)

“聊天机器人”项目说明 聊天机器人(Chatbot)是LLM和LangChain的核心用例之一,很多人学习大语言模型,学习LangChain,就是为了开发出更好的、更能理解用户意图的聊天机器人。聊天机器人的核心特征是,它们可…

ChatGPT/AI辅助网络安全运营之-数据解压缩

在网络安全的世界中,经常会遇到各种压缩的数据,比如zip压缩,比如bzip2压缩,gzip压缩,xz压缩,7z压缩等。网络安全运营中需要对这些不同的压缩数据进行解压缩,解读其本意,本文将探索一…

05_JavaScript注释与常见输出方式

JavaScript注释与常见输出方式 JavaScript注释 源码中注释是不被引擎所解释的,它的作用是对代码进行解释。lavascript 提供两种注释的写法:一种是单行注释,用//起头:另一种是多行注释,放在/*和*/之间。 //这是单行注释/* 这是 多行 注释 *…

网络原理(一):应用层自定义协议的信息组织格式 HTTP 前置知识

目录 1. 应用层 2. 自定义协议 2.1 根据需求 > 明确传输信息 2.2 约定好信息组织的格式 2.2.1 行文本 2.2.2 xml 2.2.3 json 2.2.4 protobuf 3. HTTP 协议 3.1 特点 4. 抓包工具 1. 应用层 在前面的博客中, 我们了解了 TCP/IP 五层协议模型: 应用层传输层网络层…

题目 3209: 蓝桥杯2024年第十五届省赛真题-好数

一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 )上的数字是奇数,偶数位(十位、千位、十万位 )上的数字是偶数,我们就称之为“好数”。给定一个正整数 N,请计算从…

数据结构与算法学习笔记----KMP

数据结构与算法学习笔记----KMP author: 明月清了个风 last edited: 2024.11.24 Acwing 831. KMP字符串 给定一个字符串 S S S,以及一个模式串 P P P,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模式串 P P P在字符串 S S S中多次作为子串出…

算法基础 - 二分迭代法求解非线性方程

文章目录 1. 基本思想2. 编程实现2.1. 非递归2.2. 递归方案 3. 总结 二分迭代法使用了二分算法思想求解非线性方程式。 下面要求使用二分迭代法求解: 2x3-5x-10 方程式,且要求误差不能大于10e-5。 二分迭代法也只是近似求解算法。 所谓求解&#xff…

家校通小程序实战教程03学生管理

目录 1 创建数据源2 搭建后台功能3 设置主列字段4 批量导入数据5 设置查询条件6 实现查询和重置总结 我们现在已经搭建了班级管理,并且录入了班级口令。之后就是加入班级的功能了。这里分为老师加入班级和学生家长加入班级。 如果是学生家长的话,在加入之…

springboot336社区物资交易互助平台pf(论文+源码)_kaic

毕 业 设 计(论 文) 社区物资交易互助平台设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此&#xff…

【C++】7000字介绍map容器和set容器的功能和使用

目录 一、关联式容器和序列式容器 二、键值对,> 三、树形结构的关联式容器 四、set容器(key模型) 1、文档官网 2、功能介绍: 3、注意事项: 4、基本使用,更多接口可查看官网: (1&…

嵌入式C语言技巧15:深入浅出:多线程编程中锁的选择与优化策略

文章目录 导读一、锁机制概览二、实战演练:锁的选择与使用三、代码执行结果与分析四、总结与展望本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观…