s***e 发帖数: 5242 | 1 数值解
dy/dt=-i a y
i:虚数单位
a:常数
在windows下用c。
不管我采取什么scheme,总是不能得到正确的。大侠救命! |
N*********y 发帖数: 105 | 2 贴代码
【在 s***e 的大作中提到】 : 数值解 : dy/dt=-i a y : i:虚数单位 : a:常数 : 在windows下用c。 : 不管我采取什么scheme,总是不能得到正确的。大侠救命!
|
k****z 发帖数: 550 | 3 interesting question.
if you expect the result to have constant magnitude |y|^2, i don't think it
will work since numerical error will destroy it sooner or later.
but you can take dt very small and run some steps at least. |
s***e 发帖数: 5242 | 4 dy/dt=-ia y
i:虚数单位
a:常数
y在区间[10,20]
这个方程当然是有解析解的,但只是我关心的方程组的一部分,所以想在简单
的情况下了解算法。
code看下面。
现在的问题主要有2个:
1:我采取的方法理论上应该是不稳定的,但实际效果很好。
而理论上稳定的却总有耗散(幅度会减小)。。
2:a不能取得太大。实际上必须是a*dt<0.3*dx。
如果要求a大的话,如何改进?
谢谢
***************************************
#define a 10.0
#define a3 50.0
#define dt 0.0001
#define dr 0.01
#define Ni 150000
#define Nj 2000
#define jpeak 1500
#define jmin 1000
void main()
{
//-------------------initialization----------------------->>
for(j=jmin;j<=Nj-1;j++)
{
y[j] |
s***e 发帖数: 5242 | 5 事实上当我的dx和dt足够小的时候确实再现了解析解。但我的算法理论上是不稳定的阿
。。
it
【在 k****z 的大作中提到】 : interesting question. : if you expect the result to have constant magnitude |y|^2, i don't think it : will work since numerical error will destroy it sooner or later. : but you can take dt very small and run some steps at least.
|