in meinen Programm ignoriert Python einfach die zweite Variable die ausgegeben werden sollte. Die np.size ist bei u_gs und u_jacobi 100. Warum wird der Iterationszähler i nicht ausgegeben?
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d
def jacobi(u,itmax):
[Nx,Ny] = np.shape(u)
u2 = np.zeros([Nx,Ny]);u2[:,0]=u[:,0];u2[:,Ny-1]=u[:,Ny-1];u2[0,:]=u[0,:];u2[Nx-1,:]=u[Nx-1,:]
i=0
while i<itmax:
#calc u2=u(k+1)
for j in range(1,Nx-1):
for l in range(1,Ny-1):
u2[j,l] = 0.25* (u[j+1,l]+u[j-1,l]+u[j,l-1]+u[j,l+1])
#print(u2)
if np.allclose(u,u2,atol=1e-2):
return(u2)
i+=1
u=u2
print("convergence criterion not met after %i iterations" %i)
return u2
def gs(u,itmax):
[Nx,Ny] = np.shape(u)
u2 = np.zeros([Nx,Ny]);u2[:,0]=u[:,0];u2[:,Ny-1]=u[:,Ny-1];u2[0,:]=u[0,:];u2[Nx-1,:]=u[Nx-1,:]
i=0
while i<itmax:
#calc u2=u(k+1)
for j in range(1,Nx-1):
for l in range(1,Ny-1):
u2[j,l] = 0.25* (u[j+1,l]+u2[j-1,l]+u2[j,l-1]+u[j,l+1])
#print(u2)
if np.allclose(u,u2,atol=1e-2):
return(u2)
i+=1
u=u2
print("convergence criterion not met after %i iterations" %i)
return i,u2
def
#initialisation and boundary conditions
itmax = 1000
Nx=10
Ny=10
x=np.linspace(-1,1,num=Nx,endpoint=True)
y=np.linspace(-1,1,num=Ny,endpoint=True)
u=np.zeros([Nx,Ny]) ; u_exact = np.zeros([Nx,Ny])# ; u_jacobi=np.zeros([Nx,Ny])
u[:,0]=x**2-1 ; u[:,Ny-1]=x**2-1 ; u[0,:]=1-y**2 ; u[Nx-1,:]=1-y**2
#calc exact solution
for j in range(Nx):
u_exact[j,:] = x[j]**2 - y**2
#calc numeric solutions
u_jacobi = jacobi(u,itmax)
u_gs = gs(u,itmax)
print(np.size(gs(u,itmax)))