#author("2018-08-28T18:57:47+09:00","default:Miyashita","Miyashita")
#author("2018-09-14T00:46:42+09:00","default:Miyashita","Miyashita")
*Julia演習問題:最大値・最小値の検出 [#ncb1725a]
**はじめに [#fd6502b4]
MATLABのpeaksっぽいfunctionを作成しておく.
#codeprettify(lang-julia){{
function peaks(N=49::Int)
    function formula(x::T, y::T) where T<:Float64
        z = 3(1-x)^2*exp(-(x^2)-(y+1)^2)-10(x/5 - x^3 - y^5)*exp(-x^2-y^2)-(1/3)exp(-(x+1)^2-y^2)
    end
    vec = collect(Float64, linspace(-3.,3.,N))
    x = repmat(vec',N,1)
    y = repmat(vec,1,N)
    z = formula.(x,y)
    return (x,y,z)
end
}}
Himmelblau's functionとか,自前でデモ用の2次元データを作成できる人はそれでも可.
**問題 [#e28859af]
+上記のpeaksをpeaks.jlというファイルに保存して,functionをincludeしなさい.
#codeprettify(lang-julia){{
julia> include("peaks.jl")
}}
+function peaks()に適当な値を入力し,出力値を確認しなさい.引数の型に注意すること.
#codeprettify(lang-julia){{
julia> X,Y,Z = peaks() # 以下 julia>は省略
}}
+Zの最大値と最小値,及びそれらのインデックス(行番号,列番号)を求めて図に示しなさい.~
#codeprettify(lang-julia){{
findmin(Z)
findmax(Z)
}}
#codeprettify(lang-julia){{
#以下はPlotsパッケージの使用を前提としたヒント
import Plots
using Plots
Plots.pyplot() # or gr(), plotlyjs() など
Plots.surface(x,y,Z) # 3D
Plots.scatter!(xx,yy,maxval) # !マークは上書き等の破壊的なコマンドを表す
}}
***解答例(参考 [#y7dbc450]
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/julia/contour_2d.png,500x375);
&ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/julia/surface_3d.png,500x375);

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes