コード例 #1
0
    x = X[0]
    y = X[1]
    return g(*X)+\
           -y*(y-1.)*(y-3.)/30.*(np.sin(2.*x)-g(x,-2.*np.ones_like(y)))+\
           (y+2.)*(y-1.)*(y-3.)/6.*(5.*np.sqrt(np.abs(x))-g(x,np.zeros_like(y)))+\
           -y*(y+2.)*(y-3.)/6.*(9.*np.exp(-x**2)-g(x,np.ones_like(y)))+\
           y*(y+2.)*(y-1.)/30.*((1.-x)-g(x,3.*np.ones_like(y)))

# Create plot 1:
g = lambda *x: np.zeros_like(x[0])

lineKwargs = dict(mode='lines',showlegend=False,
             line=dict(width=5,color='black'))
zLift = 0.05

p = MakePlot('x','y',zlabs='u(x,y,g(x,y))')
p.Scatter3d(x=x,y=-2.*np.ones_like(y),z=np.sin(2.*x)+zLift,**lineKwargs)
p.Scatter3d(x=x,y=np.zeros_like(y),z=5.*np.sqrt(np.abs(x))+zLift,**lineKwargs)
p.Scatter3d(x=x,y=np.ones_like(y),z=9.*np.exp(-x**2)+zLift,**lineKwargs)
p.Scatter3d(x=x,y=3.*np.ones_like(y),z=(1.-x)+zLift,**lineKwargs)
p.Surface(x=X[0],y=X[1],z=u(g,*X),showscale=False)
p.view(-35.,25.)

# Create plot 2:
g = lambda x,y: x**2*y-np.sin(5.*x)*np.cos(4.*(y%1.5))
p1 = MakePlot('x','y',zlabs='u(x,y,g(x,y))')
p1.Scatter3d(x=x,y=-2.*np.ones_like(y),z=np.sin(2.*x)+zLift,**lineKwargs)
p1.Scatter3d(x=x,y=np.zeros_like(y),z=5.*np.sqrt(np.abs(x)),**lineKwargs)
p1.Scatter3d(x=x,y=np.ones_like(y),z=9.*np.exp(-x**2)+zLift,**lineKwargs)
p1.Scatter3d(x=x,y=3.*np.ones_like(y),z=(1.-x)+zLift,**lineKwargs)
p1.Surface(x=X[0],y=X[1],z=u(g,*X),showscale=False)
コード例 #2
0
ファイル: Example_B_5.py プロジェクト: leakec/tfc
matHyp = np.meshgrid(v,th)

phi = np.linspace(0.,np.pi,100)
matEll = np.meshgrid(phi,th)

xHyp = lambda n,v,th: aHyp*np.sinh(np.abs(v))*np.cos(th)+3.
yHyp = lambda n,v,th: bHyp*np.sinh(np.abs(v))*np.sin(th)
zHyp = lambda n,v,th: (-1.)**step(n)*cHyp*np.cosh(np.abs(v))

xEll = lambda phi,th: aEll*np.sin(phi)*np.cos(th)
yEll = lambda phi,th: bEll*np.sin(phi)*np.sin(th)
zEll = lambda phi,th: cEll*np.cos(phi)

opacity = 0.6

p = MakePlot('x','y',zlabs='z')
p.Surface(x=xHyp(1.,*matHyp),
          y=yHyp(1.,*matHyp),
          z=zHyp(1.,*matHyp),
          showscale=False,
          colorscale=[[0.,"rebeccapurple"],[1.,"rebeccapurple"]],
          opacity=opacity)
p.Surface(x=xHyp(-1.,*matHyp),
          y=yHyp(-1.,*matHyp),
          z=zHyp(-1.,*matHyp),
          showscale=False,
          colorscale=[[0.,"rebeccapurple"],[1.,"rebeccapurple"]],
          opacity=opacity)
p.Surface(x=xEll(*matEll),
          y=yEll(*matEll),
          z=zEll(*matEll),
コード例 #3
0
u = lambda x, y: u1(x, y) + (1. - 2. * y) / 2. * (u1(x, 2. * np.ones_like(y)) -
                                                  u1(x, np.ones_like(y)) - 2.)

v1 = lambda x, y: gv(x, y) + 5. - np.cos(np.pi * y) - gv(np.zeros_like(x), y)
v = lambda x, y: v1(x, y) + 5. - v1(x, np.zeros_like(y)) - u(
    x, np.zeros_like(y))

# Plot results
U = u(x, y).reshape((n, n))
V = v(x, y).reshape((n, n))

if usePlotly:
    from tfc.utils.PlotlyMakePlot import MakePlot

    p = [
        MakePlot(r"x", r"y", zlabs=r"u(x,y,g<sup>u</sup>(x,y))"),
        MakePlot(r"x",
                 r"y",
                 zlabs=r"v(x,y,g<sup>v</sup>(x,y),g<sup>u</sup>(x,y))")
    ]
    p[0].Surface(x=dark[0], y=dark[1], z=U, showscale=False)
    p[0].Scatter3d(x=np.zeros_like(x),
                   y=y,
                   z=np.cos(np.pi * y),
                   mode='lines',
                   line=dict(color='black', width=10))
    p[1].Surface(x=dark[0], y=dark[1], z=V, showscale=False)
    p[1].Scatter3d(x=np.zeros_like(x),
                   y=y,
                   z=5. - np.cos(np.pi * y),
                   mode='lines',
コード例 #4
0
import jax.numpy as np
from tfc.utils.PlotlyMakePlot import MakePlot

# Create X:
n = [40,40]
dark = np.linspace(-1.,1.,n[0])
xMat = np.meshgrid(dark,dark)
x = [k.flatten() for k in xMat]

# Create the constrained expression:
g = lambda *x: np.sin(3.*np.pi/4.*x[0])*np.sin(np.pi/2.*x[1])
u = lambda *x: g(*x)+5.-g(np.zeros_like(x[0]),np.zeros_like(x[1]))

# Plot:
p = MakePlot('x','y',zlabs='u(x,y,g(x,y))')
U = u(*x)
p.Surface(x=xMat[0],y=xMat[1],z=U.reshape(n),showscale=False)
p.Scatter3d(x=[0.],y=[0.],z=[5.],mode='markers',
            marker=dict(size=4),line=dict(color='red'))
p.view(-45,50)
p.show()
コード例 #5
0
ファイル: Figure_4_3.py プロジェクト: leakec/tfc
coons = np.zeros_like(x)
for j in range(x.shape[0]):
    for k in range(x.shape[1]):
        phix = PhiX(x[j, k])
        phiy = PhiX(y[j, k])
        coons[j, k] = np.linalg.multi_dot([phix, A(x[j, k], y[j, k]), phiy])
        ce[j, k] = g(x[j, k], y[j, k]) + np.linalg.multi_dot(
            [phix, M(x[j, k], y[j, k]), phiy])

# Create the plots
line = np.linspace(0., 1., 100)
zero = np.zeros_like(line)
one = np.ones_like(line)
width = 7

p1 = MakePlot('x', 'y', zlabs='u(x,y,g(x,y))')
p1.Surface(x=x, y=y, z=ce, showscale=False)
p1.Scatter3d(x=zero,
             y=line,
             z=np.sin(2. * np.pi * line),
             mode='lines',
             line=dict(color='red', width=width))
p1.Scatter3d(x=one,
             y=line,
             z=3. * np.cos(4. * np.pi * line),
             mode='lines',
             line=dict(color='red', width=width))
p1.Scatter3d(x=line,
             y=zero,
             z=3. * line**2,
             mode='lines',
コード例 #6
0
ファイル: Example_I_5.py プロジェクト: leakec/tfc
# Create X:
n = [50, 50]
xMat = np.meshgrid(np.linspace(-4., 4., 50), np.linspace(-4., 4., 50))
x = xMat[0].flatten() + 1.j * xMat[1].flatten()

# Create the constrained expression:
g = lambda x: 0.25 * x + np.cos(x / 4.) * 0.3j

uslow = lambda x: g(x)\
                  +((-44.+8.j)*x**2+(52.+36.j)*x+(132.-24.j))/125.*(1.+np.pi*1.j-g(0.5j*np.ones_like(x)))\
                  +((69.+67.j)/125.*x**2-(129.+397.j)/250.*x+(-82.+49.j)/125.)*(g(np.ones_like(x))-g(1.j*np.ones_like(x)))\
                  +((44.-8.j)*x**2-(52.+36.j)*x+(-7.+24.j))/125.*(2.j-g(np.ones_like(x)*(2.+1.j))-egrad(g)(np.ones_like(x)))
u = jit(uslow)

# Plot:
p = MakePlot('Re[x]', 'Im[x]', zlabs='Re[u(x,g(x))]')
p2 = MakePlot('Re[x]', 'Im[x]', zlabs='Im[u(x,g(x))]')

# Add constraints
p.Scatter3d(
    x=[0.],
    y=[1. / 2.],
    z=[1.],
    mode="markers",
    marker=dict(color="red", size=5),
)
p2.Scatter3d(
    x=[0.],
    y=[1. / 2.],
    z=[np.pi],
    mode="markers",
コード例 #7
0
nTest = 100
dark = np.meshgrid(np.linspace(x0[0], xf[0], nTest),
                   np.linspace(x0[1], xf[1], nTest))
xTest = (dark[0].flatten(), dark[1].flatten())
err = np.abs(real(*xTest) - u(xi, *xTest))

# Print out solution statistics
print("Time: " + str(time))
print("Max error test: " + str(np.max(err)))
print("Mean error test: " + str(np.mean(err)))

# Create plots
if usePlotly:
    from tfc.utils.PlotlyMakePlot import MakePlot

    p = MakePlot(r'x', r't', zlabs=r'u(x,t)')
    p.Surface(x=x[0].reshape((n, n)),
              y=x[1].reshape((n, n)),
              z=real(*x).reshape((n, n)),
              showscale=False)
    p.view(azimuth=-135, elevation=20)
    p.fig['layout']['scene']['aspectmode'] = 'cube'
    p.show()

    p1 = MakePlot('x', 'y', zlabs='error')
    p1.Surface(x=dark[0], y=dark[1], z=err.reshape((nTest, nTest)))
    p1.show()

else:
    from matplotlib import cm
    from tfc.utils import MakePlot
コード例 #8
0
dgn1 = lambda xi, *x: egrad(g, 1)(xi, *x) * n1[0] + egrad(g, 2)(xi, *x) * n1[1]
intgn2 = lambda t: -1. / 2. * np.cos(t)**2 * np.sqrt(2.)

u1 = lambda xi,*x: g(xi,*x)+\
                   n1mag*(Ainv(*x)[0]-1.)*(0.5-dgn1(xi,*A(np.zeros_like(x[0]),Ainv(*x)[1])))+\
                   1./n2mag*(-2.-intgn2(5.)+intgn2(4.))
uslow = lambda xi,*x: u1(xi,*x)+\
                  (1./2.-Ainv(*x)[1])*(u1(xi,*A(Ainv(*x)[0],np.ones_like(x[1])))-u1(xi,*A(Ainv(*x)[0],np.zeros_like(x[1]))))
u = jit(uslow)

# Plot:
x = A(*X)
xi = np.zeros(5)
xmat = [k.reshape(n) for k in x]

p = MakePlot('x', 'y', zlabs='u(x,y,g(x,y))')

# Add constraints
c3x = (np.linspace(2., 4., 100), np.linspace(3., 4., 100))
c3u = u(xi, *c3x)
p.Scatter3d(x=c3x[0],
            y=c3x[1],
            z=c3u,
            mode="lines",
            line=dict(color="red", width=5))
p.Scatter3d(x=c3x[0] + 1.,
            y=c3x[1] + 1.,
            z=c3u,
            mode="lines",
            line=dict(color="red", width=5))
コード例 #9
0
ファイル: WaveEquation2D.py プロジェクト: leakec/tfc
xTest = tuple([k.flatten() for k in dark])
err = np.abs(real(*xTest) - u(xi, *xTest))

# Print out solution statistics
print("Time: " + str(time))
print("Max error test: " + str(np.max(err)))
print("Mean error test: " + str(np.mean(err)))

# Create plots
n = 100
X, Y = np.meshgrid(np.linspace(0., 1., 100), np.linspace(0., 1., 100))

if usePlotly:
    from tfc.utils.PlotlyMakePlot import MakePlot

    p = MakePlot(r'x', r'y', zlabs=r'u(x,y,0.5)')
    p.Surface(x=X, y=Y, z=real(X, Y, 0.5 * np.ones_like(X)), showscale=False)
    p.view(azimuth=45, elevation=40)
    p.fig['layout']['scene']['aspectmode'] = 'cube'
    p.show()

else:
    from matplotlib import cm
    from tfc.utils import MakePlot

    p = MakePlot(r'$x$', r'$y$', zlabs=r'$u(x,y,0.5)$')
    p.ax[0].plot_surface(X,
                         Y,
                         real(X, Y, 0.5 * np.ones_like(X)),
                         cmap=cm.gist_rainbow,
                         antialiased=False,
コード例 #10
0
ファイル: Example_I_3.py プロジェクト: leakec/tfc
from tfc.utils.PlotlyMakePlot import MakePlot

# Create X:
n = [20, 20, 20]
dark = np.linspace(0., 1., n[0])
xMat = onp.mgrid[0:1:20j, 0:1:20j, 0:1:20j]
x = [k.flatten() for k in xMat]

# Create the constrained expression:
g = lambda *x: np.cos(x[0]) * np.sqrt(x[1]) + x[2]**2
u = lambda *x: g(*x)\
               +x[2]*(np.sin(x[0])*np.cos(x[1])-g(x[0],x[1],np.ones_like(x[2])))\
               +(1-x[2])*((1-x[0])*(np.exp(x[1])-g(np.zeros_like(x[0]),x[1],np.zeros_like(x[2])))\
               +x[0]*((1.-x[1])*(3.-g(np.ones_like(x[0]),np.zeros_like(x[1]),np.zeros_like(x[2])))\
               +x[1]*(5.-g(np.ones_like(x[0]),np.ones_like(x[1]),np.zeros_like(x[2])))))

# Plot:
p = MakePlot('x', 'y', zlabs='z')
U = u(*x)
p.Volume(x=x[0], y=x[1], z=x[2], value=U)
p.view(-45, 30)
p.show()

# Error in constraints
e1 = np.max(
    np.abs(np.sin(x[0]) * np.cos(x[1]) - u(x[0], x[1], np.ones_like(x[2]))))
e2 = np.max(
    np.abs(np.exp(dark) - u(np.zeros_like(dark), dark, np.zeros_like(dark))))
e3 = np.max(np.abs(3. - u(np.array([1.]), np.array([0.]), np.array([0.]))))
e4 = np.max(np.abs(5. - u(np.array([1.]), np.array([1.]), np.array([0.]))))
コード例 #11
0
du1dy = egrad(u1,1)
u = lambda x,y: u1(x,y)\
                -(y-y**2)*du1dy(x,np.zeros_like(y))\
                -y**2*(u1(x,np.ones_like(y))-u1(x,np.zeros_like(y)))

# Plot the results
U = u(x,y)

ind1 = np.where(x==0.)[0]
ind2 = np.where(y==0.)[0]
ind3 = np.where(y==1.)[0]

if usePlotly:
    from tfc.utils.PlotlyMakePlot import MakePlot

    p = MakePlot(r'x',r'y',zlabs=r'u(x,y,g(x,y))')
    p.Surface(x=dark[0], y=dark[1], z=U.reshape((n,n)),
              showscale=False)
    for k,el in enumerate(ind2):
        if not k%5:
            p.Scatter3d(x=np.array([x[el],]*2),
                        y=np.array([0.,0.05]),
                        z=np.array([u(x[el],0.),]*2),
                        mode='lines',
                        line=dict(color='black',width=5))
    p.Scatter3d(x=x[ind1],
                y=y[ind1],
                z=c1(y[ind1]),
                mode='lines',
                line=dict(color='blue',width=10))
    p.Scatter3d(x=x[ind2],
コード例 #12
0
# Calculate error at the test points:
dark = np.meshgrid(np.linspace(xInit, xFinal, nTest),
                   np.linspace(0., 1., nTest))
xTest = tuple([j.flatten() for j in dark])
err = np.abs(u(xi, *xTest) - real(*xTest))

print("Training time: " + str(time))
print("Max error: " + str(np.max(err)))
print("Mean error: " + str(np.mean(err)))

# Plot analytical solution
if usePlotly:
    from tfc.utils.PlotlyMakePlot import MakePlot

    p = MakePlot(r"x", r"t", zlabs=r"u(x,t)")
    p.Surface(x=xTest[0].reshape((nTest, nTest)),
              y=xTest[1].reshape((nTest, nTest)),
              z=real(*xTest).reshape((nTest, nTest)),
              showscale=False)
    p.PartScreen(9, 8)
    p.show()

else:
    from matplotlib import cm
    from MakePlot import MakePlot

    p = MakePlot(r"$x$", r"$t$", zlabs=r"$u(x,t)$")
    p.ax[0].plot_surface(xTest[0].reshape((nTest, nTest)),
                         xTest[1].reshape((nTest, nTest)),
                         real(*xTest).reshape((nTest, nTest)),
コード例 #13
0
ファイル: Problem_8.py プロジェクト: leakec/tfc
# Create the loss function:
ur = egrad(u, 1)
u2r = egrad(ur, 1)
u2th = egrad(egrad(u, 2), 2)
L = lambda xi: u2r(xi, *x) + 1. / x[0] * ur(xi, *x) + 1. / x[0]**2 * u2th(
    xi, *x)

# Solve the problem:
xi = np.zeros(H(*x).shape[1])
xi, it, time = NLLS(xi, L, timer=True)

# Print out statistics:
print("Solution time: {0} seconds".format(time))

# Plot the solution:
R, Th = np.meshgrid(np.linspace(r0, rf, 50), np.linspace(th0, thf, 200))
dark = (R.flatten(), Th.flatten())

X = R * np.cos(Th)
Y = R * np.sin(Th)
U = u(xi, *dark).reshape((200, 50))
p = MakePlot("x", "y", zlabs="u(x,y,g(x,y))")
p.Surface(x=X, y=Y, z=U, showscale=False)
p.show()

# Plot the error
err = np.abs(realSoln(R, Th) - U)
p = MakePlot("x", "y", zlabs="Error")
p.Surface(x=X, y=Y, z=err, showscale=False)
p.show()