nano_exit

基礎的なことこそ、簡単な例が必要だと思うのです。

プログラミング

三準位系の間接相互作用(プロット)

前回、三準位系について考察した。 koideforest.hatenadiary.com今回は、実際にエネルギー準位が相互作用によってどう変化するかをプロットする。 import numpy as np import sympy as sy from matplotlib import pyplot as plt # eigenvalues e, v12, v23 =…

「式の形」と「リーダブルコード」について

正射影ベクトルの公式というものがあるらしい。 正射影ベクトルの公式の証明と使い方 | 高校数学の美しい物語 これは、「ベクトルをベクトル方向に射影したベクトルを求める」というものである。この公式を見て思ったのは、「計算出来るけど『意味が』分かり…

多変数関数の連続性

変数が増えると、一見連続そうに見えても、不連続な場合がある。例1: import numpy as np from matplotlib import pyplot as plt def arbitrary_function( x, y ): return ( x - y ) / ( x + y + 1e-7 ) N = 1000 x_min, x_max = -1, 1 y_min, y_max = -1, …

pythonでの計算時間の測定とその出力

自分用のメモ import time time_start = time.time() # # calculation contents # time_end = time.time() delta = time_end - time_start second = delta % 60 minuite = ( delta % 3600 ) // 60 hour = delta // 3600 print( " {:>.1f} s".format( delta )…

Windows 10にWSLでUbuntuを入れたらOpenMPIで警告が出た時の話

OpenMPIをインストールした後、mpirunで実行ファイルを走らせると、以下のような警告文が出た。 WARNING: Linux kernel CMA support was requested via the btl_vader_single_copy_mechanism MCA variable, but CMA support is not available due to restric…

mpi4pyをOpenMPIでインストールした時の話

WSLで入れたUbuntuでpythonの環境が整いつつあったので、mpi4pyをpipで入れようとしたら、上手く行かなかった。 どうもインストールの際に内部でmpiccでコンパイルするときにコケていて、エラーの内容は-lmpeやら-llmpeやらが無いということだった。しかし、…

Windows 10にWSLでUbuntuを入れてもpython (matplotlib)で図が表示されなかった時の話

pyenvを使って、pythonおよびモジュールを管理出来るようになった。 koideforest.hatenadiary.comそこで、matplotlibでとりあえず図が出るか確認したところ、 from matplotlib import pyplot as plt plt.plot( range(2), range(2) ) plt.show() 何も出ず、う…

Windows10にWSLでUbuntuを入れてもpyenvが使えなかった時の話

前前回、前回と、Windows 10上でUbuntuを動かす上で、Proxyの設定が重要であることを学んで来た。 koideforest.hatenadiary.com koideforest.hatenadiary.comgit cloneが使えるところまで来たため、pyenvをインストールしたところ、pyenv installがコケてし…

Windows 10にWSLでUbuntuを入れてもgit cloneが使えなかった時の話

前回、Windows 10でaptを使えるようにしました。 koideforest.hatenadiary.comそれで次にgit cloneでpyenvを入れようとしたら fatal: unable to access 'https://github.com/pyenv/pyenv.git/': gnutls_handshake() failed: The TLS connection was non-prop…

Windows10にWSLでUbuntuを入れてもaptが使えなかった時の話

新しくWindows PCを用意して、WSL経由でUbuntuをインストールしたが、aptが使えなくて困っていた。以下のサイトを参考にした。 WSL(Windows Subsystem for Linux)のProxy設定方法 | 組込みエンジニアの思うところ Windowsでプロキシのユーザとパスワードを…

高速フーリエ変換する時の端点の話。

高速フーリエ変換ことFFT(ファイナルファンタジータクティクスではありません)は、結局は離散フーリエ変換な訳で、ある範囲のデータが無限に周期的に繰り返しているとしてフーリエ変換してくれます。 この時に、端の点のどこで周期性を課すのか、ややこし…

FFTWで3次元高速フーリエ変換してみた。

前回の例を元に、3次元に拡張してみた。 koideforest.hatenadiary.com program fftw3_test_3d implicit none integer, parameter :: WP = selected_real_kind( 8 ) real( WP ), parameter :: PI = 3.141592653589793 complex( WP ), parameter :: I = ( 0, 1…

FFTWをfortranで使う際の自分用のメモ

FFTWをfortranで使う。本家の説明: FFTW 3.3.8: Fortran Examples参考にしたサイト: fftwの使い方:腰も砕けよ 膝も折れよ:So-net blog FortranのFFTWの使い方 - Qiita Hiroyuki R. Takahashi Fumio KUSUHARA -Fortran90で構造解析- program fftw3_test i…

Fortranの精度変更。

Fortranの精度変更の書式が自分の知らない感じだったので、自分用にまとめる。 Fortran Best Practices — Fortran90 1.0 documentation program test_presicion implicit none integer, parameter :: dp0 = kind( 0.d0 ) integer, parameter :: dp = selecte…

Makefileの自分用のメモ

FC = gfortran FFLAGS = INCLUDE = -I/opt/local/include LIBS = -L/opt/local/lib -lbrabra PROGRAM = main.out OBJS = sub.o SRCS = $(OBJS:%.o=%.f90) .Phony: all clean all: $(PROGRAM) $(PROGRAM): $(OBJS) $(FC) $(FFLAGS) -o $@ $^ $(INCLUDE) $(LIB…

pythonで三次元プロットする時の自分用メモ

三次元プロット用のx軸、y軸の配列。 import numpy as np N = 100 x_min, x_max = -1, 1 y_min, y_max = -1, 1 x1 = np.linspace( x_min, x_max, N ) y1 = np.linspace( y_min, y_max, N ) X, Y = np.meshgrid( x1, y1 ) 三次元プロット用のz軸データ。 def …

自分が自分じゃないものってNaNだ。

"NaN"とは"Not a Number"の略で、例えば「1/0」のような変な計算をしてしまった時に出力される。 このNaNの特徴として、「NaN = NaN」が「偽(False)」になる。 逆に言うと、「NaN is not NaN」が「真(True)」になる。NaNとは「自分が自分でないもの」な…

波動関数の節を数える

文字通り、波動関数の節を数える。ndarrayの中で条件を満たす要素数を数える方法。 NumPy配列ndarrayの条件を満たす要素数をカウント | note.nkmk.me import numpy as np x_min, x_max, N = 0, 3*np.pi, 100 x = np.linspace( x_min, x_max, N ) wave = np.c…

Spigot Algorithm

ネイピア数ってそういえばどうやって計算しているのかと思って調べてみたら、面白い記事を見つけた。 こつこつアルゴリズム(Spigot Algorithm)無限級数が以下のように定義されているとする。 この時、 と書けるので、 ここで、 したがって、これを次々繰り返…

二階微分演算子の変数変換 for Numerov method

Numerov法は一階微分方程式を含まない二階微分方程式を解くのに便利な方法である。 この方法を適用するには、等間隔の変数刻み(メッシュ or グリッド)が必要である。 しかし、変化が穏やかなところでは粗いメッシュで十分だが、一方で変化が急なところでは…

matplotlibで二文字以上の変数を上付きにする。

matplotlibで普通に from matplotlib import pyplot as plt atomic_number = 29 plt.title( 'Cu$^{}$'.format( atomic_number ) ) とやると、「Cu9」となってしまう。これは、内部で「$^29$」と書かれたと見做されているためである。 ベタ打ちするならば、「…

ポテンシャルのルジャンドル関数展開

「ポテンシャルの角運動量展開」の二次元版だと思って頂いて差し支えない。係数 はルジャンドル関数の直交関係から出て来る。 koideforest.hatenadiary.com上記の式を用いて、まで展開してみる。 import numpy as np from math import radians from scipy.sp…

Muffin-tin近似と厳密なポテンシャルとの差について

簡単のため、二個の離れた原子核からのクーロンポテンシャルのみを扱うとする。 この時の、厳密なポテンシャルとMuffin-tin近似との差を見る。Muffin-tin近似をする際、隣のサイトのポテンシャルの球平均は、以前にまとめた方法を使った。 koideforest.haten…

誤差関数によるステップ関数でGibbs現象は起こるか?

ステップ関数等で不連続に打ち切られた関数をフーリエ変換しようとすると、どんなに頑張っても振動が残る。 これはギブス現象として知られている。 ギブズ現象 - Wikipediaでは、ステップ関数の代わりに誤差関数で滑らかにしたら、どれくらい収束が良いのか…

Juliaで一次元井戸型ポテンシャル

以下のサイトの下の方に、Juliaで一次元のシュレーディンガー方程式を解くPDFが紹介されている。 物理ノートby永井Juliaの練習としてやってみた。 PDF内では、無限の井戸の中に斥力ポテンシャルを入れた場合をやっているが、ここでは引力ポテンシャルに対し…

pythonでペンローズタイリング

ペンローズタイリングとは、ペンローズが開発した非周期的な図形の敷き詰め方である。 以下のサイトで、ペンローズタイリングの方法と、そのpythonスクリプトが公開されている。 Penrose Tiling Explained図の描画には、pycairoが使われていて、事前にインス…

頂角が小さい二等辺三角形の底辺について

回転運動の説明を読んでいる時に、角度が小さい時の差ベクトルの近似について気になったので考えて見た。 等速円運動 [物理のかぎしっぽ]以下の図のような二等辺三角形における底辺(青)、円弧(赤)、そして垂線(緑)を考える。 図では頂角は30度でプロッ…

sympyで(平面の)Greenの定理を確認

sympyの練習を兼ねて、平面に対するGreenの定理で、問題を解いてみる。 平面のグリーンの定理 [物理のかぎしっぽ]以下の積分を求めてみる。 原点で最大値を取り、等方向的で、境界でゼロを持つような、何かしらの密度を積分する、と思えば解りやすいだろうか…

多重項を数える(2)

以前に、軌道内の多重項を求めるスクリプトを書いた。 koideforest.hatenadiary.comここではそれらを用いた上で、さらに軌道間で多重項を合成する。 軌道の記号と値を行き来する関数 def spec2l( spec ): if spec in { "s", "S" }: l = 0 elif spec in { "p"…

多重項を数える(1)

前回、binary表現を使って、電子配置を作ることを試みた。 koideforest.hatenadiary.com次のステップとして多重項を数え上げるため、電子配置を作るのと同時に角運動量とスピンも一緒にリストで保存するように改良した。 def add_electron( configurations0,…