Level *: Roundoff error from summing up
small values (compare different precisions):
It compares the roundoff errors for different precision
floating point types using ndarray of numpy module.
Program:
download sum_error.py
(Source
code) or sum_error-plt.py
(Source
code)
Algorisms / Python modules:
numpy
Usage: python
sum_error.py
Output: to display and sum_error.csv
What you learn: for,
if, write to csv, numpy ndarray with specified FP precision
Level *: Roundoff error from summing up
small values:
Show roundoff errors for given increment h and
iteration number n.
Program:
download sum.py
(Source code)
Algorisms / Python modules:
none
Usage: python sum.py h
n
Ex: python sum.py 0.1
20
Add 0.1 incrementally for 20 times and
show each result.
Output: to display
What you learn: nothing
new
Level *: Information buried:
Show the result of exp(-40) by Taylor expansion to
show the error of information buried.
Program:
download information_buried.py
(Source
code)
Algorisms / Python modules:
none
Usage: python
information_buried.py
Output: to display
What you learn: nothing
new
python programs: Numerical differentiation
Level *: Effect of x mesh h on
numerical differentiation using two-point forward difference method:
It compares the differentiation errors for different x
mesh h for two-point forward difference method,
df / dx ~ (f(x+h) - f(x)) / h.
Program:
download diff_h.py
(Source
code)
Algorisms / Python modules:
none
Usage: python
diff_h.py
Output: to display and diff_h.csv.
What you learn:
function definition
Level *: Effect
of different approximations on numerical differentiation:
It compares the differentiation errors for two- to
seven-point difference approximations.
Program:
Download diff_order.py
( Source
code)
Algorisms / Python modules:
none
Usage: python
diff_order.py
Output: to display, diff_order.csv,
and graph
Visualization:
implemented in the python script
What you learn: how to
plot graph using matplotlib
Level *: Effect of different approximations
on numerical differentiation with random noise data:
It compares the differentiation errors for two- to
seven-point difference approximations.
Program:
download diff_order_noise.py
(Source
code)
Algorisms / Python modules:
two- to seven-point difference approximations
Usage:
python diff_order_noise.py
Output: to display, diff_order_noise.csv,
and graph
What you learn: random
functions in random module
Level ***: Richardson
extrapolation differentiation:
Program:
download diff_richardson.py
(Source
code)
Algorisms / Python modules:
Richardson extrapolation
Usage:
python diff_richardson.py
Output: to display.
What you learn: for ~
break
python programs: Numerical integration
Level **: Effect
of different approximations on numerical integration:
It compares the integration errors for different
approximations
Program:
download integ_order.py
(Source
code)
Algorisms / Python modules:
Rieman sum, trapezoid method, Simpson method, Bode method
Usage:
python integ_order.py
Output: to display and integ_order.csv
What you learn:
Level ***: Numerical
integration by Gauss-Legendre formula:
Program:
download integ_gauss_legendre.py
(Source
code)
Algorisms / Python modules:
Gauss-Legendre formula
Usage:
python integ_gauss_legendre.py
Output: to display.
What you learn:
Level ***: Numerical
integration by Romberg formula:
Download integ_romberg.py
and run 'python integ_romberg.py'.
Output: to
display.
What you learn:
Level ****: Numerical
integration by variable conversion type formula: I.M.T. formula:
Download integ_imt.py
and integ_gauss_legendre.py
and run 'python integ_imt.py'.
Output: to
display.
What you learn:
use users' module (integ_gauss_legendre.py)
Level ****: Numerical
integration by variable conversion type formula: Double
Exponential function formula:
Download integ_doubleexp.py
and run 'python integ_doubleexp.py'.
Output: to
display.
What you learn:
Level **: Effect of different h and
approximations on numerical integration
It compares the integration errors for Rieman,
trapezoid, Simpson, and Bode methods with different h
Program:
download integ_order_h.py
(Source
code)
Algorisms / Python modules:
numerical integration (Rieman sum, trapezoid formula, Simpson formula,
Bode formula)
Usage: python
integ_order_h.py xmin xmax nhscan func_type
func_type: [lorentz|gauss|exp]
nhscan: Number of division for the integration range is 2^nhscan
(default: 18)
Ex: python
integ_order_h.py 0 1 18 gauss
Check accuracy is improved in order of Rieman sum, trapezoid, Simpson
and Bode formula for usual cases
python integ_order_h.py -1 1 18 gauss
Check Rieman sum is equal to trapezoid formula for symmetric integration
python integ_order_h.py -5 5 12 gauss
Check Rieman/trapezoid formula are better than the Simpson and Bode
forumula
Output: to display and
graph
Visualization:
implemented in the python script
What you learn:
Level **: Calculate Debye function
Plot Debye function with given Debye temperature
and temprature range
Program:
download debye_function.py
(Source code)
Show usage: python
debye_function.py
Usage: python
debye_function.py Debye_T Tmin Tmax Tstep
Ex.: python
debye_funciton.py 300 0 500 10
Debye temperature 300K, temperature range 0 - 500 K, 10 K step
Level **: Calculate electron density in
metal based on the free electron model
It calculate the electron density in metal using
the density of states function N(E) and the Fermi-Dirac distribution
function f(E) by integrating N(E)f(e). Different integration functions
in scipy, integrate.quad() and integrate.romberg() are compared.
Program:
download N-integration-metal.py
(Source code)
Algorisms / Python modules:
Numerical integration (adaptive integration scipy.integrate.quad(),
Romberg integration scipy.integrate.romberg())
Usage: python
N-integration-metal.py T EF
Ex.: python
N-integration-metal.py
300 5.0
At 300K,
EF = 5.0 eV, integrate with the specified relative accuration of 10-8
for integrate.quad() function. Compare the execution time for 300 cycles
integrations.
Integration range (1): E = 0 ~ EF
+ 6kBT
Integration range (2): E = 0 ~ EF
- 6kBT
Integration range (3): E = EF -
6kBT ~ EF + 6kBT
Integration range (1) = Integration range (1)
+ Integration range (2)
Simpson formula:
Download diffeq_simpson.py
and run 'python diffeq_simpson.py'.
Output: to
display.
What you learn:
Three-stage third-order Runge-Kutta
formula:
Download diffeq_rungekutta.py
and run 'python diffeq_rungekutta.py'.
Output: to
display.
What you learn:
Four-stage fourth-order Runge-Kutta
formula:
Download diffeq_rungekutta4.py
and run 'python diffeq_rungekutta4.py'.
Output: to
display.
What you learn:
python programs: Solve a second-order differential equation
Euler formula:
Download diffeq2nd_euler.py
and run 'python diffeq2nd_euler.py'.
Output: to
display and diffeq2nd_euler.csv.
Visualization:
download plotcsv1.py
and run 'python plotcsv1.py diffeq2nd_euler.csv'.
What you learn:
Heun formula:
Download diffeq2nd_heun.py
and run 'python diffeq2nd_heun.py'.
Output: to
display and diffeq2nd_heun.csv.
Visualization:
download plotcsv1.py
and run 'python plotcsv1.py diffeq2nd_heun.csv'.
What you learn:
Verlet formula:
Download diffeq2nd_verlet.py
and run 'python diffeq2nd_verlet.py'.
Output: to
display and diffeq2nd_verlet.csv.
Visualization:
download plotcsv1.py
and run 'python plotcsv1.py diffeq2nd_verlet.csv'.
What you learn:
python programs: Solve simultaneous second-order differential
equations (連立2次微分方程式)
Euler formula:
Download diffeq2nd_2d_euler.py
and run 'python diffeq2nd_2d_euler.py'.
Output: to
display and diffeq2nd_2d_euler.csv.
Visualization:
download plotcsv1.py
and run 'python plotcsv1.py diffeq2nd_2d_euler.csv'.
What you learn:
function that returns two values
Verlet formula:
Download diffeq2nd_2d_verlet.py
and run 'python diffeq2nd_2d_verlet.py'.
Output: to
display and diffeq2nd_2d_verlet.csv.
Visualization:
download plotcsv1.py
and run 'python plotcsv1.py diffeq2nd_2d_verlet.csv'.
What you learn:
Level ******: Planet simulator:
Simulate motions of the planets in the solar system by the Euler
or the Verlet formula
Program:
download diffeq2nd_planet.py
(Source
code)
Input file(s): Planets
database planet_db.csv
Algorisms / Python
modules: Euler formula and Heun formula
Usage: python
diffeq2nd_planet.py solver dt nt fplot
solver: 'Euler' or 'Verlet'
dt: time step in day
nt: number of steps
fplot: flag to plot graph (1: default) or not to plot (0)
Ex: python
diffeq2nd_planet.py Euler 0.5 5000 1
Output: to
display, diffeq2nd_planet_euler.csv
and diffeq2nd_planet_euler_conservation.csv,
and graph
Visualization:
integrated
What you learn: realtime
update of graph using matplotlib, min(), max(), sys.arg to change the solver
python programs: Smoothing, Convolution
Level ***: Simple
moving average and polynomial fit method:
Program:
download smoothing.py
(Source
code)
Input file(s):
xrd.csv
Usage:
python smoothing.py
Output: to display,
smoothing-*.csv, and graph
Visualization:
integrated.
Or download plotcsv1.py
and run, e.g., 'python plotcsv1.py smoothing-simple-3.csv'.
Level ***: Convolution with Gauss function:
Program:
convolution.py
(Source
code)
Input file(s):
dos.csv
Usage: python
convolution.py
Output: to
display, convolution.csv,
and graph
Visualization:
integrated.
Or download plotcsv1.py
and run, e.g., 'python plotcsv1.py convolution.csv'.
What you learn:
Level *****: Convolution/Deconvolution with
Gauss function:
Deconvolution by scipy.signal.deconvolve(), fft,
the Jacobi method, and the Gauss-Seidel method.
Program:
deconvolution.py
(Source
code)
Input file(s):
pes.csv
Show usage: python
deconvolution.py
Output: to display and
graph
Visualization:
integrated
What you learn:
scipy.signal.convolve() and scipy.signal.deconvolve().
Deconvolution using FFT and
iFFT.
More details:
Show usage:
python deconvolution.py
usage for
convolve() and fft:
python deconvolution.py file mode convmode
smoothmode xmin xmax Wa Grange kzero klin
mode = [convolve|fft]
convmode = ['|full|same], effective only for mode = 'convolve'
smoothmode = combination of [convolve|extend|average]
ex.: python
deconvolution.py SnSe-DOS.csv convolve same convolve+extend -4.5 2.0
0.12 2.0 1 5
Deconvolute using scipy.signal.deconvolve() after extending the raw data
with zeros and linear filter.
The x range is from -4.5 to 2.0.
Gaussian filter has the width of 12 and the 2.0 times of the width will
be used.
Note that the filter elements should have somewhat large values e.g.
> 0.01 for scipy.signal.deconvolve()
ex.: python
deconvolution.py SnSe-DOS.csv fft full convolve+extend -4.5 2.0 0.12 2.0
5 5
Deconvolute using fft-based deconvoluation after extending the raw data
with zeros and linear filter.
The x range is from -4.5 to 2.0.
Gaussian filter has the width of 12 and the 2.0 times of the width will
be used.
usage for
the Jacobi/Gauss-Seidel mehods:
python deconvolution.py file mode xmin xmax Wa dump nmaxiter eps nsmooth
zeroc
mode = [gs|jacobi]
gs=Gauss-Seidel method jacobi=Jacobi method
zeroc = [0|1] zero correction after a Jacobi/Gauss-Seidel cycle
ex.: python
deconvolution.py pes.csv gs -6.0 2.0 0.12 1.0 300 1.0e-4 15 0
python programs: linear LSQ
Level ***: Least-squares fitting for
polynomial:
Fit n-th order polynomial to scattered data by
linear LSQ.
Program:
download lsq-polynomial.py
(Source
code)
Algorisms / Python modules:
Linear LSQ for polynomial
Usage: python
lsq-polynomial.py norder
Ex: python
lsq-polynomial.py 3
Fit to y = c0
+ c1x + c2x2
+ c3x3
Output: to display, lsq-polynomial.csv,
and graph
Visualization:
integrated
What you learn: numpy.linalg.inv
to get inverse matrix and solve simultaneous linear equations
Level ***: Least-squares fitting for general
functions:
Fit sin + cos function to scattered data by
linear LSQ.
Program:
download lsq-general.py
(Source
code)
Algorisms / Python modules:
Linear LSQ for sin / cos functions
Usage: python
lsq-general.py nfunc
Ex: python
lsq-geneal.py 3
Fit to y = c0
+ c1sin(x) + c2cos(x)
Output: to display, lsq-general.csv,
and graph
Visualization:
implemented in the python script
What you learn: numpy.linalg.inv
to get inverse matrix and solve simultaneous linear equation
python programs: Solution of equation
Level **: Self-consistent method:
An example to solve a simple equation, x =
0.5(-x3 + x2 - 2) by self-consistent manner.
Program:
download equation-selfconsistent.py
(Source
code)
Usage: python
equation-selfconsistent.py
Output: to display.
Visualization:
What you learn:
Level **: Self-consistent method:
Solve the I-V characteristic of a series circuit
of a diode and a resister by self-consistent manner.
Program:
download equation-selfconsistent-diode.py
Usage: python
equation-selfconsistent-diode.py Vmin Vmax Vstep kmix
Output: to display and
graph
Visualization:
integrated
What you learn:
Level ***: Newton-Raphson method:
Program:
download
equation-newton-raphson.py (Source
code)
Usage: python equation-newton-raphson.py
x0 dump tsleep
Output: to display and
graph
Visualization:
What you learn:
Bisection method:
Solve the Fermi level of semiconductor by
bisection method.
Download equation-bisection.py,
and run 'python equation-bisection.py'.
Output: to
display.
Visualization:
What you learn:
Brent's method:
Solve the Fermi level of semiconductor by
Brent's method.
Download equation-brant.py,
and run 'python equation-brent.py'.
Output: to
display.
Visualization:
What you learn:
Level ***: Calculation of EF for
semiconductor by bisection method
Program:
download EF-bisection.py
(Source code)
Algorisms / Python modules:
Bisection method
Usage: python
EF-bisection.py
Output: to
display.
Visualization:
What you learn:
Level ***:
金属のEFの温度依存性
Program:
download EF-T-metal.py
(Source code)
説明: 金属のフェルミエネルギーの温度依存性を数値積分とNewton法を使って求める。
初期値として 0 K の EF から始め、温度を上げながら、前回温度の
EF(T) を次の初期値として使うことで、
Newton法でも安定して計算できる。
使用しているアルゴリズム: 数値積分
(多項式適合法 scipy.integrate.quad())
方程式の数値解法
(Newton法 scipy.optmize.newton())
実行方法: python EF-T-metal.py
Level ****: 半導体の統計物性の温度依存性
Program:
download EF-T-semiconductor.py
(Source
code)
説明: 半導体のフェルミエネルギー、自由電子濃度、自由正孔濃度、イオン化アクセプター濃度、
イオン化ドナー濃度の温度依存性を二分法を使って求める。非縮退近似を用い、
ドナー・アクセプター準位の縮重は考慮していない。
Newton法では EF
の初期値がかなり真値に近くないと発散するので、
価電子帯上端と伝導帯下端エネルギーを初期として二分法を使う。
使用しているアルゴリズム:
方程式の数値解法 (二分法 main()関数中に組み込み)
Usage: python EF-T-semiconductor.py
EA NA ED ND Ec Nv Nc
実行例: python
EF-T-semiconductor.py 0.05 1.0e15 0.95 1.0e16 1.0 1.2e19 2.1e18
Ec = 1.0 eV (=
バンドギャップ)、EA = 0.05 eV, NA
= 1015 cm-3, ED = 0.95 eV, ND
= 1016 cm-3
Nc = 1.2x1019 cm-3,
Nv = 2.1x1018 cm-3
(バンドギャップを1.12 eVとすれば、ほぼ Si の物性値)
Level *****: Solve multi-values equation:
Calculate energy band diagram and wave functions by Kronig-Penney model
説明: Kronig-Penneyモデルによる一次元バンド構造と波動関数
Program: Download kronig_penney.py
( Source code)
使用しているアルゴリズム: Find multiple
solutions by direct search and secant method
Usage: python kronig_penney.py
Usage1: python kronig_penney.py (graph a bwidth bpot k
Emin Emax nE)
Usage2: python kronig_penney.py (band a bwidth bpot nG
kmin kmax nk)
Usage3: python kronig_penney.py (wf a bwidth bpot kw
iLevel xwmin xwmax nxw)
実行例1: python kronig_penney.py graph 5.4064 0.5
10.0 0.0 0.0 9.5 51
格子定数 5.4064 Å、ポテンシャル幅 0.5 Å、高さ
10.0 eVで、k = 0.0 についてのKronig-Penney方程式の
残差 Δ を E = 0.0 ~ 9.5 eV
の範囲を51分割してプロット。Δ = 0
のEが固有エネルギー。
実行例2: python kronig_penney.py band 5.4064 0.5
10.0 -0.5 0.5 21
格子定数 5.4064 Å、ポテンシャル幅 0.5 Å、高さ
10.0 eVで、k = [-0.5,0.5] の範囲を
21分割してバンド構造をプロットする。
実行例3: python kronig_penney.py wf 5.4064 0.5 10.0
0.0 0 0.0 16.2192 101
格子定数 5.4064 Å、ポテンシャル幅 0.5 Å、高さ
10.0 eVで、k = 0.0 における下から 0 番目の
準位の波動関数をプロットする。波動関数は x =
0.0 ~ 16.2192 Å を 101 分割してプロットする。
Two parameters Newton-Raphson method
with graphical visualization of convergence process:
Minimize a target function with two parameters
by Newton-Raphson method.
Download optimize-newton-raphson2d.py,
and run, e.g., 'python optimize-newton-raphson2d.py', and 'python
optimize-newton-raphson2d.py -4.0 -4.0'.
Output: to
display and graph.
Usage:
python optimize-newton-raphson2d.py xini yini
Visualization:
implemented in the python script
What you learn:
Two parameters Steepest Descent
method with graphical visualization of convergence process:
Download optimize-steepdescent2d.py,
and run, e.g., 'python optimize-steepdescent2d.py' and 'python
optimize-steepdescent2d.py -4.0 -4.0'.
Output: to
display and graph.
Usage:
python optimize-steepdescent2d.py xini yini
Visualization:
implemented in the python script
What you learn:
Two parameters Steepest Descent &
Conjugate Gradient methods + Line Search methods
with graphical visualization of convergence process:
Minimize a target function with two parameters
by the SD method and several line search methods.
Download optimize-sd-cg2d-linesearch.py,
and run, e.g.,
'python
optimize-sd-cg2d-linesearch.py'
'python
optimize-sd-cg2d-linesearch.py -4.0 -4.0'
'python
optimize-sd-cg2d-linesearch.py 2 2 sd one ellipsoid'
'python
optimize-sd-cg2d-linesearch.py 2 2 cg golden ellipsoid'
Output: to
display and graph.
Usage:
python optimize-sd-cg2d-linesearch.py xini yini algorism lsmode functype
algorism: optional, [sd|cg], default = 'sd'
lsmode: optional, [one|simple|exact|golden|armijo], default = 'simple'
functype: optional, '' or 'ellipsoid', default = ''
Visualization:
implemented in the python script
What you learn:
Two parameters Marquart mehod to solve a
LSQ problem:
Download lsq-marquart2d.py,
and run 'python optimize-marquart2d.py'
Output: to
display.
Visualization:
What you learn:
python programs: Nonlinear optimization using scipy.optimize
Optimization using the
scipy.optimization module.
Download peakfit-scipy-minimize.py
and tklib.py, and run
'python peakfit-scipy-minimize.py'.
Output: to
display and csv files, initial.csv, final.csv, and convergence.csv
Visualization:
implemented in the python script
What you learn:
scipy.optimize, matplotlib, csv
結晶構造関係プログラム
資料: Crystal.pdf
* レベル★★ 結晶構造・ベクトル解析基本ライブライブラリィ tkcrystalbase.py (プログラムコード)
説明:
他のpythonプログラムからimportして使用する。
* レベル★★ 単位格子・逆格子描画
crystal_draw_cell.py
(プログラムコード・実行結果)
実行方法: python
crystal_draw_cell.py
* レベル★★ 単位格子変換・描画
crystal_convert_cell.py
(プログラムコード・実行結果)
実行方法: python
crystal_convert_cell.py crystal_name conversion_mode kRatom
実行例: python
crystal_convert_cell.py FCC FCCPrim
* レベル★★ 原子間距離
crystal_distance.py
(プログラムコード)
実行方法: python
crystal_distance.py
* レベル★★ Bragg角度
crystal_XRD.py
(プログラムコード)
実行方法: python
crystal_XRD.py
* レベル★★★ Madelung
potentialの計算 crystal_MP_Ewald.py
( プログラムコード)
実行方法: python
crystal_MP_Ewald.py