コード例 #1
0
def TimeFunctions(func,
                  consts,
                  initial=None,
                  min=0,
                  max=30,
                  count=100,
                  variance=1,
                  iterations=10,
                  precision=0.01,
                  repeats=10):
    # Time for Gauss-Newton method
    gntime = 0
    # Time for Newton method
    ntime = 0
    for i in range(repeats):
        (xs, ys) = GetRandomData(func, consts, min, max, count, variance)
        start = time.clock()
        GaussNewton.Run(func, xs, ys, initial, iterations, precision)
        gntime += time.clock() - start
        start = time.clock()
        Newton.Run(func, xs, ys, initial, iterations, precision)
        ntime += time.clock() - start

        # Windows only
        os.system('cls')
        print(str(i) + " done")

    print("Gauss-Newton took: " + str(gntime))
    print("Newton took: " + str(ntime))
コード例 #2
0
def RunAndPlot(func,
               xs,
               ys,
               initial=None,
               iterations=10,
               precision=0.01,
               method='GN'):
    if method is 'GN' or method is '*':
        (result, CoD) = GaussNewton.Run(func, xs, ys, initial, iterations,
                                        precision)
    elif method is 'N':
        (result, CoD) = Newton.Run(func, xs, ys, initial, iterations,
                                   precision)

    try:
        print("Constants = " + str(result))
        print("CoD = " + str(CoD))
        PlotData(func, result, xs, ys)
    except:
        input("No results found. Press Enter to continue")

    # If method is '*', repeat with Newton
    if method is '*':
        (r, c) = RunAndPlot(func,
                            xs,
                            ys,
                            initial,
                            iterations,
                            precision,
                            method='N')
        return [(result, CoD), (r, c)]
    else:
        return (result, CoD)