In [2]:
using BasisMatrices
In [3]:
using Plots
In [4]:
plotlyjs()
Out[4]:
In [36]:
a = 0
b = 1
n = 10
Out[36]:
In [37]:
basis = Basis(ChebParams(n, a, b))
Out[37]:
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]:
In [43]:
l_basis = Basis(SplineParams(agrid0, 0, 1))
Out[43]:
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]:
In [60]:
c_basis = Basis(SplineParams(agrid1, 0, 3))
Out[60]:
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]:
In [86]:
a = -5
b = 5
x = collect(linspace(a, b, 101))
errors = Array(Float64, (3,3,3))
Out[86]:
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]:
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]:
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]:
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)
Out[121]:
In [ ]: