julia> struct Point
x
y
end
julia> p = Point(0.0, 2.0)
Point(0.0, 2.0)
julia> p.x
0.0
julia> p.y
2.0
julia> p.x = 1.0
ERROR: setfield!: immutable struct of type Point cannot be changed
Stacktrace:
[1] setproperty!(x::Point, f::Symbol, v::Float64)
@ Base .\Base.jl:43
[2] top-level scope
@ REPL[14]:1
a, b は積分を行う範囲です。c 以降は追加の範囲 (b~c, c~d, …) です。関数 f の変化の激しい区間は幅を狭めることでより正確な値を得ることができます。
残りは省略可能ですが、rtol は相対誤差の許容値、atol は絶対誤差の許容値です。
maxevals は f の評価最大値です。
order は積分公式の最大次数です。
norm が指定されると E <= max(atol, rtol*norm(I)) を満たします。ただし、E は最大誤差です。
この関数の戻り値は積分値 I と最大誤差 E のペア (タプル) になります。
使用例
julia> using QuadGK
julia> f(x) = 1
f (generic function with 1 method)
julia> quadgk(f, 0, 1)
(1.0, 0.0)
julia> f(x) = x
f (generic function with 1 method)
julia> quadgk(f, 0, 1)
(0.5, 0.0)
julia> f(x) = x^2
f (generic function with 1 method)
julia> quadgk(f, 0, 1)
(0.3333333333333333, 5.551115123125783e-17)
楕円積分の例
QuadGK を使って特殊関数である楕円積分のグラフを描いてみます。
# 楕円積分
using QuadGK
using Plots
println("Start ..")
xs = Float64[]
ys = Float64[]
for m = range(-5, 0.9, step=0.01)
f(x) = 1 / sqrt(1 - m*sin(x)^2)
I, E = quadgk(f, 0, pi/2)
append!(xs, m)
append!(ys, I)
end
plot(xs, ys, show=true, framestyle=:origin, w=2)
print("> ")
read(stdin, Char)
module Matrixes
using LinearAlgebra
# ゼロ行列
function ゼロ行列(行数, 列数)
return zeros(行数, 列数)
end
# 単位行列
function 単位行列(行列数)
E = zeros(行列数, 行列数) + I(行列数)
return E
end
# 同一値行列
function 同一値行列(値, 行数, 列数)
サイズ = (行数, 列数)
fill(値, サイズ)
end
# 浮動小数点乱数行列
function 乱数行列(行数, 列数; 倍率=1.0)
R = rand(行数, 列数)
if 倍率 != 1.0
R = 倍率 * R
end
return R
end
# 整数乱数行列
function 整数乱数行列(範囲, 行数, 列数)
rand(範囲, 行数, 列数)
end
# 対角行列
function 対角行列(ベクトル)
diagm(ベクトル)
end
# 回転(2次元)
function 回転行列2(角度; ラジアン=true)
theta = 角度
if ! ラジアン
theta = 角度 / 180.0 * π
end
return [cos(theta) -sin(theta); sin(theta) cos(theta)]
end
# 回転(3次元)
function 回転行列3(角度; 回転軸='x', ラジアン=true)
theta = 角度
if ! ラジアン
theta = 角度 / 180.0 * π
end
if 回転軸 == 'x'
return [1.0 0.0 0.0; 0.0 cos(theta) -sin(theta); 0.0 sin(theta) cos(theta) ]
elseif 回転軸 == 'y'
return [cos(theta) 0.0 sin(theta); 0.0 1.0 0.0; -sin(theta) 0.0 cos(theta)]
elseif 回転軸 == 'z'
return [cos(theta) -sin(theta) 0.0; sin(theta) cos[theta] 0.0; 0.0 0.0 1.0]
else
throw("回転軸指定エラー")
end
end
# 拡大・縮小・反転(2次元)= 2次元の対角行列
function 拡大縮小2(対角成分)
A = zeros(2, 2)
A[1, 1] = 対角成分[1]
A[2, 2] = 対角成分[2]
return A
end
# 拡大・縮小・反転(3次元)= 3次元の対角行列
function 拡大縮小3(対角成分)
A = zeros(3, 3)
A[1, 1] = 対角成分[1]
A[2, 2] = 対角成分[2]
A[3, 3] = 対角成分[3]
return A
end
# 平行移動(2次元)
function 平行移動2(移動成分)
A = zeros(2, 3)
A[1, 3] = 移動成分[1]
A[2, 3] = 移動成分[2]
return A
end
# 平行移動(3次元)
function 平行移動3(移動成分)
A = zeros(3, 4)
A[1, 4] = 移動成分[1]
A[2, 4] = 移動成分[2]
A[3, 4] = 移動成分[3]
return A
end
# 行列式
function 行列式(正方行列)
det(正方行列)
end
# 階数(ランク)
function 階数(正方行列)
rank(正方行列)
end
function ランク(正方行列)
rank(正方行列)
end
# トレース
function トレース(正方行列)
tr(正方行列)
end
# 固有値
function 固有値(正方行列)
f = eigen(正方行列)
f.values # ベクトルの一要素が固有値
end
# 転置行列
function 転置行列(正方行列)
Transpose(正方行列)
end
# 対称行列
function 対称行列(正方行列; 下側=false)
if 下側
Symmetric(正方行列, :L)
else
Symmetric(正方行列)
end
end
# 直交行列 : 回転行列や置換行列は直交行列の一種
# 交代行列 (歪対称行列、Alternative Matrix)
function 交代行列(正方行列)
A = 正方行列
n = size(A)[1]
for i = 1:n
for j = 1:n
if i > j
A[i, j] = -A[j, i]
elseif i == j
A[i, i] = 0.0
else
# A[i, j] = A[i, j]
end
end
end
return A
end
# 置換行列
function 置換行列(次元)
A = zeros(次元, 次元)
for i = 1:次元
j = 次元 - i + 1
A[i, j] = 1.0
end
return A
end
# 逆行列
function 逆行列(正方行列)
inv(正方行列)
end
# 余因子行列 2x2 (Adjugate Matrix)
function 余因子行列2(正方行列)
A = 正方行列
return [A[2, 2] -A[1, 2]; -A[2, 1] A[1, 2]]
end
# 余因子行列 3x3 (Adjugate Matrix)
function 余因子行列3(正方行列)
A = 正方行列
d11 = det(小行列(A, 1, 1))
d12 = det(小行列(A, 1, 2))
d13 = det(小行列(A, 1, 3))
d21 = det(小行列(A, 2, 1))
d22 = det(小行列(A, 2, 2))
d23 = det(小行列(A, 2, 3))
d31 = det(小行列(A, 3, 1))
d32 = det(小行列(A, 3, 2))
d33 = det(小行列(A, 3, 3))
B = [d11 (-d12) d13; (-d21) d22 (-d23); d31 (-d32) d33]
return B
end
# 小行列
function 小行列(正方行列, 行, 列)
n = size(正方行列)[1]
A = Matrix{Float64}(undef, n - 1, n - 1)
is = 0; js = 0
for i = 1:n
if i == 行
is += 0
else
is += 1
end
for j = 1:n
if j == 列
js += 0
else
js += 1
if i != 行
#@show is, js, i, j
A[is, js] = 正方行列[i, j]
end
end
end
js = 0
end
return A
end
# 上三角行列
function 上三角行列(正方行列)
LinearAlgebra.triu(正方行列)
end
# 下三角行列
function 下三角行列(正方行列)
LinearAlgebra.tril(正方行列)
end
# エルミート行列
function エルミート行列(複素正方行列)
LinearAlgebra.Hermitian(複素正方行列)
end
# 随伴行列: 複素行列を転置し、複素共役を取った行列 (A*)
function 随伴行列(複素正方行列)
A = LinearAlgebra.Transpose(複素正方行列)
return conj(A)
end
# ユニタリー行列
function ユニタリー行列(複素正方行列)
end
end # end Matrixes
using HTTP
using JSON
r = HTTP.get("http://httpbin.org/ip")
if r.status == 200
data = JSON.parse(String(r.body))
println(data["origin"])
else
println("エラー: ", r.status)
end
次の handle(window, event) do arg … が「作成」ボタンのイベントハンドラです。
handle(w, "button1Click") do arg
@async begin
@show arg
matrix = generateMatrix(arg)
js(w, Blink.JSString("""document.getElementById('result').innerText = '$matrix';"""))
end
end