【Python百宝箱】模拟未见之境:精准工具畅游分子动力学风景

分子演绎:模拟工具的综合探索

前言

在当今科学研究中,分子动力学模拟成为解析原子和分子行为的关键工具之一。本文将深入探讨几种领先的分子动力学模拟工具,包括MDTraj、ASE(原子模拟环境)、OpenMM和CHARMM。这些工具不仅提供了高效的模拟引擎,而且支持丰富的分析和可视化工具,满足了不同研究领域对原子尺度模拟的多样需求。

欢迎订阅专栏:Python库百宝箱:解锁编程的神奇世界

文章目录

  • 分子演绎:模拟工具的综合探索
      • 前言
      • 1. MDTraj
        • 1.1 读取、写入和分析分子动力学轨迹
        • 1.2 轨迹数据高效处理方法
        • 1.3 分析分子结构和动力学特性
        • 1.4 可视化分子动力学轨迹
        • 1.5 计算分子的动力学性质
        • 1.6 聚类分析
        • 1.7 高级分析:Ramachandran 图
      • 2. ASE (原子模拟环境)
        • 2.1 原子结构建模与分析
          • 2.1.1 原子结构优化与构建
          • 2.1.2 分子动力学仿真
        • 2.2 支持多种计算化学软件和工具
          • 2.2.1 VASP、LAMMPS等软件集成
          • 2.2.2 量子力学、分子动力学计算
        • 2.3 提供丰富的原子尺度模拟功能
          • 2.3.1 原子间相互作用势能建立与计算
          • 2.3.2 分子动力学仿真的可视化工具
        • 2.4 高级分子动力学仿真
          • 2.4.1 自洽场分子动力学(SCF-MD)
          • 2.4.2 热力学积分法
        • 2.5 结构优化中的多台势能面
      • 3. OpenMM
        • 3.1 高效的分子动力学模拟库
          • 3.1.1 多平台支持、GPU计算加速
          • 3.1.2 灵活的分子模拟环境搭建
        • 3.2 多种力场模型提供
          • 3.2.1 经典力场、量子力场支持
          • 3.2.2 可定制化力场参数设定
        • 3.3 丰富的仿真工具和算法
          • 3.3.1 温度、压力和能量控制算法
          • 3.3.2 高级分析和可视化工具
      • 4. CHARMM
        • 4.1 分子模拟全能工具
          • 4.1.1 生物和化学系统的建模与仿真
        • 4.2 强大的力场模型支持
          • 4.2.1 多样化的力场选项和参数集
          • 4.2.2 分子动力学、蒙特卡洛模拟
        • 4.3 生物医药和结构生物学应用
          • 4.3.1 药物设计和分子对接模拟
          • 4.3.2 结构生物学相关分析工具
    • 总结

1. MDTraj

1.1 读取、写入和分析分子动力学轨迹

MDTraj是用于处理分子动力学轨迹数据的Python库。它提供了简便的方法读取和写入轨迹数据,同时支持丰富的分析工具。以下是一个简单的示例,演示如何使用MDTraj读取轨迹文件和获取基本信息:

import mdtraj as md# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 打印轨迹信息
print(traj)# 获取原子数
num_atoms = traj.n_atoms
print(f"Number of atoms: {num_atoms}")# 获取模拟的时间步长
time_step = traj.timestep
print(f"Time step: {time_step} ps")
1.2 轨迹数据高效处理方法

MDTraj通过优化轨迹数据处理方法实现高效的数据处理。以下示例演示了如何利用MDTraj计算分子动力学模拟中每个原子的轨迹:

import mdtraj as md# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 计算每个原子的轨迹
atom_trajectories = traj.xyz# 打印第一个原子的轨迹
print(f"Trajectory of the first atom: {atom_trajectories[0]}")
1.3 分析分子结构和动力学特性

MDTraj提供了多种分析工具,用于研究分子结构和动力学特性。以下示例演示了如何使用MDTraj计算分子动力学模拟中的RMSD(Root Mean Square Deviation):

import mdtraj as md# 读取参考结构
ref_structure = md.load('reference.pdb')# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 计算RMSD
rmsd = md.rmsd(traj, ref_structure)# 打印每个时间步的RMSD值
print("RMSD values:")
for i, value in enumerate(rmsd):print(f"Time step {i + 1}: {value} Å")
1.4 可视化分子动力学轨迹

MDTraj还提供了可视化分析的功能,以更直观地理解分子模拟的结果。以下示例演示了如何使用MDTraj可视化分子动力学轨迹:

import mdtraj as md
import nglview as nv# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 使用NGLView可视化轨迹
view = nv.show_mdtraj(traj)# 在Jupyter Notebook中显示可视化结果
view.show()
1.5 计算分子的动力学性质

MDTraj还允许用户计算和分析分子的动力学性质,例如动力学能量学和角动量。以下示例演示了如何使用MDTraj计算分子的动力学能量:

import mdtraj as md# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 计算动力学能量学
energy = md.compute_kinetic_energy(traj) + md.compute_potential_energy(traj)# 打印每个时间步的总能量
print("Total energy values:")
for i, value in enumerate(energy):print(f"Time step {i + 1}: {value} kJ/mol")
1.6 聚类分析

MDTraj支持对轨迹进行聚类分析,以识别结构的不同构象。以下示例演示了如何使用MDTraj进行聚类分析:

import mdtraj as md# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 进行聚类分析
clusters = md.cluster.DBSCAN(traj, eps=0.2, min_samples=5)# 打印每个时间步的簇分配
print("Cluster assignments:")
for i, cluster_id in enumerate(clusters):print(f"Time step {i + 1}: Cluster {cluster_id}")
1.7 高级分析:Ramachandran 图

Ramachandran图是用于分析蛋白质二面角的重要工具。MDTraj提供了生成Ramachandran图的功能,以下示例演示了如何使用MDTraj绘制Ramachandran图:

import mdtraj as md
import matplotlib.pyplot as plt# 读取分子动力学轨迹文件
traj = md.load('trajectory.dcd', top='topology.pdb')# 计算Phi和Psi角
phi_indices, phi_angles = md.compute_phi(traj)
psi_indices, psi_angles = md.compute_psi(traj)# 绘制Ramachandran图
plt.figure(figsize=(10, 6))
plt.scatter(phi_angles, psi_angles, alpha=0.5)
plt.xlabel('Phi Angle (degrees)')
plt.ylabel('Psi Angle (degrees)')
plt.title('Ramachandran Plot')
plt.show()

通过这些扩展,读者可以更全面地了解MDTraj的功能,进一步应用于分子动力学模拟的多个方面。

2. ASE (原子模拟环境)

2.1 原子结构建模与分析
2.1.1 原子结构优化与构建

ASE支持原子结构的优化和构建。以下示例演示了如何使用ASE进行分子动力学仿真中的原子结构优化:

from ase import Atoms
from ase.optimize import BFGS
from ase.calculators.emt import EMT# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 进行原子结构优化
opt = BFGS(h2o)
opt.run(fmax=0.05)# 打印优化后的原子坐标
print("Optimized atomic positions:")
print(h2o.positions)
2.1.2 分子动力学仿真

ASE支持分子动力学仿真。以下示例演示了如何使用ASE进行简单的分子动力学仿真:

from ase import Atoms
from ase.md import VelocityVerlet
from ase.calculators.emt import EMT# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 进行分子动力学仿真
dyn = VelocityVerlet(h2o, timestep=1.0 * 10**(-15))  # 1 femtosecond
dyn.run(steps=100)# 打印仿真后的原子坐标
print("Final atomic positions after dynamics:")
print(h2o.positions)
2.2 支持多种计算化学软件和工具
2.2.1 VASP、LAMMPS等软件集成

