Julia演習問題:最大値・最小値の検出

はじめに

MATLABのpeaksっぽいfunctionを作成しておく.

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次元データを作成できる人はそれでも可.

問題

  1. 上記のpeaksをpeaks.jlというファイルに保存して,functionをincludeしなさい.
    julia> include("peaks.jl")
  2. function peaks()に適当な値を入力し,出力値を確認しなさい.引数の型に注意すること.
    julia> X,Y,Z = peaks() # 以下 julia>は省略
  3. Zの最大値と最小値,及びそれらのインデックス(行番号,列番号)を求めて図に示しなさい.
    findmin(Z)
    findmax(Z)
    #以下はPlotsパッケージの使用を前提としたヒント
    using Plots
    Plots.pyplot() # or gr(), plotlyjs() など
    Plots.surface(x,y,Z) # 3D
    Plots.scatter!(xx,yy,maxval) # !マークは上書き等の破壊的なコマンドを表す

解答例(参考

contour_2d.png surface_3d.png


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-07-11 (Wed) 05:25:48 (2276d)