⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsuite.m

📁 The CUBA library provides new implementation of four general-purpose multidimensional integration al
💻 M
字号:
(* Test suite of Genz, used also by Sloan and Joe, and Novak and Ritter *)seed = 4711maxpoints = 150000repeat = 20(* Family 1: Oscillatory *)f[1][x_, c_, w_] := Cos[2 Pi w[[1]] + c.x](* Family 2: Product peak *)f[2][x_, c_, w_] := Times@@ MapThread[f2a, {x, c, w}]f2a[xi_, ci_, wi_] := 1/(ci^-2 + (xi - wi)^2)(* Family 3: Corner peak *)f[3][x_, c_, w_] := (1 + c.x)^(-(Length[x] + 1))(* Family 4: Gaussian *)f[4][x_, c_, w_] := Exp[Plus@@ MapThread[f4a, {x, c, w}]]f4a[xi_, ci_, wi_] := -ci^2 (xi - wi)^2(* Family 5: Exponential *)f[5][x_, c_, w_] := Exp[Plus@@ MapThread[f5a, {x, c, w}]]f5a[xi_, ci_, wi_] := -ci Abs[xi - wi](* Family 6: Discontinuous *)f[6][x_, c_, w_] := 0 /; x[[1]] > w[[1]] || x[[2]] > w[[2]]f[6][x_, c_, w_] := Exp[c.x](* Novak & Ritter usedifficulty[fam_] := {9.00, 7.25, 1.85, 7.03, 2.04, 4.30}[[fam]]*)(* Sloan & Joe usescale[dim_] := dim^Min[Max[.2 dim, 1], 2]SetOptions[Interpolation, InterpolationOrder -> 2]ifun[1] = Interpolation[{{5, 145.7}, {8, 354.0}, {10,  900.0}}];ifun[2] = Interpolation[{{5, 261.0}, {8, 545.0}, {10, 1760.0}}];ifun[3] = Interpolation[{{5, 433.0}, {8, 193.0}, {10,  185.0}}];ifun[4] = Interpolation[{{5, 155.0}, {8, 382.0}, {10, 1230.0}}];ifun[5] = Interpolation[{{5, 217.0}, {8, 674.0}, {10, 2040.0}}];ifun[6] = Interpolation[{{5,  90.0}, {8, 240.0}, {10, 1470.0}}];difficulty[fam_] := ifun[fam][ndim]/scale[ndim]*)difficulty[fam_] := {6.0, 18.0, 2.2, 15.2, 16.1, 16.4}[[fam]]c[fam_] := Block[{r = w}, r difficulty[fam]/Plus@@ r]Install["Vegas"]Install["Suave"]Install["Divonne"]Install["Cuhre"]SetAll[opt__] := (  SetOptions[Vegas, opt];  SetOptions[Suave, opt];  SetOptions[Divonne, opt];  SetOptions[Cuhre, opt];  SetOptions[NIntegrate, opt];)SetAll[PrecisionGoal -> 3, MaxPoints -> maxpoints]SetOptions[Divonne, Key1 -> -200]def[f_][{x__}][{r__}] := (  Attributes[idef] = {HoldAll};  idef[int_, NIntegrate] := (    int := Module[{count = 0, res},             res = NIntegrate[f, r, EvaluationMonitor :> (++count)];             {count, res}]  ) /; $VersionNumber >= 5;  idef[int_, Int_] := (    int := Module[{count = 0, res},             res = Int[(++count; f), r];             {count, res}]  );  idef[vegas, Vegas];  idef[suave, Suave];  idef[divonne, Divonne];  idef[cuhre, Cuhre];  idef[nint, NIntegrate];)vars = Table[Unique["x"], {20}]test[ndim_, fam_] :=Block[ {w, xs = Take[vars, ndim]},  w := Table[Random[], {ndim}];  def[f[fam][xs, c[fam], w]][xs][{#, 0, 1}&/@ xs];  {vegas, suave, divonne, cuhre, nint}]dotest[ndim_, from_:1, to_:6] :=Block[ {dir = ToString[ndim]},  If[ FileType[dir] =!= Directory, CreateDirectory[dir] ];  Do[    SeedRandom[seed];    Put[ Table[test[ndim, fam], {repeat}],         ToFileName[dir, "fam" <> ToString[fam]] ],  {fam, from, to}]]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -