Example #1
0
def main():
    logger.info('Start')

    isShowMatrix = False
    isSaveMatrix = False

    dim = 1
    if dim == 1:
        f = lambda x: x*x
        q = lambda x: (5-abs(x-5)*1)*2
        domains = [[0,10,1]]
        elements = [2]
    elif dim == 2:
        f = lambda x,y: x*x
        q = lambda x,y: 0
        domains = [[0,1,0.1],[0,1,0.1]]
        elements = [1,1]
    elif dim == 3:
        f = lambda x,y,z: (x*x+y*y)*z
        q = lambda x,y,z: ((x*x+y*y)*z)*np.random.rand(1)*0.01 + (100 if abs(x-2.5) < 1 and abs(y-2.5) < 1 else 0)
        domains = [[0,5,0.5],[0,5,0.5],[-1,1,0.2]]
        elements = [2,2,1]

    K = 10

    f = PointsFabric(dim, f, q, domains)
    clear, noise = f.generate()

    s = Spline('input.txt', elements, K)
    s.MakeMatrix()

    if isSaveMatrix:
        np.savetxt('data/before_solveA.txt', s.A, fmt='%1.2e')
        np.savetxt('data/before_solveF.txt', s.F, fmt='%1.2f')
    if isShowMatrix:
        plt.matshow(s.A)
    ans = s.Solve()

    i = 0
    for a in ans:
        try:
            if len(a) == s.nNodes * (2**dim):
                np.savetxt(f'data/answer_{i}.txt', a, fmt='%1.2f')
                i += 1
        except Exception:
            pass

    p = Painter('data/answer_0.txt', dim, True, s._Spline__psi, K, s.elements, s.mx, s.kElem, s.h, clearPoints=noise)

    testFunc = lambda x,y,z: x+z
    p.Paint(True)