/***************************************************************************** demo_matrix: test & demo for nwspgr, matrix version integrate function using sparse grids and simulation *****************************************************************************/ clear set matsize 800 // note the limits of the matrix size local D = 8 // dimensions local maxk = 4 // max. accuracy level (pol. exactness wil be 2k-1) // true integral scalar trueval = (normal(.5)-.5)^`D' forvalues k=2/`maxk'{ // integration on sparse grids nwspgr, type(KPU) dim(`D') acc(`k') matn(x) matw(w) local numnodes = rowsof(w) matrix g = J(`numnodes',1,1) forvalues d=1/`D'{ forvalues r=1/`numnodes'{ matrix g[`r',1] = g[`r',1] * exp(-(x[`r',`d']/2)^2/2)/2/sqrt(2*_pi) } } matrix SGappr = g'*w scalar SGerror = sqrt((SGappr[1,1] - trueval)^2)/trueval // simulation with the same number of nodes, 1000 simulation repetitions scalar Simerror = 0 forvalues r=1/1000{ matrix x = matuniform(`numnodes',`D') matrix g = J(`numnodes',1,1) forvalues d=1/`D'{ forvalues r=1/`numnodes'{ matrix g[`r',1] = g[`r',1] * exp(-(x[`r',`d']/2)^2/2)/2/sqrt(2*_pi) } } matrix sim = g'*J(`numnodes',1,1/`numnodes') scalar Simerror = Simerror + (sim[1,1]-trueval)^2 } scalar Simerror = sqrt(Simerror/1000)/trueval dis "D=`D', k=`k' (nodes = `numnodes') SG error=" %8.5f SGerror ", Sim. error=" %8.5f Simerror }