def matrix_el(elem): res = matrix_2.Matrix(m = 3, n = 3) k3 = [elem_plane(elem, x) for x in elem] beta = [ a[1] for a in k3] gama = [ a[2] for a in k3] res.M = [[(beta[m]*beta[n] + gama[m]*gama[n]) for n in [0,1,2]] for m in [0,1,2]] border = [ x for x in dekart_product(elem,elem) if x in lim_points] mat = matrix_2.Matrix(m = 3, n = 3) if border: edge = border[0] print("border") p1 = points[edge[0]] p2 = points[edge[1]] tmp_k = alpha/3 * dist(p1, p2) mat.M = [[1.0, 0.0, 0.5], [0.0, 0.0, 0.0], [0.5, 0.0, 1.0]] G = mat * tmp_k f_bord = phi(*median(p1, p2)) * 1/2*dist(p1, p2) else: print("area", elem) mat.M = [[0.0]*3] * 3 G = mat f_bord = 0 vec = matrix_2.Matrix(m = 3, n = 1) center = median(points[elem[0]],points[elem[1]],points[elem[2]]) f_start = func_start(*center) * square(elem) / 3 vec.M[0][0] = f_bord - f_start vec.M[1][0] = -f_start vec.M[2][0] = f_bord - f_start return (res + mat), vec
def matrix_el(elem, lim_points, points): print('matrix_el', elem) global alpha res = matrix_2.Matrix(m = 3, n = 3) values = [points[x] for x in elem] # print('values', values) k3 = [elem_plane(i, values) for i in range(len(values))] # print('k3 =', k3) beta = [ a[1] for a in k3] gama = [ a[2] for a in k3] # local matrix res.M = [[(beta[m]*beta[n] + gama[m]*gama[n]) for n in [0,1,2]] for m in [0,1,2]] el_square = square(values) res = res * el_square border = [ x for x in dekart_product(elem,elem) if x in lim_points] # print('border =', border) # print('dekart_product(elem,elem)', list(dekart_product(elem,elem))) # print(lim_points) if border: edge = border[0] # print("border") p1 = points[edge[0]] p2 = points[edge[1]] i = elem.index(edge[0]) k = elem.index(edge[1]) bord_dist = dist(p1, p2) bord_fun = 0.5 * bord_dist * phi(*median(p1, p2)) else: bord_dist = 0.0 bord_fun = 0.0 i = k = 0 mat = matrix_2.Matrix(m = 3, n = 3) mat.M = [[0.0] * 3 for i in range(3)] mat[i][i] = 1.0 mat[k][k] = 1.0 mat[i][k] = 0.5 mat[k][i] = 0.5 mat = mat * (alpha/3 * bord_dist) vec = matrix_2.Matrix(m = 3, n = 1) f_start = func_start(*median(*values)) * el_square / 3 print ('f_start =', bord_fun) vec.M[0][0] = -f_start vec.M[1][0] = -f_start vec.M[2][0] = -f_start vec.M[i][0] += bord_fun vec.M[k][0] += bord_fun return (res + mat), vec
def mke_solve(elems, lim_points, points): global alpha mat = matrix_2.Matrix(m = len(points), n = len(points)) mat = mat * 0 vec = matrix_2.Matrix(m = len(points), n = 1) vec = vec * 0 al = [0.0]*len(points) beta = [0.0]*len(points) gama = [0.0]*len(points) for num,el in enumerate(elems): print('matrix_el', el) values = [points[x] for x in el] el_square = square(values) f_start = func_start(*median(*values)) * el_square / 3 for i,e in enumerate(el): plane = elem_plane(i, values) # print(plane) al[e] = plane[0] beta[e] = plane[1] gama[e] = plane[2] # print('alph =', al) # print('beta =', beta) # print('gama =', gama) for p1, p2 in dekart_product(el,el): mat[p1][p2] += (beta[p1]*beta[p2] + gama[p1]*gama[p2]) * el_square border = [ x for x in dekart_product(el,el) if x in lim_points] print('border', border) if border: i,k = border[0] [j] = [x for x in el if x!=i and x!=k] bord_dist = dist(points[i], points[k]) bord_fun = 0.5 * bord_dist * phi(*median(points[i], points[k])) mat[i][i] += 1.0 * bord_dist * alpha/3 mat[k][k] += 1.0 * bord_dist * alpha/3 mat[i][k] += 0.5 * bord_dist * alpha/3 mat[k][i] += 0.5 * bord_dist * alpha/3 vec[i][0] += bord_fun vec[k][0] += bord_fun print ('f_start =', bord_fun) else: i,j,k = el bord_dist = 0.0 bord_fun = 0.0 vec[i][0] -= f_start vec[j][0] -= f_start vec[k][0] -= f_start return mat, vec