当前位置: 首页 > article >正文

python:taichi 高性能可视化 Demo 展览

安装 pip install taichi
 taichi-1.7.3-cp39-cp39-win_amd64.whl (83.1 MB)

taichi 项目的目录结构

运行 cmd
where ti
D:\Python39\Scripts\ti.exe
# -- taichi 高性能可视化 Demo 展览
ti gallery

[Taichi] version 1.7.3, llvm 15.0.1, commit 5ec301be, win, python 3.9.13

*******************************************
**      Taichi Programming Language      **
*******************************************

Docs:   https://docs.taichi-lang.org/
GitHub: https://github.com/taichi-dev/taichi/
Forum:  https://forum.taichi.graphics/

>>> Running time: 4.30s

点击第1个分形图 fractal.py 脚本在
 D:\Python39\Lib\site-packages\taichi\examples\simulation\fractal.py
如果执行失败,可能是没有显卡GPU,把 ti.init(arch=ti.gpu) 改为 arch=ti.cpu 就可以了。


在 Taichi 中模拟一维波场,通常是利用 Taichi 编程语言的特性来对一维空间中的波动现象进行数值模拟,以下是相关介绍:

原理基础

  • 波动方程:一维波动方程的一般形式为 \frac {\partial^2 u} {\partial t^2} = c^2 \frac {\partial^2 u} {\partial x^2} ,其中 u(x,t) 表示在位置x 和时间t 处的波的状态(比如位移、压力等),c 是波的传播速度。
  • 数值求解方法:常用的方法有有限差分法等。将空间和时间进行离散化,把连续的波动方程转化为离散的方程组来求解。例如,在空间上把一维区域划分为许多等间距的网格点,在时间上也进行等间隔的采样。通过离散化后的方程,利用已知的初始条件和边界条件,逐步计算出每个网格点在不同时刻的波的状态。

代码实现示例

以下是一个简单的用 Taichi 实现的一维波动方程的模拟代码:test_taichi_1d.py 

# -*- coding: utf-8 -*-
""" taichi 模拟一维空间中的波动现象 """
import taichi as ti

# 初始化 taichi
ti.init(arch=ti.cpu) # 使用 CUDA 后端,用 ti.cuda

# 定义模拟参数
n = 512  # 空间网格点数
dt = 1e-4  # 时间步长
dx = 1.0 / (n - 1)  # 空间步长
c = 0.1  # 波速
steps = 2000  # 模拟步数

# 定义 taichi 场
u = ti.field(dtype=ti.f32, shape=n)  # 当前时刻的波场
u_prev = ti.field(dtype=ti.f32, shape=n)  # 上一时刻的波场
u_next = ti.field(dtype=ti.f32, shape=n)  # 下一时刻的波场

# 初始化边界条件和初始条件
@ti.kernel
def initialize():
    for i in range(n):
        u_prev[i] = 0.0
        u[i] = 0.0
        if 0.25 < i * dx < 0.35:
            u[i] = ti.exp(-((i * dx - 0.3) ** 2) / 0.01)

# 执行一步时间迭代
@ti.kernel
def update():
    for i in range(1, n - 1):
        u_next[i] = 2 * u[i] - u_prev[i] + (c * dt / dx) ** 2 * (u[i + 1] - 2 * u[i] + u[i - 1])
    # 更新边界条件
    u_next[0] = 0.0
    u_next[n - 1] = 0.0

# 进行模拟
initialize()
for step in range(steps):
    update()
    # 更新波场
    u_prev, u = u, u_next

# 打印结果
for j in range(n):
    if u[j] != 0.0:
        print(j,u[j])

运行 python test_taichi_1d.py

在上述代码中,首先初始化了 Taichi 环境和一些模拟参数,包括空间网格点数、时间步长、空间步长、波速和模拟步数等。然后定义了三个 Taichi 场 uu_prevu_next,分别表示当前时刻、上一时刻和下一时刻的波场。通过initialize函数初始化了波场的边界条件和初始条件,在这个例子中,初始条件是在空间的一个小区域内设置了一个高斯分布的波峰。update函数实现了根据波动方程进行一步时间迭代的计算,最后通过循环进行模拟,不断更新波场。


http://www.kler.cn/a/521161.html

相关文章:

  • 工业相机 SDK 二次开发-VC6.0 程序示例
  • python3+TensorFlow 2.x(二) 回归模型
  • 滤波电路汇总
  • 【PySide6快速入门】QInputDialog输入对话框
  • npm:升级自身时报错:EBADENGINE
  • Flutter解决macbook M芯片Android Studio中不显示IOS真机的问题
  • 基于SpringBoot的母婴护理知识共享管理系统
  • 代码随想录算法【Day32】
  • Go中的Context(上下文)
  • ESP8266基于WiFiManager设置页面添加参数并且掉电不丢失
  • GIT管理指令
  • Object类(1)
  • Qt Enter和HoverEnter事件
  • 硬件学习笔记--36 TTL、RS232、RS485相关介绍
  • Linux相关概念和易错知识点(26)(命名管道、共享内存)
  • PostGIS笔记:PostgreSQL 数据库与用户 基础操作
  • 使用ensp进行ppp协议综合实验
  • API接口开发淘宝商品数据一键解析获取商品信息编写
  • Linux Ubuntu 18.04下创建桌面快捷方式
  • 云原生:构建现代化应用的基石
  • 在亚马逊云科技上用Stable Diffusion 3.5 Large生成赛博朋克风图片(上)
  • 【深入理解FFMPEG】命令行阅读笔记
  • 基于微信小程序的外卖点餐系统设计与实现ssm+论文源码调试讲解
  • DeepSeek R1:AI领域的新突破与挑战
  • 【集合】ArrayList扩容机制的源码剖析
  • 航空开放系统架构OSA 与集成 IMA 概念解析