Загрузка данных


import numpy as np
import sympy as sp
import matplotlib.pyplot as plt

sp.init_printing(use_unicode=True)

xs,xs0,ys,ys0 = sp.symbols('xs xs0 ys ys0', real=True)

Phi=(1/(2*sp.pi))*sp.log((sp.sqrt((xs-xs0)**2 + (ys+ys0)**2))/(sp.sqrt((xs-xs0)**2 + (ys-ys0)**2)))

#sp.pprint(Phi)

dphi_dx=sp.diff(Phi,xs)
dphi_dy=sp.diff(Phi,ys)

prx=sp.simplify(dphi_dx)
pry=sp.simplify(dphi_dy)

#print('---------------------------------------------')
#sp.pprint(prx)
#print('---------------------------------------------')
#sp.pprint(pry)

#okr
R=1.0
x0L,y0L=0,1.5
nL=16
lam=0.5

theta = np.linspace(2*np.pi,0,nL+1,endpoint=True)

xL = np.array([x0L + R * np.cos(theta), y0L + R * np.sin(theta)])

xxL = np.array([
    0.5 * (xL[0,:nL] + xL[0,1:]),
    0.5 * (xL[1,:nL] + xL[1,1:])
])

print('dsadasdasdasd',np.shape(xL),np.shape(xxL))

plt.figure(figsize=(7,7))
plt.plot(xL[0],xL[1],'b-',linewidth=1.5)
plt.plot(xL[0],xL[1],'g*',markersize=8)
plt.plot(xxL[0],xxL[1],'rx',markersize=6)
plt.gca().set_aspect('equal',adjustable='box')
plt.grid(True,linestyle='--',alpha=0.5)
plt.legend()
plt.show()

#endokr

def Normal(x):
    n=x[0].shape[0]-1
    return np.array([-x[1,1:]+x[1,:n],x[0,1:]-x[0,:n]])

myEPS=1e-12

def withoutZero(sFunct):
    def wrapped(sExpress,M,minDist=myEPS):
        gd=np.sum([(M[i,1]-M[i,0])**2 for i in range(2)],axis=0)>minDist**2
        AA=M[0,0].copy()
        AA[np.logical_not(gd)]+=1
        result = np.zeros_like(M[0,0])
        result[gd] = sFunct(
            sExpress,
            np.array([[AA,M[0,1]],[M[1,0],M[1,1]]]),
            minDist)[gd]
        return result

    wrapped.orig = sFunct
    return wrapped

[club190240393|@withoutZero]
def sF(sExpress,M,minDist=myEPS):
    return sp.lambdify(
        (xs0,xs,ys0,ys),
        sExpress,
        modules='numpy'
    )(M[0,0],M[0,1],M[1,0],M[1,1])
N = Normal(xL)
L = np.sqrt(N[0]**2 + N[1]**2)
Normal_unit = np.array([
    N[0] / L,
    N[1] / L
])
# Координаты точки-источника
xS = np.full(nL,0)
yS = np.full(nL,1.5)
# M:
# M[0,0] - xs0
# M[0,1] - xs
# M[1,0] - ys0
# M[1,1] - ys
#M = np.array([
 #   [xS, xxL[0]],
  #  [yS, xxL[1]]
#], dtype=float)
#print("M shape:", M.shape)
#print("M dtype:", M.dtype)
# Производные Phi
#Phi_x = sF(prx, M)
#Phi_y = sF(pry, M)
#print("Phi_x =", Phi_x)
#print("Phi_y =", Phi_y)
#K = 2*lam*(Phi_x * Normal_unit[0] + Phi_y * Normal_unit[1])
#print("K =", K)
#4 матр мешгрид
#беру сред знач
#матрица Xm Ym Xk Yk
#делаем одну пару матриц а затем другую
Xm,Xk=np.meshgrid(xxL[0],xxL[1])
Ym,Yk=np.meshgrid(xxL[1],xxL[1])
print(Xm.shape)
print(Xk.shape)
print(Ym.shape)
print(Yk.shape)
M = np.array([
    [Xk, Xm],
    [Yk, Ym]
], dtype=float)
Phi_x=sF(prx,M)
Phi_y=sF(pry,M)
K = 2*lam*(Phi_x * Normal_unit[0][:,None] + Phi_y * Normal_unit[1][:,None])
print('Mshape',M.shape)
print('Kshape',K.shape)
print('Phi_xshape',Phi_x.shape)
print('Phi_yshape',Phi_y.shape)
print('K',K)