#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);