In [2]:
using BasisMatrices

In [3]:
using Plots

In [4]:
plotlyjs()


Plotly javascript loaded.

To load again call

init_notebook(true)

Out[4]:
Plots.PlotlyJSBackend()

In [36]:
a = 0
b = 1
n = 10


Out[36]:
10

In [37]:
basis = Basis(ChebParams(n, a, b))


Out[37]:
1 dimensional Basis on the hypercube formed by [0.0] × [1.0].
Basis families are BasisMatrices.Cheb

In [46]:
xgrid = collect(linspace(a, b, 101))
ys = []
m = 9
for i in 1:m
    c = zeros(n)
    c[i] = 1
    y = funeval(c, basis, xgrid)
    push!(ys, y)
end
ylims = (-1.1, 1.1)
plot(xgrid, ys, layout=m, ylims=ylims, leg=false)


Out[46]:

In [42]:
agrid0 = linspace(a, b, 9)


Out[42]:
9-element LinSpace{Float64}:
 0.0,0.125,0.25,0.375,0.5,0.625,0.75,0.875,1.0

In [43]:
l_basis = Basis(SplineParams(agrid0, 0, 1))


Out[43]:
1 dimensional Basis on the hypercube formed by [0.0] × [1.0].
Basis families are BasisMatrices.Spline

In [48]:
xgrid = collect(linspace(a, b, 101))
ys_l = []
m = 9
for i in 1:m
    c = zeros(m)
    c[i] = 1
    y = funeval(c, l_basis, xgrid)
    push!(ys_l, y)
end
ylims = (-0.1, 1.1)
plot(xgrid, ys_l, layout=m, ylims=ylims, leg=false)


Out[48]:

In [49]:
agrid1 = linspace(a, b, 7)


Out[49]:
7-element LinSpace{Float64}:
 0.0,0.166667,0.333333,0.5,0.666667,0.833333,1.0

In [60]:
c_basis = Basis(SplineParams(agrid1, 0, 3))


Out[60]:
1 dimensional Basis on the hypercube formed by [0.0] × [1.0].
Basis families are BasisMatrices.Spline

In [61]:
xgrid = collect(linspace(a, b, 101))
ys_c = []
m = 9
for i in 1:m
    c = zeros(m)
    c[i] = 1
    y = funeval(c, c_basis, xgrid)
    push!(ys_c, y)
end
ylims = (-0.1, 1.1)
plot(xgrid, ys_c, layout=m, ylims=ylims, leg=false)


Out[61]:

In [71]:
f1(x) = exp(-x)
f2(x) = 1./(1 + 25x.^2)
f3(x) = sqrt(abs(x))


Out[71]:
f3 (generic function with 1 method)
WARNING: Method definition f1(Any) in module Main at In[62]:1 overwritten at In[71]:1.

In [86]:
a = -5
b = 5
x = collect(linspace(a, b, 101))
errors = Array(Float64, (3,3,3))


Out[86]:
3×3×3 Array{Float64,3}:
[:, :, 1] =
 1.11746e-314  1.11746e-314  1.11751e-314
 1.11746e-314  1.11751e-314  1.11751e-314
 1.11746e-314  1.11751e-314  1.11751e-314

[:, :, 2] =
 1.11746e-314  1.11746e-314  1.11746e-314
 1.11746e-314  1.11746e-314  1.11746e-314
 1.11746e-314  1.11746e-314  1.11746e-314

[:, :, 3] =
 1.11746e-314  1.11746e-314  1.11746e-314
 1.11746e-314  1.11746e-314  1.11746e-314
 1.11746e-314  1.11746e-314  1.11746e-314

In [87]:
m = 3
for (j,n) in enumerate([10, 20, 30])
    basis = Basis(ChebParams(n, a, b))
    S, (xgrid,) = nodes(basis)
    Φ = BasisMatrix(basis, Expanded(), S, 0)
    for (i,f) in enumerate([f1, f2, f3])
        y = f(S)
        c = Φ.vals[1] \ y;
        interp = funeval(c, basis, x);
        errors[i, j, m] = maxabs(interp - f(x))
    end
end

In [88]:
errors[:,:,3]


Out[88]:
3×3 Array{Float64,2}:
 0.0141203  1.27073e-10  9.9476e-14
 0.925045   0.747806     0.552433  
 0.756759   0.533332     0.435196  

In [91]:
m = 1
for (j,n) in enumerate([10, 20, 30])
    k = 1
    basis = Basis(SplineParams(n - (k-1), a, b, k))
    S, (xgrid,) = nodes(basis)
    Φ = BasisMatrix(basis, Expanded(), S, 0)
    for (i,f) in enumerate([f1, f2, f3])
        y = f(S)
        c = Φ.vals[1] \ y;
        interp = funeval(c, basis, x);
        errors[i, j, m] = maxabs(interp - f(x))
    end
