Пређи на садржај

Датотека:Nelder-Mead Simionescu.gif

Садржај странице није подржан на другим језицима
Ово је датотека са Викимедијине оставе
С Википедије, слободне енциклопедије

Оригинална датотека(1.000 × 1.000 пиксела, величина датотеке: 1,31 MB, MIME тип: image/gif, петља, 25 кадрова, 13 с)

Опис измене

Опис
English: Animated Nelder-Mead minimum search of Simionescu's function.
Датум
Извор Сопствено дело
Аутор nicoguaro
GIF genesis
InfoField
 
This plot was created with Matplotlib.
Изворни код
InfoField

Python code

from numpy import cos, arctan2
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

plt.rcParams["font.size"] = 10
plt.rcParams["mathtext.fontset"] = "cm"

# Minimization
def nelder_mead_step(fun, verts, alpha=1, gamma=2, rho=0.5,
                     sigma=0.5, beta=1.0):
    """Nelder-Mead iteration according to Wikipedia _[1]
    
    
    References
    ----------
     .. [1] Wikipedia contributors. "Nelder–Mead method." Wikipedia,
         The Free Encyclopedia. Wikipedia, The Free Encyclopedia,
         1 Sep. 2016. Web. 20 Sep. 2016. 
    """
    nverts, _ = verts.shape
    f = np.apply_along_axis(fun, 1, verts, beta=beta)
    # 1. Order
    order = np.argsort(f)
    verts = verts[order, :]
    f = f[order]
    # 2. Calculate xo, the centroid"
    xo = verts[:-1, :].mean(axis=0)
    # 3. Reflection
    xr = xo + alpha*(xo - verts[-1, :])
    fr = fun(xr, beta)
    if f[0]<=fr and fr<f[-2]:
        new_verts = np.vstack((verts[:-1, :], xr))
    # 4. Expansion
    elif fr<f[0]:
        xe = xo + gamma*(xr - xo)
        fe = fun(xe, beta)
        if fe < fr:
            new_verts = np.vstack((verts[:-1, :], xe))
        else:
            new_verts = np.vstack((verts[:-1, :], xe))
    # 5. Contraction
    else:
        xc = xo + rho*(verts[-1, :] - xo)
        fc = fun(xc, beta)
        if fc < f[-1]:
            new_verts = np.vstack((verts[:-1, :], xc))
    # 6. Shrink
        else:
            new_verts = np.zeros_like(verts)
            new_verts[0, :] = verts[0, :]
            for k in range(1, nverts):
                new_verts[k, :] = sigma*(verts[k,:] - verts[0,:])
 
    return new_verts

def fun(x, beta=1.0):
    """Simionescu function using log-barrier method"""
    x1, x2 = x
    if x1**2 + x2**2 < (1 + 0.2*cos(8*arctan2(x1, x2)))**2:
        barrier = -beta*np.log((1 + 0.2*cos(8*arctan2(x1, x2)))**2 - x1**2 - x2**2)
    else:
        barrier = np.inf
    return x1*x2 + barrier

# Animation

def data_gen(num):
    plt.gca().cla
    x0 = np.array([0.4, -0.6])
    x1 = np.array([-0.3, -0.6])
    x2 = np.array([0.7, 0.6])
    verts = np.vstack((x0, x1, x2))
    beta = 1.0
    for cont in range(num):
        verts = nelder_mead_step(fun, verts, beta=beta)
        beta /=2
    # Plots
    plt.cla()
    poly = plt.Polygon(verts, facecolor="none", edgecolor="k",
                       linewidth=0.5, zorder=4)
    plt.gca().add_patch(poly)
    x1, x2 = np.mgrid[-1.25:1.25:101j, -1.25:1.25:101j]
    z = x1*x2
    cons = x1**2 + x2**2 - (1 + 0.2*cos(8*arctan2(x1, x2)))**2
    z[cons > 0.02] = np.nan
    levels = np.linspace(-1, 1, 30)
    plt.contour(x1, x2, z, levels, cmap="seismic", linewidths=1)
    plt.contour(x1, x2, cons, [0], colors="black", linewidths=1)
    plt.axis("image")
    plt.xlabel(r"$x$", fontsize=14)
    plt.ylabel(r"$y$", fontsize=14)

fig = plt.figure(figsize=(5, 5))
ani = animation.FuncAnimation(fig, data_gen, range(25))
ani.save("Nelder-Mead_Simionescu.gif", writer='imagemagick', fps=2,
         dpi=200)
plt.show()

Лиценцирање

Ја, носилац ауторског права над овим делом, објављујем исто под следећом лиценцом:
w:sr:Creative Commons
ауторство делити под истим условима
Дозвољено је:
  • да делите – да умножавате, расподељујете и преносите дело
  • да прерађујете – да прерадите дело
Под следећим условима:
  • ауторство – Морате да дате одговарајуће заслуге, обезбедите везу ка лиценци и назначите да ли су измене направљене. Можете то урадити на било који разуман манир, али не на начин који предлаже да лиценцатор одобрава вас или ваше коришћење.
  • делити под истим условима – Ако измените, преобразите или доградите овај материјал, морате поделити своје доприносе под истом или компатибилном лиценцом као оригинал.

Натписи

Укратко шта ова датотека представља/приказује

Ставке приказане у овој датотеци

приказује

Нека вредност без ставке на Википодаци

26. јун 2018

Историја датотеке

Кликните на датум/време да бисте видели тадашњу верзију датотеке.

Датум/времеМинијатураДимензијеКорисникКоментар
тренутна21:47, 26. јун 2018.Минијатура за верзију на дан 21:47, 26. јун 2018.1.000 × 1.000 (1,31 MB)NicoguaroImprove line widths
19:36, 22. новембар 2016.Минијатура за верзију на дан 19:36, 22. новембар 2016.750 × 698 (30 kB)PasimiUser created page with UploadWizard

Следећа страница користи ову датотеку:

Глобална употреба датотеке

Други викији који користе ову датотеку: