【求助各位大佬】双缝干涉动态效果
mathematica吧
全部回复
仅看楼主
level 11
这个代码是Mathematica4.2版本的,所以现在版本运行会出错。但是不知道具体哪里错了,希望dalao们指点一下。
代码如下:
(* runtime: 10 seconds, V is the potential energy *)
<< LinearAlgebra`Tridiagonal`; n = 55; dx = 1.0/(n - 1); hbar = m = 1; dt = 2m dx^2/hbar; a = I hbar/dt; b = hbar^2/(4 m dx^2); blist = Table[b, {n - 1}];
psi = Table[Module[{p = {x - 0.25, y - 0.5}}, Exp[I {100, 0}.p - p.p/(2 0.14^2)]], {y, 0, 1, dx}, {x, 0, 1, dx}];
V = Table[If[0.48 < x < 0.52 && ! (0.4 < y < 0.475 || 0.525 < y < 0.6), 10000, 0], {y, 0, 1, dx}, {x, 0, 1, dx}];
Do[psi = Table[TridiagonalSolve[blist, 2a - 2b - V[[All, j]]/2, blist, (2a + 2b + V[[All, j]]/2)psi[[All, j]] - b Table[psi[[i, Min[n, j + 1]]] + psi[[i, Max[1, j - 1]]], {i, 1, n}]], {j, 1, n}]; psi = Table[TridiagonalSolve[blist, 2a - 2b - V[[i,All]]/2, blist, (2a + 2b + V[[i, All]]/2)psi[[All, i]] - b Table[psi[[j, Min[n, i + 1]]] + psi[[j, Max[1, i - 1]]], {j, 1, n}]], {i, 1, n}]; Show[Graphics[RasterArray[Map[(x = Min[Abs[
#]^2, 1];Hue[Arg[#
]/(2Pi), Min[1, 2(1 - x)], Min[1, 2x]]) &, psi + V, {2}]], AspectRatio -> 1]], {40}];
2017年06月13日 11点06分 1
level 11
2017年06月13日 11点06分 2
[泪][泪]这个是运行后的效果
2017年06月13日 11点06分
level 11
<< LinearAlgebra`Tridiagonal`
TridiagonalSolve
以上两个东西现在的版本应该怎么改呢?[乖]
2017年06月13日 11点06分 3
level 7
直接搜索帮助
Compatibility/tutorial/LinearAlgebra/Tridiagonal
会告诉你怎么升级的
Mathematica kernel's built-in sparse solver LinearSolve has replaced TridiagonalSolve as a faster solver of tridiagonal matrices.
2017年06月14日 08点06分 4
level 11
嗯,我查到是用linearsolve,可是下面这句代码好长,不知道怎么改才对。[泪][泪] TridiagonalSolve[blist, 2a - 2b - V[[All, j]]/2, blist, (2a + 2b + V[[All, j]]/2)psi[[All, j]] - b Table[psi[[i, Min[n, j + 1]]] + psi[[i, Max[1, j - 1]]], {i, 1, n}]]
2017年06月14日 08点06分 5
level 11
应该是要把前面三个矩阵合成一个,但是blist在定义的时候是n-1,合起来进行A.x==b的时候,系数矩阵A是n×n的矩阵,这就很矛盾[小乖]
2017年06月14日 08点06分 6
……仔细看帮助。里面已经给出了组合的方法。
2017年07月01日 08点07分
1