ASE通过集成多种计算化学软件,例如VASP和LAMMPS,扩展了其功能。以下示例演示了如何使用ASE与VASP进行计算:

from ase import Atoms
from ase.calculators.vasp import Vasp# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置VASP计算器
h2o.set_calculator(Vasp(encut=500, xc='PBE', ispin=1, sigma=0.1))# 获取能量
energy = h2o.get_potential_energy()# 打印能量
print(f"Total energy: {energy} eV")
2.2.2 量子力学、分子动力学计算

ASE支持量子力学和分子动力学计算。以下示例演示了如何使用ASE进行简单的量子力学计算:

from ase import Atoms
from ase.calculators.gaussian import Gaussian# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置Gaussian计算器
h2o.set_calculator(Gaussian(method='B3LYP', basis='6-31G*'))# 获取能量
energy = h2o.get_potential_energy()# 打印能量
print(f"Total energy: {energy} eV")
2.3 提供丰富的原子尺度模拟功能
2.3.1 原子间相互作用势能建立与计算

ASE支持原子间相互作用势能的建立和计算。以下示例演示了如何使用ASE计算氢氧分子的势能表面:

from ase import Atoms
from ase.calculators.emt import EMT
from ase.io import write
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 构建势能表面数据
positions = np.linspace(-1, 1, 100)
energies = []for x in positions:h2o.positions[0, 0] = xenergy = h2o.get_potential_energy()energies.append(energy)# 绘制势能表面
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(positions, energies, zs='auto', zdir='y', label='Potential Energy Surface')
ax.set_xlabel('X Position (Å)')
ax.set_ylabel('Energy (eV)')
ax.set_zlabel('Potential Energy (eV)')
plt.show()
2.3.2 分子动力学仿真的可视化工具

ASE提供了用于可视化分子动力学仿真结果的工具。以下示例演示了如何使用ASE和matplotlib可视化氢氧分子的动力学轨迹:

from ase import Atoms
from ase.md import VelocityVerlet
from ase.calculators.emt import EMT
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 进行分子动力学仿真
dyn = VelocityVerlet(h2o, timestep=1.0 * 10**(-15))  # 1 femtosecond
trajectory = []for step in range(100):dyn.run(steps=1)trajectory.append(h2o.positions.copy())# 可视化动力学轨迹
trajectory = np.array(trajectory)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(trajectory[:, 0, 0], trajectory[:, 0, 1], trajectory[:, 0, 2], label='Oxygen Atom')
ax.plot(trajectory[:, 1, 0], trajectory[:, 1, 1], trajectory[:, 1, 2], label='Hydrogen Atom 1')
ax.plot(trajectory[:, 2, 0], trajectory[:, 2, 1], trajectory[:, 2, 2], label='Hydrogen Atom 2')
ax.set_xlabel('X Position (Å)')
ax.set_ylabel('Y Position (Å)')
ax.set_zlabel('Z Position (Å)')
ax.legend()
plt.show()
2.4 高级分子动力学仿真
2.4.1 自洽场分子动力学(SCF-MD)

ASE支持自洽场分子动力学(SCF-MD),这是一种基于自洽场理论的高级动力学仿真方法。以下示例演示了如何使用ASE进行SCF-MD仿真:

from ase import Atoms
from ase.calculators.emt import EMT
from ase.md import MDLogger, Langevin# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 设置SCF-MD仿真
dyn = Langevin(h2o, timestep=1.0 * 10**(-15), temperature=300, friction=0.02, trajectory='scf_md.traj')# 运行SCF-MD仿真
dyn.attach(MDLogger(dyn, 'scf_md.log', header=True, stress=True, peratom=True), interval=10)
dyn.run(steps=100)
2.4.2 热力学积分法

ASE允许使用热力学积分法计算系统的热力学性质。以下示例演示了如何使用ASE计算氢氧分子的热容:

from ase import Atoms
from ase.calculators.emt import EMT
from ase.md import Langevin
from ase import units# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 进行分子动力学仿真
dyn = Langevin(h2o, timestep=1.0 * 10**(-15), temperature=300, friction=0.02)# 设置热力学积分法
energy = []
for step in range(100):dyn.run(steps=1)energy.append(h2o.get_potential_energy())# 计算热容
heat_capacity = units.kB * len(h2o) * units.kB * units.kB * units.kB * np.var(energy) / (300 * units.kB * units.kB)
print(f"Heat Capacity: {heat_capacity} J/(mol*K)")
2.5 结构优化中的多台势能面

ASE支持在结构优化中使用多台势能面。以下示例演示了如何使用ASE在H2O分子上运行Born-Oppenheimer分子动力学(BOMD):

from ase import Atoms
from ase.calculators.emt import EMT
from ase.md import MDLogger, BornOppenheimerMD# 创建氢氧分子
h2o = Atoms('H2O', positions=[(0, 0, 0), (0, 0, 1), (0, 1, 0)])# 设置计算器(EMT势能)
h2o.set_calculator(EMT())# 设置BOMD仿真
dyn = BornOppenheimerMD(h2o, trajectory='bomd.traj', timestep=1.0 * 10**(-15))# 运行BOMD仿真
dyn.attach(MDLogger(dyn, 'bomd.log', header=True, stress=True, peratom=True), interval=10)
dyn.run(steps=100)

通过这些示例,读者可以更深入地了解ASE的高级分子动力学仿真功能以及如何在结构优化和热力学积分法中利用ASE。

3. OpenMM

3.1 高效的分子动力学模拟库
3.1.1 多平台支持、GPU计算加速

OpenMM是一个多平台支持的高效分子动力学模拟库,可通过GPU计算加速。以下示例演示了如何使用OpenMM进行简单的分子动力学模拟:

from simtk.openmm import app, unit
from simtk.openmm.app import PDBFile
from simtk.openmm import LangevinIntegrator, Platform# 读取PDB文件
pdb = PDBFile('input.pdb')# 创建OpenMM系统
forcefield = app.ForceField('amber99sbildn.xml', 'tip3p.xml')
system = forcefield.createSystem(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=1.0*unit.nanometers, constraints=app.HBonds)# 设置Langevin积分器
integrator = LangevinIntegrator(300*unit.kelvin, 1.0/unit.picosecond, 2.0*unit.femtoseconds)# 创建OpenMM模拟
platform = Platform.getPlatformByName('CUDA')
simulation = app.Simulation(pdb.topology, system, integrator, platform)# 设置初始坐标和速度
simulation.context.setPositions(pdb.positions)
simulation.context.setVelocitiesToTemperature(300*unit.kelvin)# 运行模拟
simulation.step(1000)
3.1.2 灵活的分子模拟环境搭建

OpenMM提供灵活的分子模拟环境搭建。用户可以根据需要定制模拟环境。上述示例中的参数可以根据具体模拟要求进行调整。

3.2 多种力场模型提供
3.2.1 经典力场、量子力场支持

OpenMM支持多种力场模型,包括经典力场和量子力场。以下示例演示了如何使用OpenMM加载Amber力场进行模拟:

from simtk.openmm import app, unit
from simtk.openmm.app import PDBFile# 读取PDB文件
pdb = PDBFile('input.pdb')# 创建OpenMM系统并加载Amber力场
forcefield = app.ForceField('amber99sbildn.xml', 'tip3p.xml')
system = forcefield.createSystem(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=1.0*unit.nanometers, constraints=app.HBonds)
3.2.2 可定制化力场参数设定

OpenMM允许用户定制化力场参数。通过编辑XML文件,用户可以调整力场的参数以适应不同的模拟需求。

3.3 丰富的仿真工具和算法
3.3.1 温度、压力和能量控制算法

OpenMM提供了多种控制算法,用于维持模拟系统在特定的温度、压力和能量条件下运行。以下示例演示了如何使用OpenMM实现温度控制:

from simtk.openmm import app, unit
from simtk.openmm.app import PDBFile
from simtk.openmm import LangevinIntegrator, Platform# 读取PDB文件
pdb = PDBFile('input.pdb')# 创建OpenMM系统
forcefield = app.ForceField('amber99sbildn.xml', 'tip3p.xml')
system = forcefield.createSystem(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=1.0*unit.nanometers, constraints=app.HBonds)# 设置Langevin积分器,实现温度控制
integrator = LangevinIntegrator(300*unit.kelvin, 1.0/unit.picosecond, 2.0*unit.femtoseconds)# 创建OpenMM模拟
platform = Platform.getPlatformByName('CUDA')
simulation = app.Simulation(pdb.topology, system, integrator, platform)# 设置初始坐标和速度
simulation.context.setPositions(pdb.positions)
simulation.context.setVelocitiesToTemperature(300*unit.kelvin)# 运行模拟
simulation.step(1000)
3.3.2 高级分析和可视化工具

OpenMM提供了丰富的分析和可视化工具,用于深入挖掘模拟数据。以下示例演示了如何使用OpenMM计算分子动力学模拟的RMSD,并绘制其变化:

from simtk.openmm import app, unit
from simtk.openmm.app import PDBFile
from simtk.openmm import LangevinIntegrator, Platform
import numpy as np
import matplotlib.pyplot as plt# 读取PDB文件
pdb = PDBFile('input.pdb')# 创建OpenMM系统
forcefield = app.ForceField('amber99sbildn.xml', 'tip3p.xml')
system = forcefield.createSystem(pdb.topology, nonbondedMethod=app.PME, nonbondedCutoff=1.0*unit.nanometers, constraints=app.HBonds)# 设置Langevin积分器
integrator = LangevinIntegrator(300*unit.kelvin, 1.0/unit.picosecond, 2.0*unit.femtoseconds)# 创建OpenMM模拟
platform = Platform.getPlatformByName('CUDA')
simulation = app.Simulation(pdb.topology, system, integrator, platform)# 设置初始坐标和速度
simulation.context.setPositions(pdb.positions)
simulation.context.setVelocitiesToTemperature(300*unit.kelvin)# 运行模拟并记录RMSD
rmsd_values = []for step in range(1000):simulation.step(1)state = simulation.context.getState(getPositions=True)positions = state.getPositions()rmsd = np.sqrt(np.mean((np.array(positions) - np.array(pdb.positions))**2))rmsd_values.append(rmsd)# 绘制RMSD变化图
plt.plot(range(1000), rmsd_values)
plt.xlabel('Time step')
plt.ylabel('RMSD (Å)')
plt.title('RMSD during Molecular Dynamics Simulation')
plt.show()

4. CHARMM

4.1 分子模拟全能工具
4.1.1 生物和化学系统的建模与仿真

CHARMM是一款强大的分子模拟工具,可用于生物和化学系统的建模与仿真。以下示例演示了如何使用CHARMM建立和运行一个简单的蛋白质系统:

# CHARMM示例脚本
# 假设脚本名为charmm_script.inp* 输入
BOMLev 0
stream toppar/top_all22_prot.inp
read rtf card toppar/top_all22_prot.rtf
read para card toppar/par_all22_prot.prm* 设置分子系统
generate 1 first none last none
coor copy comp
evaluate segment prime sele all end
ic param
coor copy comp sele segid PRIME end
delete atom sele .not. segid PRIME end* 能量最小化
mini abnr nstep 1000* 执行动力学模拟
dynamics verlet nstep 1000 timestep 0.002 ntrfrq 100 iprfrq 100 iunfb 2* 输出
write coor pdb name output.pdb
4.2 强大的力场模型支持
4.2.1 多样化的力场选项和参数集

CHARMM支持多样化的力场选项和参数集,可根据需要选择合适的力场。上述示例中,使用了CHARMM22力场。

4.2.2 分子动力学、蒙特卡洛模拟

CHARMM不仅支持分子动力学模拟,还包括蒙特卡洛模拟。用户可以根据具体研究目的选择适当的模拟方法。

4.3 生物医药和结构生物学应用
4.3.1 药物设计和分子对接模拟

CHARMM在生物医药领域具有广泛应用,可用于药物设计和分子对接模拟。用户可以利用CHARMM进行药物研发和筛选。

4.3.2 结构生物学相关分析工具

CHARMM提供丰富的结构生物学相关分析工具,用于分析生物大分子的结构和性质。用户可以使用这些工具深入了解分子系统的结构和功能。

总结

通过深入研究MDTraj、ASE、OpenMM和CHARMM,本文旨在为科学研究人员提供全面的分子动力学模拟工具了解。这些工具不仅在理论研究中有着广泛的应用,还在药物设计、分子对接和生物大分子结构研究等领域发挥着重要作用。熟练掌握这些工具,将有助于推动分子尺度研究的深入发展。

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

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

相关文章

控制器转盘错误

目录 起因 经过(调试) 点焊机数据修改 结果 今天来记录设备的维修记录,下面来根据起因,经过,结果来说明情况!!!,希望对读者的你有帮助!!!

强化学习Double DQN方法玩雅达利Breakout游戏完整实现代码与评估pytorch

1. 实验环境 1.1 硬件配置 处理器:2*AMD EPYC 7773X 64-Core内存:1.5TB显卡:8*NVIDIA GeForce RTX 3090 24GB 1.2 工具环境 Python:3.10.12Anaconda:23.7.4系统:Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-…

软件测试|解决‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

前言 很多Python初学者在使用Python时,会遇到环境的问题,比如无法使用pip命令安装第三方库的问题,如下图: 当出现错误信息 "pip 不是内部或外部命令,也不是可运行的程序或批处理文件" 时,这通常…

echarts柱状图加单位,底部文本溢出展示

刚开始设置了半天都不展示单位,后来发现是被挡住了,需要调高top值 // 基于准备好的dom,初始化echarts实例var myChart echarts.init(document.getElementById("echartD"));rankOption {// backgroundColor: #00265f,tooltip: {…

树定义及遍历

1、定义树 可以参考链表,链表遍历不方便,如果单链表有多个next指针,则就形成了树。 Java: public class TreeNode {int val;TreeNode left, right;TreeNode(int val) { this.val val; this.left null;this.right null;} } Python&#…

WIN32 桌面应用编程综合实验一学习记录

文章目录 引用传递和指针传递的区别和联系如何创建一个空的WINDOWS桌面项目C编程中函数声明、定义和链接的基本概念 引用传递和指针传递的区别和联系 case ID_SETTING_FONT:GetDrawFont(hWnd, gs_logFont, &gs_TextColor); break;logFont 和 pColor 的用法体现了 C 中两种…

stm32的规则采样与注入采样的理解

规则与注入转换 在STM32中,规则采样(Regular Conversion)和注入采样(Injected Conversion)是用于模数转换的两种不同模式。 规则采样(Regular Conversion):规则采样是STM32中最常用…

面试算法105:最大的岛屿

题目 海洋岛屿地图可以用由0、1组成的二维数组表示,水平或竖直方向相连的一组1表示一个岛屿,请计算最大的岛屿的面积(即岛屿中1的数目)。例如,在下图中有4个岛屿,其中最大的岛屿的面积为5。 分析 将岛屿…

力扣-34. 在排序数组中查找元素的第一个和最后一个位置

