Dies ist mein erstes Mal in diesem Web, also ich hoffe, ich werde es richtig machen.Python Parametrisierung
Ich mache eine Wärmediffusionssimulation für einen Zylinder. Da die Wärmequelle außerhalb des Zylinders liegt, hat diese keine Zylindersymmetrie. Daher entschied ich mich, ein X-Y-Gitter zu erstellen und es einem Cyilinder zu nähern. Manche Dinge wie folgt aus:
Dies ist meine erste und einfachste Versuch:
from numpy import empty,zeros,max
import matplotlib.pyplot as plt
# Constants
M = 10 # Grid squares on a side
V = 100.0 # Voltage at top wall
target = 1e-4 # Target accuracy
# Create arrays to hold potential values
phi = zeros([M+1,M+1],float)
phi[0,:] = V
phi[M,:]=V
phi[:,0]=V
phi[:,M]=V
phiprime = empty([M+1,M+1],float)
# Main loop
delta = 1.0
while delta>target:
# Calculate new values of the potential
for i in range(M+1):
for j in range(M+1):
if i==0 or i==M or j==0 or j==M:
phiprime[i,j] = phi[i,j]
elif i==1 or i==M-1:
if j==1 or j==2 or j==M-2 or j==M-1:
phiprime[i,j]=V-V/2
else:
phiprime[i,j] = (phi[i+1,j] + phi[i-1,j] \
+ phi[i,j+1] + phi[i,j-1])/4
elif i==2 or i==M-2:
if j==1 or j==M-1:
phiprime[i,j]=V-V/2
else:
phiprime[i,j] = (phi[i+1,j] + phi[i-1,j] \
+ phi[i,j+1] + phi[i,j-1])/4
else:
phiprime[i,j] = (phi[i+1,j] + phi[i-1,j] \
+ phi[i,j+1] + phi[i,j-1])/4
delta = max(abs(phi - phiprime))
phi, phiprime = phiprime, phi
plt.imshow(phiprime)
plt.gray()
plt.show()
Das war recht einfach, aber das ist keine gute Näherung für einen Zylinder, muss ich mach es größer. Wie Sie sehen können, kann ich bei diesem Versuch die "Positionen" von Hand codieren, aber wenn ich es 100x100 oder 1000x1000 mache, ist es unmöglich.
Meine Frage ist also: Gibt es eine gute Parametrisierung für dieses "eingerückte Quadrat" (die schwarzen)?
Dank