分形/数学/向量场
向量场[1]
这里主要描述了与时间无关的二维向量场的数值方法。
- 向量函数是一个给出向量作为输出的函数
- 场:空间(平面,球体,...)
- 场线是一条始终与给定向量场相切的线
- 标量/向量/张量
- 标量是在线性代数中使用的实数。标量是零阶张量
- 向量是一阶张量。向量是标量的扩展
- 张量是向量的扩展
二维向量的形式:[2]
- [z1](当第一个点已知时,只有一个复数,例如 z0 是原点
- [z0, z1] = 两个复数
- 4 个标量(实数)
- [x, y, dx , dy]
- [x0, y0, x1, y1]
- [x, y, 角度, 大小]
- 2 个标量:当第一个点已知时,[x1, y1] 用于第二个复数,例如 z0 是原点
函数的数值梯度
- "是一种使用已知函数在某些点的值来估计每个维度上偏导数的值的方法。"[3]
函数 f 在点 (x0,y0) 处的梯度函数 G
G(f,x0,y0) = (x1,y1)
输入
- 函数 f
- 点 (x0,y0),计算梯度
输出
- 从 (x0,yo) 到 (x1,y1) 的向量 = 梯度
见
计算:[4]
- "梯度计算为:(f(x + h) - f(x - h)) / (2*h),其中 h 是一个小的数字,通常为 1e-5,f(x) 将对每个输入元素进行调用,并带有 +h 和 -h 扰动。对于梯度检查,建议使用 float64 类型以确保数值精度。"[5]
- 在 matlab 中[6][7]
- 在 R 中[8]
- python[9]
ODE means Ordinary Differential Equation, where "ordinary" means with derivative respect to only one variable (like ), as opposed to an equation with partial derivatives (like , , ...) called PDE. (matteo.basei)
分类标准
- 自治的 / 非自治的
- 与时间无关(= 稳定 = 稳态)或与时间相关(非稳态流)
- 维度:二维,三维,...
- 网格(网格)类型
- 标量函数
- 势
- 力类型:电,磁,...
- 向量函数
- 方程(用于符号计算) - 常微分方程
- 数值(用于数值计算)
力类型 A 重力场
- 场线是 的解
- 测试质量的轨迹是 的解
其中
- g 是标准重力
- m 是质量
- F 是力场
电场
- 场线是点正电荷在电场作用下被迫移动时所遵循的路径。由于静止电荷引起的场线具有几个重要特性,包括始终从正电荷起源并终止于负电荷,它们以直角进入所有良导体,并且它们从不交叉或自闭。 场线是一个代表性概念;场实际上渗透了线之间所有介于线之间的空间。根据需要代表场的精度,可以绘制更多或更少的线。对由静止电荷产生的电场的研究称为静电学。
-
静电感应产生的导电物体(形状)中感应电荷的示意图,其中附近的电荷 (+) 的静电场(带箭头的线)导致静电感应
-
两个相同导电球体在相反电势下的电场
- Adrien Douady、Franiso Estrada 和 Pierrette Sentena。C 上的多项式向量场。未出版手稿
- Bodil Branner、Kealey Dias 编著的复数多项式向量场分类
- Kealey Dias、Lei Tan 编著的复数平面复数多项式向量场参数空间
- 从
- 平面(参数平面或动态平面)
- 标量函数
- 向量函数
- 使用标量函数(势)创建标量场
- 使用向量函数(势的梯度)从标量场创建向量场
- 计算
//https://editor.p5js.org/ndeji69/sketches/EA17R4HHa
// p5 js Tutorial】Swirling Pattern using Gradient for Generative Art by Nekodigi
//get gradient vector
function curl(x, y){
var EPSILON = 0.001;//sampling interval
//Find rate of change in X direction
var n1 = noise(x + EPSILON, y);
var n2 = noise(x - EPSILON, y);
//Average to find approximate derivative
var cx = (n1 - n2)/(2 * EPSILON);
//Find rate of change in Y direction
n1 = noise(x, y + EPSILON);
n2 = noise(x, y - EPSILON);
//Average to find approximate derivative
var cy = (n1 - n2)/(2 * EPSILON);
//return new createVector(cx, cy);//gradient toward higher position
return new createVector(cy, -cx);//rotate 90deg
}
function draw() {
tint(255, 4);
image(noiseImg, 0, 0);//fill with transparent noise image
//fill(0, 4);
//rect(0, 0, width, height);
strokeWeight(4);//particle size
stroke(255);
for(var i=0; i<particles.length; i++){
var p = particles[i];//pick a particle
p.pos.add(curl(p.pos.x/noiseScale, p.pos.y/noiseScale));
point(p.pos.x, p.pos.y);
}
}
通过数值求解轨迹反向时间,可以清楚地看到分隔线。由于在求解正向时间轨迹时,轨迹会从分隔线发散,而在求解反向时间轨迹时,轨迹会收敛于分隔线。
- Aytan Hajiyeva Aytan Hajiyeva 2021 年 10 月 1 日编著的梯度下降
- Raghunath D Raghunath D 2019 年 1 月 28 日编著的梯度下降算法
- SEBASTIAN RUDER 2016 年 1 月 19 日编著的梯度下降优化算法概述 和 arxiv 上的 pdf 文件
- Rong Ge • 2016 年 3 月 22 日编著的逃离鞍点
- Great Learning Team - 2020 年 5 月 24 日编著的机器学习中梯度下降的简单指南
- Sagar Mainkar Sagar Mainkar 2018 年 8 月 25 日编著的 Python 中的梯度下降
问题陈述
- 场线追踪(不是曲线素描[11]}
- 绘制等高线图(在计算机图形学中)= 数值延拓(在数学中)
- 在均匀网格(光栅扫描或像素)上不分析其结构的情况下,从种子点通过向量场计算积分曲线
-
自然参数延拓,是对迭代求解器到参数化问题的非常简单的改编
-
单纯形线性延拓算法。
-
伪弧长延拓,基于这样的观察结果,即曲线的“理想”参数化是弧长,是曲线切空间中弧长的近似值\
- 欧拉[14]
- RK2
- RK3
- RK4 - 这些采样算法的最初作者:Runge und Kutta。[15]
- 向量场寻路算法如何工作?作者:PDN - PasDeNom
None of these 4 methods generate an exact answer, but they are (from left to right) increasingly more accurate. They also take (from left to right) more and more time to finish as they require more samples for each iteration. You won't be able to create reliably closed curves using iterative sampling methods as small errors at any step may be amplified in successive steps. There is also no guarantee that the field-line ends up in the exact coordinate where it started. The Grasshopper metaball solver on the other hand uses a marching squares algorithm which is capable of finding closed loops because it is a grid-cell approach and sampling inaccuracy in one area doesn't carry over to another. However the solving of iso-curves is a very different process from the solving of particle trajectories through fields. ... Typically field lines shoot to infinity rather than form closed loops. That is one reason why I chose the RK methods here, because marching-cubes is very bad at dealing with things that tend to infinity.[16]
给定一个向量场 和一个起点 ,可以通过迭代方式构建场线,方法是找到该点的场向量 。该点的单位切向量 为:。通过沿场方向移动一小段距离 ,可以找到线上一个新的点
然后在那个点的场 被找到,并且在那个方向上移动一个距离 找到了场线的下一个点
通过重复此操作并将这些点连接起来,可以根据需要扩展场线。这只是实际场线的近似值,因为每个直线段实际上并不与其长度上的场相切,而是在其起点处相切。但是,通过使用足够小的值,执行更多更短的步骤,可以根据需要尽可能精确地近似场线。可以从 的相反方向扩展场线,方法是使用负步 在相反方向执行每个步骤。
rk4 数值积分方法
[edit | edit source]在二维时间无关矢量场的情况下,四阶龙格库塔 (RK4)
是一个矢量函数,对于每个点 p
p = (x, y)
在域中分配一个矢量 v
其中每个函数 是一个标量函数
场线是一条始终与给定矢量场相切的线。
令 r(s) 是由常微分方程组给出的场线,其矢量形式表示为
其中
- s 表示场线上的弧长,例如连续迭代次数
- 是一个种子点
2 个变量
[edit | edit source]给定场线上一个种子点 ,沿场线寻找下一个点 的更新规则(RK4)是[17]
其中
- h 是沿场线的步长 = ds
- k 是中间向量
只针对x
[edit | edit source]这里
给定场线上一个种子点 ,沿场线寻找下一个点 的更新规则(RK4)是[18]
其中
- h 是沿场线的步长 = dx
- k 是中间向量
示例
-
斜率场(黑色)、一些解(红色)和等斜线(蓝色)y'=x
-
对应于微分方程dy / dx = x2 − x − 2 的斜率场的三个积分曲线
向量场的可视化
[edit | edit source]绘图类型(流数据可视化技术) : [20]
- 符号 = 用于可视化向量场的图标或符号
- 最简单的符号 = 线段(刺猬图)
- 箭头图 = 羽毛图 = 刺猬(全局箭头图)
- 特征线 [21]
- 流线 = 在任何地方都与瞬时向量(速度)场相切的曲线(时间无关向量场)。对于时间无关向量场,轨迹线 = 路径线 = 轨迹线 [22]
- 纹理 (线积分卷积 = LIC)[23]
- 拓扑骨架 [24]
- 不动点提取(雅可比矩阵)
-
LIC
-
流线和流管
-
基于图像的流可视化
-
积分曲线
-
积分曲线
"path lines, streak lines, and stream lines are identical for stationary flows" Leif Kobbelt[25]
羽毛图
[edit | edit source]定义
- "羽毛图显示速度向量为具有分量 (u,v) 的箭头,位于点 (x,y)"[26]
流图
[edit | edit source]- 流图使用流线
- wolfram:ComplexStreamPlot
fBM 代表分形布朗运动
SDF = 有符号距离函数[27]
- 按维度(1D、2D、3D...)
- 按颜色
- 按距离函数(欧几里得距离,
- 算法[28]
- 高效的快速行进方法,
- 射线行进[29]
- 例如行进抛物线,一种线性时间的 CPU 友好算法。
- 最小腐蚀,一种易于实现的 GPU 友好算法
- 快速扫描方法
- 更通用的水平集方法。
- 高效的快速行进方法,
- 可视化(灰色梯度、LSM,
- 简单的预定义图形或任意形状
它不是
- Sqlce 数据库文件(.SDF)是由 SQL Server Compact Edition 创建和访问的数据库。= SO 中的 sdf 标签
- SDFormat(仿真描述格式),有时缩写为 SDF,是一种 XML 格式,用于描述机器人仿真器、可视化和控制中的对象和环境。
- ScientificDataFormat (SDF) 和 SDF python 包 = 用于读取、写入和插值多维数据。Scientific Data Format 是一种基于 HDF5 的开放文件格式,用于存储多维数据,例如参数、仿真结果或测量结果。
- SuiteCloud 开发框架(SDF)
- 二维基本图形的 SDF
- SDF 的法线
- 梯度
- i quilezles : 内部距离(SDF)
- 由 Martin Donald 制作的字形、形状、字体、有符号距离字段
- CSC2547 DeepSDF 用于形状表示的连续有符号距离函数学习
- 由 Ronja 制作的二维有符号距离字段基础
- snelly 是由 Jamie Portsmouth 制作的 WebGL SDF 路径追踪器
- shadertoy : 由 paniq 制作的 SDF 射线行进四叉树
- 由 munrocket 制作的 WGSL 二维 SDF 基本图形
- 通过有符号距离函数定义 3 种形状
- 维基百科中的有符号距离函数
- 由 I Quilez 制作的二维距离函数
- i quilez : 二维距离梯度函数
- SDF
- 8 点有符号顺序欧几里得距离变换
- 采样函数的距离变换
- heman
- Chlumsky: msdfgen = 多通道有符号距离字段生成器
- image-sdf = 命令行工具,它接受一个 4 通道 RGBA 图像并生成一个有符号距离字段。位掩码由 alpha 值大于 128 的像素和任何 RGB 通道值大于 128 的像素确定。
- fogleman sdf 在 Python 中简单的 SDF 网格生成
- christopher batty SDFGen 一个简单的命令行工具,用于从三角形网格生成基于网格的有符号距离字段(水平集)生成器。
- 磁盘 - 由 iq 制作的二维距离 - 代码很好
- 着色器教程 | 由 Suboptimal Engineer 制作的有符号距离字段入门 代码在实际的 shadertoy 中无法运行
- C 代码
- WGLS
// The MIT License
// Copyright © 2020 Inigo Quilez
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// GSLS
// Signed distance to a disk
// List of some other 2D distances: https://www.shadertoy.com/playlist/MXdSRf
//
// and iquilezles.org/articles/distfunctions2d
float sdCircle( in vec2 p, in float r )
{
return length(p)-r;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 p = (2.0*fragCoord-iResolution.xy)/iResolution.y;
vec2 m = (2.0*iMouse.xy-iResolution.xy)/iResolution.y;
float d = sdCircle(p,0.5);
// coloring
vec3 col = (d>0.0) ? vec3(0.9,0.6,0.3) : vec3(0.65,0.85,1.0); // exterior / interior
col *= 1.0 - exp(-6.0*abs(d)); // adding a black outline ( gray gradient) to the circle
col *= 0.8 + 0.2*cos(150.0*d); // adding waves
col = mix( col, vec3(1.0), 1.0-smoothstep(0.0,0.01,abs(d)) ); // note: adding white border to the circle
fragColor = vec4(col,1.0);
}
hg_sdf:一个用于构建有符号距离函数的 glsl 库
- 水星 -
- ink4
- NVScene 2015 会议:如何使用有符号距离函数创建内容(Johann Korndörfer)
- alan zucconi:有符号距离函数
- jcowles - Mercury 的 hg_sdf 库的 WebGL 友好移植版
- b3dsdf = 一个包含 2D/3D 距离函数、sdf/矢量运算和各种实用着色器节点组(159+)的工具包,适用于 Blender 2.83+
-
(空)场 : 矩形网格的点
-
标量场 : Mandelbrot 集的势
-
矢量场:梯度的数组图
- 一阶、自治的常微分方程组
- 常微分方程组的龙格-库塔法
- 一阶常微分方程组的几何和数值
- 由 MAKS SURGUY 制作的流线
- symbolab : 常微分方程计算器
- PETSc - 可移植、可扩展的科学计算工具包,发音为 PET-see (/ˈpɛt-siː/),用于对由偏微分方程建模的科学应用进行可扩展(并行)求解。它具有 C、Fortran 和 Python(通过 petsc4py)的绑定。PETSc 还包含 TAO,即高级优化工具包软件库。它支持 MPI,以及通过 CUDA、HIP 或 OpenCL 的 GPU,以及混合 MPI-GPU 并行性;它还支持 NEC-SX Tsubasa 矢量引擎。
- Maxima CAS
- CGAL - 由 Abdelkrim Mebarki 制作的二维流线放置
- Python
- OpenProcessing
- G'MIC - display_quiver
- OpenCV
- dsp.stackexchange: 如何在图像中检测梯度 - 方向梯度直方图 (HOG)
- 箭头线
- Maxima CAS
- plotdf(用于常微分方程)
- C++
- par_streamlines(C,WebGl) 由 Philip Allan Rideout 制作,github: prideout/par
- JavaScript
- c
- vfplot - 由 J J Green 制作的用于绘制二维向量场的程序
- rk4,由 j burkardt 制作的 C 代码,使用四阶龙格-库塔方法求解常微分方程 (ODE)。
- gsl
- js
- 来自 commons 的图片:Category:Field_lines
- 来自 commons 的图片:Category:Vector_fields
- fractalforums.org:cruising-through-fractal-flow-fields
- 由 Chris Thomasson 制作
- Deeplearning.ai 的梯度数值逼近
- 粘在尖端:不断演变的 Julia 集电容器中的电场线,由 Nils Berglund 制作
The coloured curves are the separatrices (i.e. real flow lines reaching infinity) of the complex ODE dz/dt = p(z) = z^4 + O(z^2), where the four roots of p(z) are pictured as the black dots: one fixed at the origin, and the remaining three forming the vertices of an equilateral triangle centered at the origin and rotating. Bifurcation occurs at certain critical angles of the rotation, where separatrices instantaneously merge to form homoclinic orbits. Following bifurcation, the so-called 'sectorial pairing' is permuted. There are a total of 5 possible sectorial pairings for the quartic polynomial vector fields (enumerated by the 3rd Catalan number). Three out of the five possibilities can be seen in 2/3 video, while the remaining two can be seen in part 1/3 In 3/3 example, at a bifurcation we have that either: only two of the four roots are centers (the other two remaining attached to separatrices), or NONE of the roots are centers (a phenomenon which does not occur for the quadratic or cubic polynomial vector fields). This video is inspired by the work of A. Douady and P. Sentenac. ( rboyce1000)
算法
- 创建具有所需属性的多项式
- f(z) = z*g(z) 具有原点的根
- g(z) 是单位根的 3 次根 =
f(z) = z(z^3 - 1)
可以使用 Maxima CAS 进行检查
z:x+y*%i; (%o1) %i y + x (%i2) p:z*(z^3-1); 3 (%o2) (%i y + x) ((%i y + x) - 1) (%i3) display2d:false; (%o3) false (%i4) r:realpart(p); (%o4) x*((-3*x*y^2)+x^3-1)-y*(3*x^2*y-y^3) (%i5) m:imagpart(p); (%o5) x*(3*x^2*y-y^3)+y*((-3*x*y^2)+x^3-1) (%i6) plotdf([r,m],[x,y]); (%o6) "/tmp/maxout28945.xmaxima" (%i8) s:solve([p],[x,y]); (%o8) [[x = %r1,y = (2*%i*%r1+%i+sqrt(3))/2], [x = %r2,y = (2*%i*%r2+%i-sqrt(3))/2],[x = %r3,y = %i*%r3], [x = %r4,y = %i*%r4-%i]]
要围绕原点旋转它,请将 1 更改为:(不动点的乘子)其中 t 是以转数为单位的真分数
评论中的原始函数
- ↑ 维基百科中的向量场
- ↑ 维基百科中的欧几里得向量
- ↑ matlab:梯度函数
- ↑ stackoverflow 问题:是否有任何标准方法可以计算数值梯度
- ↑ 由 Mamy Ratsimbazafy 制作的 nnp_numerical_gradient
- ↑ matrixlab-examples:梯度
- ↑ 由 itectec 制作的 matlab-function-gradient-numerical-gradient
- ↑ numDeriv:grad
- ↑ numpy:梯度
- ↑ 由 Kenneth I. Joy 制作的向量场中粒子追踪的数值方法
- ↑ 由 David Guichard 和朋友制作的曲线绘制
- ↑ liruics:科学可视化入门 - 流场
- ↑ what-when-how 的光栅算法 - 基本计算机图形学第二部分
- ↑ bolster.academy : 欧拉方法交互式
- ↑ Greg Petrics 的交互式龙格库塔 4
- ↑ grasshopper3d 论坛:场线 - 如何重建并使其周期性?overrideMobileRedirect=1
- ↑ 三维向量场中临界点的分类和可视化。Furuheim 和 Aasen 的硕士论文
- ↑ 三维向量场中临界点的分类和可视化。Furuheim 和 Aasen 的硕士论文
- ↑ Weisstein, Eric W. "积分曲线。" 来自 Wolfram 网络资源 MathWorld
- ↑ 来自 TUV 的流动可视化
- ↑ Tomáš Fabián 的数据可视化
- ↑ 来自 UCF 的拥挤场景中流动的迹线表示
- ↑ 刘占平的 lic
- ↑ 流分析和可视化中的向量场拓扑,作者:陈国宁
- ↑ 向量场可视化,作者:Leif Kobbelt
- ↑ matlab ref : quiver 图
- ↑ CedricGuillemet: SDF = 与符号距离场相关的资源(论文、链接、讨论、着色器玩具等)的集合
- ↑ 2018 年 Philip Rideout 的距离场
- ↑ ray-march = 通过距离场光线追踪渲染过程 3D 几何图形