end
m = 2
for (j,n) in enumerate([10, 20, 30])
    k = 3
    basis = Basis(SplineParams(n - (k-1), a, b, k))
    S, (xgrid,) = nodes(basis)
    Φ = BasisMatrix(basis, Expanded(), S, 0)
    for (i,f) in enumerate([f1, f2, f3])
        y = f(S)
        c = Φ.vals[1] \ y;
        interp = funeval(c, basis, x);
        errors[i, j, m] = maxabs(interp - f(x))
    end
end

In [92]:
errors


Out[92]:
3×3×3 Array{Float64,3}:
[:, :, 1] =
 13.5956    3.84761   1.79697 
  0.885269  0.633874  0.42633 
  0.745356  0.512989  0.415227

[:, :, 2] =
 0.357181  0.0230457  0.0046076
 0.914668  0.631624   0.379954 
 0.739583  0.474655   0.376635 

[:, :, 3] =
 0.0141203  1.27073e-10  9.9476e-14
 0.925045   0.747806     0.552433  
 0.756759   0.533332     0.435196  

In [93]:
n = 7
f = f1
a = -1
b = 1
x = collect(linspace(a, b, 101))
ys = [f(x)]

basis = Basis(ChebParams(n, a, b))
S, (xgrid,) = nodes(basis)
Φ = BasisMatrix(basis, Expanded(), S, 0)
y = f(S)
c = Φ.vals[1] \ y;
interp = funeval(c, basis, x);
push!(ys, interp)


Out[93]:
2-element Array{Array{Float64,1},1}:
 [2.71828,2.66446,2.6117,2.55998,2.50929,2.4596,2.4109,2.36316,2.31637,2.2705  …  0.440432,0.431711,0.423162,0.414783,0.40657,0.398519,0.390628,0.382893,0.375311,0.367879]
 [2.71828,2.66446,2.6117,2.55998,2.50929,2.45961,2.4109,2.36316,2.31637,2.2705  …  0.44043,0.431709,0.42316,0.41478,0.406567,0.398516,0.390626,0.382892,0.375312,0.367882] 

In [94]:
for k in [3,1]
    basis = Basis(SplineParams(n - (k-1), a, b, k))
    S, (xgrid,) = nodes(basis)
    Φ = BasisMatrix(basis, Expanded(), S, 0)
    y = f(S)
    c = Φ.vals[1] \ y;
    interp = funeval(c, basis, x);
    push!(ys, interp)
end

In [96]:
ylims = [0,3]
plot(x, ys, layout=4, ylims=ylims, leg=false)


Out[96]:

In [98]:
f = f2
ys = [f(x)]

basis = Basis(ChebParams(n, a, b))
S, (xgrid,) = nodes(basis)
Φ = BasisMatrix(basis, Expanded(), S, 0)
y = f(S)
c = Φ.vals[1] \ y;
interp = funeval(c, basis, x);
push!(ys, interp)
for k in [3,1]
    basis = Basis(SplineParams(n - (k-1), a, b, k))
    S, (xgrid,) = nodes(basis)
    Φ = BasisMatrix(basis, Expanded(), S, 0)
    y = f(S)
    c = Φ.vals[1] \ y;
    interp = funeval(c, basis, x);
    push!(ys, interp)
end
ylims = [-0.2,1.2]
plot(x, ys, layout=4, ylims=ylims, leg=false)


Out[98]:

In [99]:
f = f3
ys = [f(x)]

basis = Basis(ChebParams(n, a, b))
S, (xgrid,) = nodes(basis)
Φ = BasisMatrix(basis, Expanded(), S, 0)
y = f(S)
c = Φ.vals[1] \ y;
interp = funeval(c, basis, x);
push!(ys, interp)
for k in [3,1]
    basis = Basis(SplineParams(n - (k-1), a, b, k))
    S, (xgrid,) = nodes(basis)
    Φ = BasisMatrix(basis, Expanded(), S, 0)
    y = f(S)
    c = Φ.vals[1] \ y;
    interp = funeval(c, basis, x);
    push!(ys, interp)
end
ylims = [-0.2,1.2]
plot(x, ys, layout=4, ylims=ylims, leg=false)


Out[99]:

In [121]:
f4(x, alpha) = exp(-alpha.*x)
alpha = 1
x = collect(linspace(a, b, 1001))
n =10
a = -1
b = 1
basis = Basis(ChebParams(n, a, b))
S, (xgrid,) = nodes(basis)
Φ = BasisMatrix(basis, Expanded(), S, 0)
y = f4(S, alpha)
c = Φ.vals[1] \ y;
interp = funeval(c, basis, x);
errors = f4(x, alpha) - interp
ylims = (-1.2e-9, 1.2e-9)
yticks = [-1, -0.5, 0.0, 0.5, 1.0]*1e-9
plot(x, errors,ylims=ylims, yticks=yticks)


WARNING: Method definition f4
Out[121]:
(Any, Any) in module Main at In[120]:1 overwritten at In[121]:1.

In [ ]: