public GetIntegerOrThrowException ( String argumentName, String functionName ) : int | ||
argumentName | String | The name of the variable that is requested. |
functionName | String | The name of the function where this is requested. |
Résultat | int |
public MatrixValue Function(ScalarValue start, ScalarValue end, ScalarValue steps) { var s = steps.GetIntegerOrThrowException("steps", Name); var m = new Mandelbrot(); return(m.CalculateMatrix(start.Re, end.Re, start.Im, end.Im, s, s)); }
public BarPlotValue Function(MatrixValue Y, ScalarValue nbins) { var nn = nbins.GetIntegerOrThrowException("nbins", Name); var bp = new BarPlotValue(); if (Y.IsVector) { bp.AddPoints(YMath.Histogram(Y, nn)); } else { var M = new MatrixValue(); for (var i = 1; i <= Y.DimensionX; i++) { var N = YMath.Histogram(Y.GetColumnVector(i), nn); for (var j = 1; j <= N.Length; j++) { M[j, i] = N[j]; } } bp.AddPoints(M); } return bp; }
public ArgumentsValue Function(ScalarValue n) { var nn = n.GetIntegerOrThrowException("n", Name); int dim = nn + 1; if (dim < 2) throw new YAMPArgumentRangeException("n", 1.0); var X = new MatrixValue(dim, dim); // x = sin(phi) * cos(theta) var Y = new MatrixValue(dim, dim); // y = sin(phi) * sin(theta) var Z = new MatrixValue(dim, dim); // z = cos(phi) var stheta = Table(0.0, 2.0 * Math.PI, dim, Math.Sin); var ctheta = Table(0.0, 2.0 * Math.PI, dim, Math.Cos); var sphi = Table(0.0, Math.PI, dim, Math.Sin); var cphi = Table(0.0, Math.PI, dim, Math.Cos); for (var j = 0; j < dim; j++) { var col = j + 1; for (var i = 0; i < dim; i++) { var row = i + 1; X[row, col] = new ScalarValue(sphi[j] * ctheta[i]); Y[row, col] = new ScalarValue(sphi[j] * stheta[i]); Z[row, col] = new ScalarValue(cphi[j]); } } return new ArgumentsValue(X, Y, Z); }
public MatrixValue Function(MatrixValue x, MatrixValue y, ScalarValue n) { if (x.Length != y.Length) throw new YAMPDifferentLengthsException(x.Length, y.Length); var nn = n.GetIntegerOrThrowException("n", Name); var m = nn + 1; if (m < 2) throw new YAMPArgumentRangeException("n", 0.0); var M = new MatrixValue(x.Length, m); var b = new MatrixValue(x.Length, 1); for (var j = 1; j <= M.Rows; j++) { var el = ScalarValue.One; var z = x[j]; for (var i = 1; i <= M.Columns; i++) { M[j, i] = el; el *= z; } b[j, 1] = y[j]; } var qr = QRDecomposition.Create(M); return qr.Solve(b); }
public MatrixValue Function(ScalarValue x0, ScalarValue xn, ScalarValue y0, ScalarValue yn, ScalarValue xsteps, ScalarValue ysteps) { var xs = xsteps.GetIntegerOrThrowException("xsteps", Name); var ys = ysteps.GetIntegerOrThrowException("ysteps", Name); var m = new Mandelbrot(); return m.CalculateMatrix(x0.Re, xn.Re, y0.Re, yn.Re, xs, ys); }
public ArgumentsValue Function(ScalarValue n) { var nn = n.GetIntegerOrThrowException("n", Name); int dim = nn + 1; if (dim < 2) { throw new YAMPArgumentRangeException("n", 1.0); } var X = new MatrixValue(dim, dim); // x = sin(phi) * cos(theta) var Y = new MatrixValue(dim, dim); // y = sin(phi) * sin(theta) var Z = new MatrixValue(dim, dim); // z = cos(phi) var stheta = Table(0.0, 2.0 * Math.PI, dim, Math.Sin); var ctheta = Table(0.0, 2.0 * Math.PI, dim, Math.Cos); var sphi = Table(0.0, Math.PI, dim, Math.Sin); var cphi = Table(0.0, Math.PI, dim, Math.Cos); for (var j = 0; j < dim; j++) { var col = j + 1; for (var i = 0; i < dim; i++) { var row = i + 1; X[row, col] = new ScalarValue(sphi[j] * ctheta[i]); Y[row, col] = new ScalarValue(sphi[j] * stheta[i]); Z[row, col] = new ScalarValue(cphi[j]); } } return(new ArgumentsValue(X, Y, Z)); }
public BarPlotValue Function(MatrixValue Y, ScalarValue nbins) { var nn = nbins.GetIntegerOrThrowException("nbins", Name); var bp = new BarPlotValue(); if (Y.IsVector) { bp.AddPoints(YMath.Histogram(Y, nn)); } else { var M = new MatrixValue(); for (var i = 1; i <= Y.DimensionX; i++) { var N = YMath.Histogram(Y.GetColumnVector(i), nn); for (var j = 1; j <= N.Length; j++) { M[j, i] = N[j]; } } bp.AddPoints(M); } return(bp); }
public void Function(ScalarValue digits) { var n = digits.GetIntegerOrThrowException("digits", Name); Context.Precision = n; Parser.RaiseNotification(Context, new NotificationEventArgs(NotificationType.Information, "Output precision changed to " + Context.Precision + " digits.")); }
public MatrixValue Function(ScalarValue n, ScalarValue m) { var nn = n.GetIntegerOrThrowException("n", Name); var nm = m.GetIntegerOrThrowException("m", Name); return(MatrixValue.One(nn, nm)); }
public MatrixValue Function(ScalarValue x0, ScalarValue xn, ScalarValue y0, ScalarValue yn, ScalarValue xsteps, ScalarValue ysteps) { var xs = xsteps.GetIntegerOrThrowException("xsteps", Name); var ys = ysteps.GetIntegerOrThrowException("ysteps", Name); var m = new Mandelbrot(); return(m.CalculateMatrix(x0.Re, xn.Re, y0.Re, yn.Re, xs, ys)); }
public ScalarValue Function(ScalarValue n, ScalarValue z) { var nn = n.GetIntegerOrThrowException("n", Name); if (nn < 0) throw new Exception("Hermite polynomial of order n < 0 does not make sense."); return HermitePolynomial(nn, z); }
public ContourPlotValue Function(MatrixValue X, MatrixValue Y, MatrixValue Z, ScalarValue n) { var nn = n.GetIntegerOrThrowException("n", Name); var plot = new ContourPlotValue(); plot.AddPoints(X, Y, Z); plot.SetLevels(nn); return(plot); }
public ScalarValue Function(ScalarValue n, ScalarValue alpha, ScalarValue beta, ScalarValue z) { var nn = n.GetIntegerOrThrowException("n", Name); if (nn < 0) throw new Exception("Jacobi polynomial of order n < 0 does not make sense."); return JacobiPolynomial(nn, alpha, beta, z); }
public ScalarValue Function(ScalarValue l, ScalarValue m, ScalarValue theta, ScalarValue phi) { var nn = l.GetIntegerOrThrowException("l", Name); if (nn < 0) throw new Exception("Spherical harmonics of order l < 0 does not make sense."); var nm = m.GetIntegerOrThrowException("m", Name); return Ylm(nn, nm, theta.Re, phi.Re); }
public ScalarValue Function(ScalarValue n, ScalarValue x) { var nn = n.GetIntegerOrThrowException("n", Name); if (nn < 0) throw new Exception("Chebyshev polynomial of order n < 0 does not make sense."); var f = GetPolynom(nn); return new ScalarValue(f(x.Re)); }
public SubPlotValue Function(ScalarValue rows, ScalarValue columns) { var r = rows.GetIntegerOrThrowException("rows", Name); var c = columns.GetIntegerOrThrowException("columns", Name); var subplot = new SubPlotValue(); subplot.Rows = r; subplot.Columns = c; return(subplot); }
public MatrixValue Function(ScalarValue s, MatrixValue Z) { var n = s.GetIntegerOrThrowException("s", Name); var M = new MatrixValue(Z.DimensionY, Z.DimensionX); for (var j = 1; j <= Z.DimensionY; j++) for (var i = 1; i <= Z.DimensionX; i++) M[j, i] = GetValue(n, Z[j, i]); return M; }
public MatrixValue Function(ScalarValue from, ScalarValue to, ScalarValue count) { var c = count.GetIntegerOrThrowException("count", Name); if (c < 2) { throw new ArgumentException("linspace"); } var step = (to.Re - from.Re) / (c - 1); return new RangeValue(from.Re, to.Re, step); }
public void Function(ScalarValue timeout) { var n = timeout.GetIntegerOrThrowException("timeout", Name); var start = Environment.TickCount; using (var blocking = new ManualResetEvent(false)) { blocking.WaitOne(n); } var time = Environment.TickCount - start; Context.RaiseNotification(new NotificationEventArgs(NotificationType.Information, "Slept " + time + "ms.")); }
public MatrixValue Function(ScalarValue from, ScalarValue to, ScalarValue count) { var c = count.GetIntegerOrThrowException("count", Name); if (c < 2) { throw new ArgumentException("linspace"); } var step = (to.Re - from.Re) / (c - 1); return(new RangeValue(from.Re, to.Re, step)); }
public MatrixValue Function(ScalarValue start, ScalarValue end, ScalarValue count, ScalarValue basis) { var c = count.GetIntegerOrThrowException("count", Name); if (c < 2) { throw new ArgumentException("logspace"); } var s = (end.Re - start.Re) / (c - 1); var r = new RangeValue(start.Re, end.Re, s); return MatrixValue.PowSM(basis, r); }
public MatrixValue Function(ScalarValue start, ScalarValue end, ScalarValue count, ScalarValue basis) { var c = count.GetIntegerOrThrowException("count", Name); if (c < 2) { throw new ArgumentException("logspace"); } var s = (end.Re - start.Re) / (c - 1); var r = new RangeValue(start.Re, end.Re, s); return(MatrixValue.PowSM(basis, r)); }
public void Function(ScalarValue timeout) { var n = timeout.GetIntegerOrThrowException("timeout", Name); var start = Environment.TickCount; using (var blocking = new ManualResetEvent(false)) { blocking.WaitOne(n); } var time = Environment.TickCount - start; Parser.RaiseNotification(Context, new NotificationEventArgs(NotificationType.Information, "Slept " + time + "ms.")); }
public MatrixValue Function(ScalarValue n, MatrixValue Z) { var nn = n.GetIntegerOrThrowException("n", Name); if (nn < 0) throw new Exception("Hermite polynomial of order n < 0 does not make sense."); var M = new MatrixValue(Z.DimensionY, Z.DimensionX); for (var i = 1; i <= Z.Length; i++) M[i] = HermitePolynomial(nn, Z[i]); return M; }
public MatrixValue Function(ScalarValue order, MatrixValue argument) { var n = order.GetIntegerOrThrowException("order", Name); var M = new MatrixValue(argument.DimensionY, argument.DimensionX); for (var j = 1; j <= argument.DimensionY; j++) { for (var i = 1; i <= argument.DimensionX; i++) { M[j, i] = GetValue(n, argument[j, i].Re); } } return M; }
public MatrixValue Function(ScalarValue n, MatrixValue X) { var nn = n.GetIntegerOrThrowException("n", Name); if (nn < 0) throw new Exception("Chebyshev polynomial of order n < 0 does not make sense."); var M = new MatrixValue(X.DimensionY, X.DimensionX); var f = GetPolynom(nn); for (var i = 1; i <= X.Length; i++) M[i] = new ScalarValue(f(X[i].Re)); return M; }
public MatrixValue Function(ScalarValue order, MatrixValue argument) { var n = order.GetIntegerOrThrowException("order", Name); var M = new MatrixValue(argument.DimensionY, argument.DimensionX); for (var j = 1; j <= argument.DimensionY; j++) { for (var i = 1; i <= argument.DimensionX; i++) { M[j, i] = GetValue(n, argument[j, i].Re); } } return(M); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue mu, ScalarValue b) { var n = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(n, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= n; j++) { m[j, i] = new ScalarValue(Laplace(mu.Re, b.Re)); } } return m; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue lambda) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Exponential(lambda.Re)); } } return m; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue theta, ScalarValue k) { var n = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(n, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= n; j++) { m[j, i] = new ScalarValue(Gamma(theta.Re, k.Re)); } } return(m); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue mu, ScalarValue sigma) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Gaussian(sigma.Re, mu.Re)); } } return(m); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Distribution.NextDouble()); } } return m; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue mu, ScalarValue sigma) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Gaussian(sigma.Re, mu.Re)); } } return m; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Distribution.NextDouble()); } } return(m); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue theta, ScalarValue k) { var n = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(n, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= n; j++) { m[j, i] = new ScalarValue(Gamma(theta.Re, k.Re)); } } return m; }
public MatrixValue Function(ScalarValue l, ScalarValue m, MatrixValue theta, MatrixValue phi) { var nn = l.GetIntegerOrThrowException("l", Name); if (nn < 0) throw new Exception("Spherical harmonics of order l < 0 does not make sense."); var M = new MatrixValue(theta.Length, phi.Length); var nm = m.GetIntegerOrThrowException("m", Name); for (var i = 1; i <= phi.Length; i++) for (var j = 1; j <= theta.Length; j++) M[j, i] = Ylm(nn, nm, theta[j].Re, phi[i].Re); return M; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue lambda) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Exponential(lambda.Re)); } } return(m); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue mu, ScalarValue b) { var n = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(n, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= n; j++) { m[j, i] = new ScalarValue(Laplace(mu.Re, b.Re)); } } return(m); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue p, ScalarValue n) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var nn = n.GetIntegerOrThrowException("n", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Binomial(p.Re, nn)); } } return m; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue p, ScalarValue n) { var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var nn = n.GetIntegerOrThrowException("n", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Binomial(p.Re, nn)); } } return(m); }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue min, ScalarValue max) { Distribution.Alpha = min.GetIntegerOrThrowException("min", Name); Distribution.Beta = max.GetIntegerOrThrowException("max", Name); var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Distribution.Next()); } } return m; }
public MatrixValue Function(ScalarValue rows, ScalarValue cols, ScalarValue min, ScalarValue max) { ran.Alpha = min.GetIntegerOrThrowException("min", Name); ran.Beta = max.GetIntegerOrThrowException("max", Name); var k = rows.GetIntegerOrThrowException("rows", Name); var l = cols.GetIntegerOrThrowException("cols", Name); var m = new MatrixValue(k, l); for (var i = 1; i <= l; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(ran.Next()); } } return(m); }
public void Function(PlotValue plot, ScalarValue series, StringValue property, Value newValue) { if (plot.Count == 0) { throw new YAMPNoSeriesAvailableException("The given plot contains no series."); } var n = series.GetIntegerOrThrowException("series", Name); if (n < 1 || n > plot.Count) { throw new YAMPArgumentRangeException("series", 1, plot.Count); } AlterSeriesProperty(plot, n - 1, property.Value, newValue); plot.UpdateProperties(); Context.RaiseNotification(new NotificationEventArgs(NotificationType.Success, "Series " + n + " changed.")); }
public ScalarValue Function(ScalarValue action) { var n = action.GetIntegerOrThrowException("action", Name); switch (n) { case -1: Reset(); break; case 0: Stop(); break; case 1: Start(); break; } return Function(); }
public MatrixValue Function(MatrixValue M, ScalarValue nLag) { if (M.Length <= 1) { return(new MatrixValue()); } var nOffset = nLag.GetIntegerOrThrowException("nLag", Name); if (nOffset < 0) { nOffset = 0; } else if (nOffset >= M.Length) { nOffset = M.Length - 1; } return(YMath.CrossCorrelation(M, M, nOffset)); }
public MatrixValue Function(MatrixValue M, ScalarValue nLag) { if (M.Length > 1) { var nOffset = nLag.GetIntegerOrThrowException("nLag", Name); if (nOffset < 0) { nOffset = 0; } else if (nOffset >= M.Length) { nOffset = M.Length - 1; } return YMath.CrossCorrelation(M, M, nOffset); } return new MatrixValue(); }
public MatrixValue Function(MatrixValue M, MatrixValue N, ScalarValue lag) { if (M.Length != N.Length || M.Length <= 1) { return(new MatrixValue()); } int nOffset = lag.GetIntegerOrThrowException("lag", Name); if (nOffset < 0) { nOffset = 0; } else if (nOffset >= M.Length) { nOffset = M.Length - 1; } return(YMath.CrossCorrelation(M, N, nOffset)); }
public MatrixValue Function(ScalarValue dim) { var k = dim.GetIntegerOrThrowException("dim", Name); if (k < 1) { k = 1; } var m = new MatrixValue(k, k); for (var i = 1; i <= k; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Distribution.NextDouble()); } } return(m); }
public ScalarValue Function(ScalarValue action) { var n = action.GetIntegerOrThrowException("action", Name); switch (n) { case -1: Reset(); break; case 0: Stop(); break; case 1: Start(); break; } return(Function()); }
public MatrixValue Function(ScalarValue dim) { var k = dim.GetIntegerOrThrowException("dim", Name); if (k < 1) { k = 1; } var m = new MatrixValue(k, k); for (var i = 1; i <= k; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Distribution.NextDouble()); } } return m; }
public MatrixValue Function(MatrixValue Y, ScalarValue nbins) { var nn = nbins.GetIntegerOrThrowException("nbins", Name); if (!Y.IsVector) { var M = new MatrixValue(); for (var i = 1; i <= Y.DimensionX; i++) { var N = YMath.Histogram(Y.GetColumnVector(i), nn); for (var j = 1; j <= N.Length; j++) { M[j, i] = N[j]; } } return M; } return YMath.Histogram(Y, nn); }
public MatrixValue Function(ScalarValue dim, ScalarValue min, ScalarValue max) { Distribution.Alpha = min.GetIntegerOrThrowException("min", Name); Distribution.Beta = max.GetIntegerOrThrowException("max", Name); var k = dim.GetIntegerOrThrowException("dim", Name); if (k < 1) { k = 1; } var m = new MatrixValue(k, k); for (var i = 1; i <= k; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(Distribution.Next()); } } return m; }
public MatrixValue Function(ScalarValue dim, ScalarValue min, ScalarValue max) { ran.Alpha = min.GetIntegerOrThrowException("min", Name); ran.Beta = max.GetIntegerOrThrowException("max", Name); var k = dim.GetIntegerOrThrowException("dim", Name); if (k < 1) { k = 1; } var m = new MatrixValue(k, k); for (var i = 1; i <= k; i++) { for (var j = 1; j <= k; j++) { m[j, i] = new ScalarValue(ran.Next()); } } return(m); }
public MatrixValue Function(MatrixValue x, MatrixValue y, ScalarValue n) { if (x.Length != y.Length) { throw new YAMPDifferentLengthsException(x.Length, y.Length); } var nn = n.GetIntegerOrThrowException("n", Name); var m = nn + 1; if (m < 2) { throw new YAMPArgumentRangeException("n", 0.0); } var M = new MatrixValue(x.Length, m); var b = new MatrixValue(x.Length, 1); for (var j = 1; j <= M.Rows; j++) { var el = ScalarValue.One; var z = x[j]; for (var i = 1; i <= M.Columns; i++) { M[j, i] = el; el *= z; } b[j, 1] = y[j]; } var qr = QRDecomposition.Create(M); return(qr.Solve(b)); }
public MatrixValue Function(MatrixValue M, ScalarValue n, ScalarValue sigma) { return GetIndices(M, n.GetIntegerOrThrowException("n", Name), sigma.GetIntegerOrThrowException("sigma", Name)); }
public ScalarValue Function(ScalarValue s, ScalarValue z) { var n = s.GetIntegerOrThrowException("s", Name); return Polylog(n, z); }
public ScalarValue Function(ScalarValue min, ScalarValue max) { ran.Alpha = min.GetIntegerOrThrowException("min", Name); ran.Beta = max.GetIntegerOrThrowException("max", Name); return(new ScalarValue(ran.Next())); }
public MatrixValue Function(MatrixValue cfgs, ScalarValue n, FunctionValue f, ArgumentsValue P) { var numberOfBlocks = n.GetIntegerOrThrowException("n", Name); var nConfigs = cfgs.DimensionY; var nData = cfgs.DimensionX; if (numberOfBlocks > nConfigs) { throw new YAMPException("Jackknife: The number of measurements n is greater than the number of configurations cfgs!"); } if (numberOfBlocks <= 1) { throw new YAMPException("Jackknife: The number of measurements n <= 1!"); } var parameters = new ArgumentsValue(cfgs); foreach (var m in P.Values) { parameters.Insert(m); } var temp = f.Perform(Context, parameters); int nResult;//dimension of the result if (temp is ScalarValue) { nResult = 1; } else if (temp is MatrixValue) { nResult = ((MatrixValue)temp).Length; } else { throw new YAMPException("Jackknife: Observable f has to return either a scalar or a matrix!"); } var JackknifeObservable = new MatrixValue(numberOfBlocks, nResult); var BlockSize = nConfigs / numberOfBlocks; var nConfigsBlocked = BlockSize * numberOfBlocks; var residualConfigs = nConfigs - nConfigsBlocked; for (var i = 1; i <= numberOfBlocks; i++) { if (i <= numberOfBlocks - residualConfigs) { //the first (NumberOfBlocks - residualConfigs) blocks discard (BlockSize) elements ... var JackknifeConfigs = new MatrixValue(nConfigs - BlockSize, nData); var j = 1; for (; j <= (i - 1) * BlockSize; j++) { for (var k = 1; k <= nData; k++) { JackknifeConfigs[j, k] = cfgs[j, k]; } } j += BlockSize; for (; j <= nConfigs; j++) { for (var k = 1; k <= nData; k++) { JackknifeConfigs[j - BlockSize, k] = cfgs[j, k]; } } parameters = new ArgumentsValue(JackknifeConfigs); } else { //... whereas the residual (residualConfigs) blocks discard (BlockSize + 1) elements var JackknifeConfigs = new MatrixValue(nConfigs - BlockSize - 1, nData); var j = 1; for (; j <= nConfigs - (numberOfBlocks - (i - 1)) * (BlockSize + 1); j++) { for (var k = 1; k <= nData; k++) { JackknifeConfigs[j, k] = cfgs[j, k]; } } j += BlockSize + 1; for (; j <= nConfigs; j++) { for (var k = 1; k <= nData; k++) { JackknifeConfigs[j - BlockSize - 1, k] = cfgs[j, k]; } } parameters = new ArgumentsValue(JackknifeConfigs); } foreach (var m in P.Values) { parameters.Insert(m); } temp = f.Perform(Context, parameters); if (temp is ScalarValue) { JackknifeObservable[i] = (ScalarValue)temp; } else { var T = (MatrixValue)temp; for (var k = 1; k <= nResult; k++) { JackknifeObservable[i, k] = T[k]; } } } temp = YMath.Average(JackknifeObservable); for (var i = 1; i <= numberOfBlocks; i++) { if (temp is ScalarValue) { JackknifeObservable[i] -= temp as ScalarValue; JackknifeObservable[i] *= JackknifeObservable[i]; } else { var m = (MatrixValue)temp; for (var k = 1; k <= nResult; k++) { JackknifeObservable[i, k] -= m[k]; JackknifeObservable[i, k] *= JackknifeObservable[i, k]; } } } var error = YMath.Average(JackknifeObservable); var scale = numberOfBlocks - 1.0; if (error is ScalarValue) { error = ((ScalarValue)error) * scale; } else { var e = (MatrixValue)error; for (var i = 1; i <= e.DimensionY; i++) { for (var j = 1; j <= e.DimensionX; j++) { e[i, j] *= scale; } } } var sqrt = new SqrtFunction(); error = sqrt.Perform(error); var result = new MatrixValue(2, nResult); if (temp is ScalarValue) { result[1] = (ScalarValue)temp; result[2] = (ScalarValue)error; } else { var T = (MatrixValue)temp; var E = (MatrixValue)error; for (var k = 1; k <= nResult; k++) { result[1, k] = T[k]; result[2, k] = E[k]; } } return(result); }
public MatrixValue Function(MatrixValue cfgs, ScalarValue n, FunctionValue f, ArgumentsValue P) { var numberOfBootstrapSamples = n.GetIntegerOrThrowException("n", Name); var nConfigs = cfgs.DimensionY; var nData = cfgs.DimensionX; var distribution = new DiscreteUniformDistribution(Rng) { Beta = nConfigs, Alpha = 1 }; if (numberOfBootstrapSamples <= 1) { throw new YAMPException("Bootstrap: The number of bootstrap samples n is smaller or equal to 1!"); } var parameters = new ArgumentsValue(cfgs); foreach (var m in P.Values) { parameters.Insert(m); } var temp = f.Perform(Context, parameters); var nResult = 0;//dimension of the result if (temp is ScalarValue) { nResult = 1; } else if (temp is MatrixValue) { nResult = ((MatrixValue)temp).Length; } else { throw new YAMPException("Bootstrap: The observable f has to return either a scalar or a matrix!"); } var BootstrapObservable = new MatrixValue(numberOfBootstrapSamples, nResult); for (var i = 1; i <= numberOfBootstrapSamples; i++) { var BootstrapConfigs = new MatrixValue(nConfigs, nData); for (var j = 1; j <= nConfigs; j++) { var idx = distribution.Next(); for (var k = 1; k <= nData; k++) { BootstrapConfigs[j, k] = cfgs[idx, k]; } } parameters = new ArgumentsValue(BootstrapConfigs); foreach (var m in P.Values) { parameters.Insert(m); } temp = f.Perform(Context, parameters); if (temp is ScalarValue) { BootstrapObservable[i] = (ScalarValue)temp; } else { var m = (MatrixValue)temp; for (var k = 1; k <= nResult; k++) { BootstrapObservable[i, k] = m[k]; } } } temp = YMath.Average(BootstrapObservable); for (var i = 1; i <= numberOfBootstrapSamples; i++) { if (temp is ScalarValue) { BootstrapObservable[i] -= temp as ScalarValue; BootstrapObservable[i] *= BootstrapObservable[i]; } else { var T = temp as MatrixValue; for (var k = 1; k <= nResult; k++) { BootstrapObservable[i, k] -= T[k]; BootstrapObservable[i, k] *= BootstrapObservable[i, k]; } } } var error = YMath.Average(BootstrapObservable); var sqrt = new SqrtFunction(); error = sqrt.Perform(error); var result = new MatrixValue(2, nResult); if (temp is ScalarValue) { result[1] = (ScalarValue)temp; result[2] = (ScalarValue)error; } else { var T = (MatrixValue)temp; var E = (MatrixValue)error; for (var k = 1; k <= nResult; k++) { result[1, k] = T[k]; result[2, k] = E[k]; } } return(result); }
public MatrixValue Function(ScalarValue n) { var d = n.GetIntegerOrThrowException("n", Name); return(Generate(d, d)); }