%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.rc('figure',figsize=(14,9))
from IPython.html.widgets import interactive
from IPython.display import display
T=1.0
eps=0.01
N=1000
J=100
x=np.linspace(-1.0,1.0,J+1)
A=2*np.eye(J-1)
for i in range(J-2):
A[i,i+1]=-1
A[i+1,i]=-1
dx=2.0/J
dt=T/N
ll=dt/(dx*dx)
print(dx,dt,ll)
b=np.matrix(np.zeros((J-1,1)))
b[0,0]=ll
b[J-2,0]=ll
def schExp(eps,ll,J,N,A,b):
v=np.matrix(np.zeros((J-1,1)))
u=np.matrix(np.zeros((J-1,1)))
for n in range(1,N):
v=u-eps*ll*(A*u)+eps*b
u=v
return u
u=schExp(eps,ll,J,N,A,b)
x=np.linspace(-1.0,1.0,J+1)
w=np.zeros(J+1)
w[0]=1.0
w[J]=1.0
for i in range(1,J):
w[i]=-np.log(u[i-1])
plt.plot(x,w)
def schImp(eps,ll,J,N,A,b):
v=np.matrix(np.zeros((J-1,1)))
u=np.matrix(np.zeros((J-1,1)))
M=np.eye(J-1)+eps*ll*A
for n in range(1,N):
v=np.linalg.solve(M,u+eps*b)
u=v
return u
u=schImp(eps,ll,J,N,A,b)
x=np.linspace(-1.0,1.0,J+1)
w=np.zeros(J+1)
w[0]=1.0
w[J]=1.0
for i in range(1,J):
w[i]=-np.log(abs(u[i-1]))
plt.plot(x,w)