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)