# and iteratively compute the approximations with Riley's algorithms
# (as in (2) on slide 42 on https://drna.padovauniversitypress.it/system/files/papers/Fasshauer-2008-Lecture3.pdf)

# AUTHOR: NK, kraemer(at)ins.uni-bonn.de

import numpy as np
import sys
sys.path.insert(0, '../modules/')
from ptSetFcts import getPtsHalton
from kernelMtrcs import buildKernelMtrx, buildKernelMtrxCond
from kernelFcts import gaussKernel, tpsKernel, maternKernel, expKernel

import scipy.special
np.set_printoptions(precision=1)

dim = 2

numReps = 7


def matKernel(pt1, pt2):
    return maternKernel(pt1, pt2, 0.5)


print("\nGaussian:")
for i in range(numReps):
    numPts = 2**(i + 3)
    ptSet = getPtsHalton(numPts, dim)
    kernelMtrx = buildKernelMtrx(ptSet, ptSet, gaussKernel, 0.0)
    print("(", numPts, ",", np.abs(np.min(np.linalg.eigvals(kernelMtrx))), ")")
Example #2
0
from functools import partial

np.random.seed(15051994)
np.set_printoptions(precision = 1)
plt.rcParams.update({'font.size': 16})

print "\nHow many points shall we work with? (e.g. 10)"
print "\tnumPts = ?"
numPts = input("Enter: ")
print ""

ptSet = np.zeros((numPts, 1))
ptSet[:,0] = np.linspace(0,1,numPts)

kernelMtrx = buildKernelMtrx(ptSet, ptSet, gaussKernel)

invKernelMtrx = np.linalg.inv(kernelMtrx)

numEvalPts = 400
evalPtSet = np.zeros((numEvalPts, 1))
evalPtSet[:,0] = np.linspace(0,1,numEvalPts)

kernelMtrxLeft = buildKernelMtrx(evalPtSet, ptSet, gaussKernel)
lagFcts = kernelMtrxLeft.dot(invKernelMtrx)

lebConst = np.amax(lagFcts.sum(axis = 1))


randIdx = np.random.randint(numPts)
plt.plot(evalPtSet, lagFcts[0:numEvalPts,randIdx], linewidth = 3, label = "Lag. fct.", color = "darkslategray")
Example #3
0
print "\nWhich shift for Riley? (e.g. 0.001)"
print "\trileyShift = ?"
rileyShift = input("Enter: ")

print "\nWhich accuracy for Riley? (e.g. 1e-08)"
print "\trileyAcc = ?"
rileyAcc = input("Enter: ")

print "\nWhich maximal number of iterations? (e.g. 1000)"
print "\trileyNumMaxIt = ?"
rileyNumMaxIt = input("Enter: ")
print ""

ptSet = getPtsHalton(numPts, dim)

kernelMtrx = buildKernelMtrx(ptSet, ptSet, expKernel)
kernelMtrxShift = buildKernelMtrxShift(ptSet, ptSet, expKernel, rileyShift)

rhs = np.zeros(len(ptSet))
rhs[0] = 1

trueSol = np.linalg.solve(kernelMtrx, rhs)

startVec = np.linalg.solve(kernelMtrxShift, rhs)
currIt = np.zeros(numPts)
counter = 0
currentRelError = 1.0
relError = np.array(currentRelError)
while currentRelError >= rileyAcc and counter <= rileyNumMaxIt:
    counter = counter + 1
    residual = rhs - kernelMtrx.dot(currIt)
Example #4
0
print "\nHow many points shall we work with? (e.g. 10)"
print "\tnumPts = ?"
numPts = input("Enter: ")

print "\nWhich power for the IMQ function? (e.g. 2.0)"
print "\tmaternReg = ?"
imqPower = 1.0 * input("Enter: ")
print ""

imqKernelFixedPwr = partial(imqKernel, imqPower=imqPower)

ptSet = np.zeros((numPts, 1))
ptSet[:, 0] = np.linspace(0, 1, numPts)

kernelMtrx = buildKernelMtrx(ptSet, ptSet, imqKernelFixedPwr)

invKernelMtrx = np.linalg.inv(kernelMtrx)

numEvalPts = 400
evalPtSet = np.zeros((numEvalPts, 1))
evalPtSet[:, 0] = np.linspace(0, 1, numEvalPts)

kernelMtrxLeft = buildKernelMtrx(evalPtSet, ptSet, imqKernelFixedPwr)
lagFcts = kernelMtrxLeft.dot(invKernelMtrx)

lebConst = np.amax(lagFcts.sum(axis=1))

randIdx = np.random.randint(numPts)
plt.plot(evalPtSet,
         lagFcts[0:numEvalPts, randIdx],
# print("\nWhich maximal number of iterations? (e.g. 1000)")
# print("\trileyNumMaxIt = ?")
# rileyNumMaxIt = input("Enter: ")
# rileyNumMaxIt = int(rileyNumMaxIt)
# print("")

numPts = 500
dim = 2
rileyShift = 1e-07
rileyNumMaxIt = 1000
rileyAcc = 1e-10

ptSet = getPtsHalton(numPts, dim)

kernelMtrx = buildKernelMtrx(ptSet, ptSet, matKernel)
kernelMtrxShift = buildKernelMtrx(ptSet, ptSet, matKernel, rileyShift)

rhs = np.zeros(len(ptSet))
rhs[0] = 1

trueSol = np.linalg.solve(kernelMtrx, rhs)

startVec = np.linalg.solve(kernelMtrxShift, rhs)
currIt = np.copy(startVec)
counter = 0
currentRelError = np.linalg.norm(kernelMtrx.dot(currIt) -
                                 rhs) / np.linalg.norm(rhs)
relError = np.array(currentRelError)
print("Matern: shift = %.1f", rileyShift)
while currentRelError >= rileyAcc and counter <= rileyNumMaxIt:
# print("\nWhich maximal number of iterations? (e.g. 1000)")
# print("\trileyNumMaxIt = ?")
# rileyNumMaxIt = input("Enter: ")
# rileyNumMaxIt = int(rileyNumMaxIt)
# print("")

numPts = 512;
dim = 2;
rileyShift = 1e-2
rileyNumMaxIt = 500
rileyAcc = 1e-10

ptSet = getPtsHalton(numPts,dim)

kernelMtrx = buildKernelMtrx(ptSet,ptSet, gaussKernel)
kernelMtrxShift = buildKernelMtrx(ptSet,ptSet, gaussKernel, rileyShift)

rhs = np.zeros(len(ptSet))
rhs[0] = 1

trueSol = np.linalg.solve(kernelMtrx,rhs)

startVec = np.linalg.solve(kernelMtrxShift,rhs)
currIt = np.copy(startVec)
counter = 0
currentRelError = np.linalg.norm(kernelMtrx.dot(currIt) - rhs)/np.linalg.norm(rhs)
relError = np.array(currentRelError)
print("Matern: shift =", rileyShift)
while currentRelError >= rileyAcc and counter <= rileyNumMaxIt:
	if counter%20 == 1:
Example #7
0
print "\nHow many points shall we compute on? (>25, e.g. 250)"
numPts = input("Enter: ")

print "\nWhich regularity of the Matern function? (e.g. 2.0)"
maternReg = input("Enter: ")

print "\nWhich spatial dimension? (e.g. 2)"
dim = input("Enter: ")

print ""

maternKernelFixReg = partial(maternKernel, maternReg=maternReg)

ptSet = getPtsHalton(numPts, dim)

kernelMtrx = buildKernelMtrx(ptSet, ptSet, maternKernelFixReg)
invKernelMtrx = np.linalg.inv(kernelMtrx)
rhs = np.zeros((numPts, 1))
rhs[17, 0] = 1

# Check decay of Lagrange coefficients
distFrom17PtSet = np.zeros(numPts)
lagCoeff = invKernelMtrx.dot(rhs)
for idx in range(numPts):
    distFrom17PtSet[idx] = np.linalg.norm(ptSet[idx, :] - ptSet[17, :])
    lagCoeff[idx] = np.linalg.norm(lagCoeff[idx])
distSortPtSet = np.argsort(distFrom17PtSet)

# Check decay of Lagrange function
numEvalPts = numPts + 1
evalPtSet = np.random.rand(numEvalPts, dim)
np.set_printoptions(precision=1)

dim = 2

numReps = 7


def matKernel(pt1, pt2):
    return maternKernel(pt1, pt2, 1.5)


print("\nExponential:")
for i in range(numReps):
    numPts = 2**(i + 3)
    ptSet = getPtsHalton(numPts, dim)
    kernelMtrx = buildKernelMtrx(ptSet, ptSet, expKernel, 0.0)
    print("(", numPts, ",", np.linalg.cond(kernelMtrx), ")")

print("\nMatern(nu = 2):")
for i in range(numReps):
    numPts = 2**(i + 3)
    ptSet = getPtsHalton(numPts, dim)
    kernelMtrx = buildKernelMtrx(ptSet, ptSet, matKernel, 0.0)
    print("(", numPts, ",", np.linalg.cond(kernelMtrx), ")")

print("\nTPS:")
for i in range(numReps):
    numPts = 2**(i + 3)
    ptSet = getPtsHalton(numPts, dim)
    kernelMtrx = buildKernelMtrxCond(ptSet, ptSet, tpsKernel, 0.0)
    print("(", numPts, ",", np.linalg.cond(kernelMtrx), ")")
Example #9
0
from functools import partial

np.random.seed(15051994)
np.set_printoptions(precision=1)
plt.rcParams.update({'font.size': 16})

print "\nHow many points shall we work with? (e.g. 10)"
print "\tnumPts = ?"
numPts = input("Enter: ")
print ""

ptSet = np.zeros((numPts, 1))
ptSet[:, 0] = np.linspace(0, 1, numPts)

kernelMtrx = buildKernelMtrx(ptSet, ptSet, expKernel)

invKernelMtrx = np.linalg.inv(kernelMtrx)

numEvalPts = 400
evalPtSet = np.zeros((numEvalPts, 1))
evalPtSet[:, 0] = np.linspace(0, 1, numEvalPts)

kernelMtrxLeft = buildKernelMtrx(evalPtSet, ptSet, expKernel)
lagFcts = kernelMtrxLeft.dot(invKernelMtrx)

lebConst = np.amax(lagFcts.sum(axis=1))

randIdx = np.random.randint(numPts)
plt.plot(evalPtSet,
         lagFcts[0:numEvalPts, randIdx],