def dihotomiaMethodGetTable(f, epsilon, a, b):
    data = {
        'a': [],
        'b': [],
        'Отношение длин': [],
        'x1': [],
        'x2': [],
        'f(x1)': [],
        'f(x2)': []
    }
    delta = epsilon / 4
    x1 = (a + b) / 2 - delta
    x2 = (a + b) / 2 + delta
    f1 = f(x1)
    f2 = f(x2)
    prev_length = None
    u.writeRow(data, a, b, prev_length, x1, x2, f1, f2)
    count = 0
    while True:
        count += 1
        prev_length = abs(b - a)
        if f1 < f2:
            b = x2
        else:
            a = x1
        x1 = (a + b) / 2 - delta
        x2 = (a + b) / 2 + delta
        f1 = f(x1)
        f2 = f(x2)
        u.writeRow(data, a, b, prev_length, x1, x2, f1, f2)
        if abs(b - a) < epsilon:
            break
    return (count, pd.DataFrame(data))
def dihotomiaMethod(f, epsilon, a, b):
    delta = epsilon / 4
    x1 = (a + b) / 2 - delta
    x2 = (a + b) / 2 + delta
    f1 = f(x1)
    f2 = f(x2)
    while True:
        if f1 < f2:
            b = x2
        else:
            a = x1
        x1 = (a + b) / 2 - delta
        x2 = (a + b) / 2 + delta
        f1 = f(x1)
        f2 = f(x2)
        if abs(b - a) < epsilon:
            break
    return (a + b) / 2
def fibonacciMethod(f, n, a, b):
    x1 = a + (b - a) * fibonacci(n - 2) / fibonacci(n)
    x2 = a + (b - a) * fibonacci(n - 1) / fibonacci(n)
    f1 = f(x1)
    f2 = f(x2)
    while True:
        n -= 1
        if f1 > f2:
            a = x1
            x1 = x2
            x2 = b - (x1 - a)
            f1 = f2
            f2 = f(x2)
        else:
            b = x2
            x2 = x1
            x1 = a + (b - x2)
            f2 = f1
            f1 = f(x1)
        if n == 1:
            return (x1 + x2) / 2
Exemplo n.º 4
0
def goldenRatioMethodGetTable(f, epsilon, a, b):
    data = {
        'a': [],
        'b': [],
        'Отношение длин': [],
        'x1': [],
        'x2': [],
        'f(x1)': [],
        'f(x2)': []
    }
    F = (1 + math.sqrt(5)) / 2
    x1 = b - (b - a) / F
    x2 = a + (b - a) / F
    f1 = f(x1)
    f2 = f(x2)
    prev_length = None
    count = 0
    u.writeRow(data, a, b, prev_length, x1, x2, f1, f2)
    while True:
        count += 1
        prev_length = abs(b - a)
        if f1 < f2:
            b = x2
            x2 = x1
            f2 = f1
            x1 = b - (b - a) / F
            f1 = f(x1)
        else:
            a = x1
            x1 = x2
            f1 = f2
            x2 = a + (b - a) / F
            f2 = f(x2)
        u.writeRow(data, a, b, prev_length, x1, x2, f1, f2)
        if abs(b - a) < epsilon:
            break

    return (count, pd.DataFrame(data))
Exemplo n.º 5
0
def goldenRatioMethod(f, epsilon, a, b):
    F = (1 + math.sqrt(5)) / 2
    x1 = b - (b - a) / F
    x2 = a + (b - a) / F
    f1 = f(x1)
    f2 = f(x2)
    while True:
        if f1 < f2:
            b = x2
            x2 = x1
            f2 = f1
            x1 = b - (b - a) / F
            f1 = f(x1)
        else:
            a = x1
            x1 = x2
            f1 = f2
            x2 = a + (b - a) / F
            f2 = f(x2)
        if abs(b - a) < epsilon:
            break

    return 0.5 * (a + b)
def fibonacciMethodGetTable(f, n, a, b):
    data = {
        'a': [],
        'b': [],
        'Отношение длин': [],
        'x1': [],
        'x2': [],
        'f(x1)': [],
        'f(x2)': []
    }
    x1 = a + (b - a) * fibonacci(n - 2) / fibonacci(n)
    x2 = a + (b - a) * fibonacci(n - 1) / fibonacci(n)
    f1 = f(x1)
    f2 = f(x2)
    prev_length = None
    count = 0
    u.writeRow(data, a, b, prev_length, x1, x2, f1, f2)
    while True:
        count += 1
        prev_length = abs(b - a)
        n -= 1
        if f1 > f2:
            a = x1
            x1 = x2
            x2 = b - (x1 - a)
            f1 = f2
            f2 = f(x2)
        else:
            b = x2
            x2 = x1
            x1 = a + (b - x2)
            f2 = f1
            f1 = f(x1)
        u.writeRow(data, a, b, prev_length, x1, x2, f1, f2)
        if n == 1:
            break
    return (count, pd.DataFrame(data))
Exemplo n.º 7
0
def brandtMethod(f, epsilon, a, c):
    K = (3 - math.sqrt(5)) / 2
    x = (a + c) / 2
    w = (a + c) / 2
    v = (a + c) / 2
    fx = f(x)
    fw = f(w)
    fv = f(v)
    d = e = c - a
    u = None
    count = 0
    while True:
        count += 1
        prev_u = u
        g = e
        e = d
        if x != w and x != v and w != v and fx != fw and fx != fv and fw != fv:
            #u = w - (((w - x) ** 2) * (fw - fv) - ((w - v) ** 2) * (fw - fx)) / 2 / (
            #    (w - x) * (w - v) - (w - v) * (w - x))
            u = calculateX_hat(x, w, v, fx, fw, fv)
            if a + epsilon <= u and u <= c - epsilon and abs(u - x) < g / 2:
                d = abs(u - x)
            else:
                u = None
        if u is None:
            if x < (c + a) / 2:
                u = x + K * (c - x)
                d = c - x
            else:
                u = x - K * (x - a)
                d = x - a
        if abs(u - x) < epsilon:
            u = x + sign(u - x) * epsilon
        fu = f(u)
        if fu <= fx:
            if u >= x:
                a = x
            else:
                c = x
            v = w
            w = x
            x = u
            fv = fw
            fw = fx
            fx = fu
        else:
            if u >= x:
                c = u
            else:
                a = u
            if fu <= fw or w == x:
                v = w
                w = u
                fv = fw
                fw = fu
            elif fu <= fv or v == x or v == w:
                v = u
                fv = fu
        if count != 1:
            if abs(prev_u - u) < epsilon:
                break
    return (a + c) / 2