javascript - 如何模拟波动方程
问题描述
我最近一直在尝试在p5.js中模拟波动方程。
(x, y)
我的方法是用坐标绘制一堆点。我使用波动方程来获得这些粒子的运动。
这是我的数值积分方法:
var pos = this.masses[i].pos
var nextPos = this.masses[i + 1].pos
var lastPos = this.masses[i - 1].pos
var vel = this.masses[i].vel, acc = this.masses[i].acc // for simplicity
acc.x = 0
acc.y = c * c * ((nextPos.y - 2*pos.y + lastPos.y)) / d2x
vel.x += acc.x * dt
vel.y += acc.y * dt
pos.x += vel.x * dt
pos.y += vel.y * dt
我的加速度被定义为相对于 x 乘以波的速度平方的二阶导数,如此处所示。
所以我从这个转换我的方程:
(d²u/dt²) = c² (d²u/dx²)
变成这样的离散方程(其中u
,表示一个粒子的位置和c
波的传播速度):
d2u = u(x + 2h, t) - 2*u(x + h, t) + u(x, t)
d2t = 1e-5 // small step
acc = c * c * (d2u / d2t)
正如你所看到的,当预期的结果是这样的时候,波浪变大了:
我做错了什么?有人可以帮助我吗?谢谢 :)
解决方案
推荐阅读
- c# - 每 n 次 C# 记录百分比进度
- node.js - 无法使用 jest 在nodejs中模拟类的实例函数(来自类的新实例的函数)
- powershell - .AddDays() 方法后的 Powershell 格式日期
- java - String 类型没有属性 XXX!在从复合主键项中设置的 JPA 派生查询中
- agda - 没有大小类型的 corecursive Agda 函数
- php - 提交分数时删除按钮
- python - python中使用pandas过滤大数据框
- android - Android Studio - 最小化重复代码 - 自定义工具栏
- javascript - Convert to named values from string array?
- c - C中的连续字符串替换