文章目录 力扣题目代码 力扣题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算…

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展,3月5-7日山东国际会展中心与您相约! 展位号:1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区,设计、制版、印刷,营销策划为一体的专业…

python运行报错_ModuleNotFoundError: No module named ‘xxx‘,调用自己定义的文件报错。

问题描述:cifar10.py文件调用non_stationary.py文件的方法 目录结构: project_directory/ └── continuum/├── dataset_scripts/│ └── cifar10.py├── __init__.py├── continuum.py└── non_stationary.py# cifar10.pyfrom continuum…

JavaSec基础 反射修改Final修饰的属性及绕过高版本反射限制

反射重拾 半年没碰java了 先写点基础回忆一下 反射弹计算器 public class Test {public static void main(String[] args) throws Exception {Class<?> clazz Class.forName("java.lang.Runtime");clazz.getDeclaredMethod("exec", String.cla…

springBoot-自动配置原理

以下笔记内容&#xff0c; 整理自B站黑马springBoot视频&#xff0c;抖音Holis 1、自动配置原理 1.收集Spring开发者的编程习惯&#xff0c;整理开发过程使用的常用技术列表一>(技术集A) 2.收集常用技术(技术集A)的使用参数&#xff0c;整理开发过程中每个技术的常用设置列表…

灵活轻巧的java接口自动化测试实战

前言 无论是自动化测试还是自动化部署&#xff0c;撸码肯定少不了&#xff0c;所以下面的基于java语言的接口自动化测试&#xff0c;要想在业务上实现接口自动化&#xff0c;前提是要有一定的java基础。 如果没有java基础&#xff0c;也没关系。这里小编也为大家提供了一套jav…

U盘、硬盘无法打开,修复RAW磁盘或分区,硬盘变成raw格式如何恢复,数据恢复

本文持续更新&#xff0c;针对遇到的数据丢失问题进行详细记录 磁盘变成RAW的可能原因 突然断电或关机文件系统丢失或损坏病毒或恶意软件感染坏扇区磁盘损坏 以下解决方案针对非病毒损坏 通过Windows自带的工具进行恢复&#xff08;CHKDSK命令&#xff09; 1.连接硬盘 2.…

springcloud bus消息总线

简介 Spring Cloud Bus 配合Spring Cloud Config 使用可以实现配置的动态刷新。 Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;它整合了Java的事件处理机制和消息中间件的功能。Spring Clud Bus目前支持RabbitMQ和Kafka。 Spring C…

TDengine 被 Frost Sullivan 评为全球最佳工业数据管理解决方案

近日&#xff0c;TDengine 被国际知名咨询公司沙利文&#xff08;Frost & Sullivan&#xff09;评为全球最佳工业数据管理解决方案&#xff0c;赢得了 2023 年客户价值领导力奖&#xff08;Frost & Sullivan duoxie&#xff09;&#xff0c;该奖项重点关注引领行业创新…

这些开源自动化测试框架,会用等于白嫖一个w

作者&#xff1a;黑马测试 链接&#xff1a;https://www.zhihu.com/question/19923336/answer/2585952461 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 随着计算机技术人员的大量增加&#xff0c;通过编写代码来…

依赖包和项目版本不一致的冲突解决

报错如下 npm WARN ERESOLVE overriding peer dependency npm WARN While resolving: vant2.12.34 npm WARN Found: vue2.5.21 npm WARN node_modules/vue npm WARN vue"^2.5.21" from the root project npm WARN 3 more (vue-cli-plugin-i18n, vue-echarts, vu…

设计模式——工厂方法模式(Factory Method Pattern)

简单工厂模式 概述 说工厂方法模式之前&#xff0c;先说下简单工厂模式&#xff0c;简单工厂模式并不属于GoF 23个经典设计模式&#xff0c;但通常将它作为学习其他工厂模式的基础&#xff0c;它的设计思想很简单&#xff0c;其基本流程如下&#xff1a;首先将需要创建的各种不…