Ox Function Examples
Chapter contents:
The example computes a correlogram twice, once using the library
function, and once `manually' (in the matrix macf).
#include
main()
{
decl i, m1 = rann(200,2), m1m, macf, ilag = 5;
macf = new matrix[ilag + 1][2];
m1m = m1 - meanc(m1); // in deviation from mean
for (i = 0; i <= ilag; ++i)
macf[i][] = diagonal(m1m'lag0(m1m, i));
macf = macf ./ macf[0][]; // scale by variance
print( acf(m1, ilag) ~ macf);
}
produces
1.0000 1.0000 1.0000 1.0000
-0.0021973 -0.046870 -0.0021973 -0.046870
-0.041011 -0.051470 -0.041011 -0.051470
-0.050879 -0.039346 -0.050879 -0.039346
0.056525 -0.093980 0.056525 -0.093980
0.021034 0.12671 0.021034 0.12671
Definition
#include
main()
{
print( acos(<0,1>) );
print( asin(<0,1>) );
print( atan(<0,1>) );
print( cos(<0,1>) );
print( cosh(<0,1>) );
print( sin(<0,1>) );
print( sinh(<0,1>) );
print( tan(<0,1>) );
print( tanh(<0,1>) );
}
produces
1.5708 0.00000
0.00000 1.5708
0.00000 0.78540
1.0000 0.54030
1.0000 1.5431
0.00000 0.84147
0.00000 1.1752
0.00000 1.5574
0.00000 0.76159
Definition
#include
main()
{
decl x = ones(20,1) ~ range(1,20)';
println(aggregatec(x, 5));
println(aggregatec(x, 6));
println(aggregater(x', 5));
println(aggregater(x', 6));
}
produces
5.0000 15.000
5.0000 40.000
5.0000 65.000
5.0000 90.000
6.0000 21.000
6.0000 57.000
6.0000 93.000
2.0000 39.000
5.0000 5.0000 5.0000 5.0000
15.000 40.000 65.000 90.000
6.0000 6.0000 6.0000 2.0000
21.000 57.000 93.000 39.000
Definition
#include
main()
{
decl m1 = unit(2), m2 = zeros(2,2);
if (m1 == 0) print ("TRUE ");
else print ("FALSE ");
if (any(m1 .== 0)) print ("TRUE ");
else print ("FALSE ");
if (!(m1 == 0)) print ("TRUE ");
else print ("FALSE ");
if (any(m1 .!= 0)) print ("TRUE ");
else print ("FALSE ");
if (m2 == 0) print ("TRUE ");
else print ("FALSE ");
if (any(m2 .== 0)) print ("TRUE ");
else print ("FALSE ");
if (m2 != 0) print ("TRUE ");
else print ("FALSE ");
if (any(m2 .!= 0)) print ("TRUE ");
else print ("FALSE ");
}
produces: FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE
Definition
Running the following arglist.ox program:
#include
main()
{
decl args = arglist(), s, i, j;
for (i = 0; i < sizeof(args); ++i)
{
sscan(args[i], "%d", &j);
println("argument ", i, ": ", args[i], " integer value:", j);
}
}
as oxl arglist.ox aa 12
(the arguments before arglist.ox are passed to oxl,
those after to arglist.ox), produces:
argument 0: arglist.ox integer value:0
argument 1: aa integer value:0
argument 2: 12 integer value:12
Definition
The array cast can be useful when an array indexation must remain
an array. For example, a single index on an array of strings returns a
string, whereas a multiple index returns an array of strings:
#include
main()
{
decl as = {"ax", "bx", "cx"};
print("single index is string: ", as[0],
"\nmultiple index is array of strings:", as[0:1],
"keep single index as array:", array(as[0]) );
}
which produces:
single index is string: ax
multiple index is array of strings:
[0] = ax
[1] = bx
keep single index as array:
[0] = ax
Definition
#include
main()
{
print( binand(1,2,4), " ", binor(1,2,4) );
}
produces: 0 7
Definition
#include
main()
{
decl v = <1, -1, -2>, rv = csqrt(v);
rv[0][1] = 1;/* change to a more interesting value */
print(v, rv, cabs(rv), cdiv(rv, rv), cmul(rv, rv),
cmul(rv, cdiv(ones(1,3), rv)) );
print(cexp(clog(rv)) );
}
produces
1.0000 -1.0000 -2.0000
1.0000 1.0000 0.00000
0.00000 1.0000 1.4142
1.0000 1.4142 1.4142
1.0000 1.0000 1.0000
0.00000 0.00000 0.00000
1.0000 0.00000 -2.0000
0.00000 2.0000 0.00000
1.0000 1.0000 1.0000
0.00000 0.00000 0.00000
1.0000 1.0000 8.6593e-017
0.00000 1.0000 1.4142
In the second example the complex functions are used
to check if the computed roots of a polynomial indeed
correspond to zeros of the polynomial:
#include
main()
{
decl v1 = <-1, 1.2274, -0.017197, -0.28369, -0.01028>, roots, cr;
polyroots(v1, &roots);
cr = columns(roots);
print("roots", roots,
"inverse roots", cdiv(ones(1,cr), roots) );
decl x1, x2, x3, x4, check;
x1 = roots;
x2 = cmul(x1, x1); /* roots ^ 2 */
x3 = cmul(x2, x1); /* roots ^ 3 */
x4 = cmul(x2, x2); /* roots ^ 4 */
check = v1[0][4] * (ones(1,cr) | zeros(1,cr)) +
v1[0][3] * x1 + v1[0][2] * x2 +
v1[0][1] * x3 + v1[0][0] * x4;
print("check (near-zeros could be different "
"with other Ox versions):", check);
}
which produces:
roots
0.82865 0.82865 -0.39337 -0.036535
0.16923 -0.16923 0.00000 0.00000
inverse roots
1.1585 1.1585 -2.5422 -27.371
-0.23659 0.23659 0.00000 0.00000
check (near-zeros could be different with other Ox versions):
0.00000 0.00000 -1.7000e-016 -8.4441e-018
-2.2204e-016 2.2204e-016 0.00000 0.00000
The final example considers the complex logarithm:
#include
main()
{
decl z, z1, z2, zm;
z = -1|-0.0; println("%c", {"z","clog(z)"}, z ~ clog(z));
z = -1|0; println(z ~ clog(z));
z = 1|-0.0; println(z ~ clog(z));
z = 1|0; println(z ~ clog(z));
z1=-2|1; z2 = -1|2;
zm = cmul(z1, z2);
println("%c", {"clog(z_1z_2)","clog(z_1)+clog(z_2)"},
clog(zm) ~ clog(z1)+clog(z2));
println("ph(z_1)=", atan2(z1[1], z1[0]),
" ph(z_2)=", atan2(z2[1], z2[0]));
}
which produces:
z clog(z)
-1.0000 0.00000
-0.00000 -3.1416
-1.0000 0.00000
0.00000 3.1416
1.0000 0.00000
-0.00000 -0.00000
1.0000 0.00000
0.00000 0.00000
clog(z_1z_2)clog(z_1)+clog(z_2)
1.6094 1.6094
-1.5708 4.7124
ph(z_1)=2.67795 ph(z_2)=2.03444
Definition
#include
main()
{
print( ceil(<-1.8, -1.2, 1.2, 1.8>) );
print( floor(<-1.8, -1.2, 1.2, 1.8>) );
print( round(<-1.8, -1.2, 1.2, 1.8>) );
print( trunc(<-1.8, -1.2, 1.2, 1.8>) );
print( int(-1.8), " ", int(-1.2), " ",
int(1.2), " ", int(1.8) );
}
produces
-1.0000 -1.0000 2.0000 2.0000
-2.0000 -2.0000 1.0000 1.0000
-2.0000 -1.0000 1.0000 2.0000
-1.0000 -1.0000 1.0000 1.0000
-1 -1 1 1
Definition
The example also shows how solvelu may be used to
obtain P^-1.
#include
main()
{
decl mp;
mp = choleski(<4,1;1,3>);
print(mp, mp*mp');
print(1/mp ~ solvelu(mp, 0, 0, unit(2)) );
}
produces
2.0000 0.00000
0.500000 1.6583
4.0000 1.0000
1.0000 3.0000
0.50000 0.00000 0.50000 0.00000
-0.15076 0.60302 -0.15076 0.60302
Definition
#include
main()
{
println(columns(<0,1;1,2;3,4>), " ", columns("taylor"));
println( rows(<0,1;1,2;3,4>), " ", rows("taylor"));
println( sizerc(<0,1;1,2;3,4>), " ", sizeof("taylor"));
}
produces
2 6
3 6
6 6
Definition
#include
main()
{
print( constant(1.5, 2, 2) );
}
produces
1.5000 1.5000
1.5000 1.5000
Definition
#include
main()
{
decl m1 = rann(100,2), m2;
m2 = standardize(m1);
print( correlation(m1), m2'm2/rows(m2) );
}
produces
1.0000 -0.039218
-0.039218 1.0000
1.0000 -0.039218
-0.039218 1.0000
Definition
#include
main()
{
print( countc(<0:3;1:4;2:5>, <2,4>) );
print( countr(<0:3;1:4;2:5>, <2>) );
}
produces
3.0000 2.0000 1.0000 0.00000
0.00000 1.0000 2.0000 2.0000
0.00000 0.00000 0.00000 1.0000
3.0000 1.0000
2.0000 2.0000
1.0000 3.0000
Definition
#include
main()
{
decl mx = ones(5,1);
print( mx ~ cumsum(mx, <0.5>)
~ cumsum(mx, <1, 0.5>, <1;2>)
~ cumprod(mx * 2)
~ cumprod(mx * 2, 2) );
print(cumsum(mx, <0.5;0.5;0.5;1;1>)' );
}
produces
1.0000 1.0000 1.0000 2.0000 2.0000
1.0000 1.5000 2.0000 4.0000 2.0000
1.0000 1.7500 3.5000 8.0000 8.0000
1.0000 1.8750 5.5000 16.000 32.000
1.0000 1.9375 8.2500 32.000 512.00
1.0000 1.5000 1.7500 2.7500 3.7500
Definition
#include
main()
{
print( ones(5,1) ~ cumulate(ones(5,1))
~ cumulate(ones(5,1), <0.5>)
~ cumulate(ones(5,1), <1>, <0.5>)
~ cumulate(ones(5,1), {<1>, <0.5>}) );
}
produces
1.0000 1.0000 1.0000 1.0000 1.0000
1.0000 2.0000 1.5000 2.0000 2.0000
1.0000 3.0000 1.7500 3.5000 3.5000
1.0000 4.0000 1.8750 5.5000 5.5000
1.0000 5.0000 1.9375 8.2500 8.2500
Definition
#include
main()
{
println("\ntime=", time(), " date=", date());
}
prints the current time and date.
Definition
#include
main()
{
println("1-Jan-2000 was weekday ",
dayofweek(2000, 1, 1), " (7 is Saturday)");
println("1-Jan-2000 was yearday ",
dayofcalendar(2000, 1, 1));
println("2000 had ", dayofcalendar(2001, 1, 1)
- dayofcalendar(2000, 1, 1), " days");
println("2001 had ", dayofcalendar(2002, 1, 1)
- dayofcalendar(2001, 1, 1), " days");
println("%c", {"Easter Sunday", "Last Wed in May"},
"%17C", dayofeaster(range(2005, 2010)')
~ dayofmonth(range(2005, 2010)', 5, 2, -1));
println("today ", "%C", dayofcalendar());
}
produces
1-Jan-2000 was weekday 7 (7 is Saturday)
1-Jan-2000 was yearday 2451545
2000 had 366 days
2001 had 365 days
Easter Sunday Last Wed in May
2005-03-27 2005-05-30
2006-04-16 2006-05-29
2007-04-08 2007-05-28
2008-03-23 2008-05-26
2009-04-12 2009-05-25
2010-04-04 2010-05-31
today 2012-11-28
Definition
#include
main()
{
decl ma = <4,1;1,3>, md, ml, mi;
print("result = ", decldl(ma, &ml, &md));
print(" L =", ml, "D =", md);
print(ml*diag(1 ./ md)*ml');
mi = solveldl(ml, md, unit(2));
print(mi*ma);
}
Note that diag(1 ./ md) and diag(1./md) are not the same.
The program produces (the final matrix could have values of
around 1e-16 instead of 0):
result = 1 L =
1.0000 0.00000
0.25000 1.0000
D =
0.25000 0.36364
4.0000 1.0000
1.0000 3.0000
1.0000 0.00000
0.00000 1.0000
Definition
#include
main()
{
decl i, j, k, m, mab, ma, ml, md, ct = 5, cb = 2;
ma = toeplitz(<5,4,3>, ct); // create test matrix ma
for (i = 0; i < ct; ++i)
ma[i][i] += i;
mab = diagonal(ma, cb); // create band matrix version
print("original matrix", ma, "band version", mab);
if (decldlband(mab, &ml, &md)) // decompose and solve
print("solved:", solveldlband(ml, md, <1;2;3;4;5>)' );
// undo banded storage:store L in lower diagonal of ma
for (i = 0, m = -cb; i < ct; ++i, m++)
for (j = max(0,m), k = j - m; j < i; ++j, ++k)
ma[i][j] = ml[k][i];
print("band L=", ml, "L:U=", ma);
}
produces
original matrix
5.0000 4.0000 3.0000 0.00000 0.00000
4.0000 6.0000 4.0000 3.0000 0.00000
3.0000 4.0000 7.0000 4.0000 3.0000
0.00000 3.0000 4.0000 8.0000 4.0000
0.00000 0.00000 3.0000 4.0000 9.0000
band version
0.00000 0.00000 3.0000 3.0000 3.0000
0.00000 4.0000 4.0000 4.0000 4.0000
5.0000 6.0000 7.0000 8.0000 9.0000
solved:
0.012378 0.26172 -0.036251 0.17507 0.48983
band L=
0.00000 0.00000 0.60000 1.0714 0.70000
0.00000 0.80000 0.57143 0.53333 0.67290
1.0000 1.0000 1.0000 1.0000 1.0000
L:U=
5.0000 4.0000 3.0000 0.00000 0.00000
0.80000 6.0000 4.0000 3.0000 0.00000
0.60000 0.57143 7.0000 4.0000 3.0000
0.00000 1.0714 0.53333 8.0000 4.0000
0.00000 0.00000 0.70000 0.67290 9.0000
Definition
#include
main()
{
decl ma, ml, mu, vp, mx;
ma = <3,17,10;2,4,-2;6,18,-12>;
declu(ma, &ml, &mu, &vp);
print( (ml*mu)[ vp[0][] ][], (unit(rows(ma)))[ vp[0][] ][] );
mx = solvelu(ml, mu, vp, ma);
print(mx);
}
produces (note that the last matrix is the identity
matrix: whether it has zeros, or nearly zeros, could
dependent on which Ox version was used):
3.0000 17.000 10.000
2.0000 4.0000 -2.0000
6.0000 18.000 -12.000
0.00000 1.0000 0.00000
0.00000 0.00000 1.0000
1.0000 0.00000 0.00000
1.0000 0.00000 0.00000
0.00000 1.0000 0.00000
0.00000 0.00000 1.0000
Definition
#include
main()
{
decl ma, mht, mr, mp, vp;
ma = <2,1,4;5,1,7;8,1,9;11,1,12>;
decqr(ma, &mht, &mr, &mp);
vp = mp[0][];
print("A=", ma, "A\'A", ma'ma,
"R\'R (ignoring pivoting)", mr'mr,
"R\'R (after undoing pivoting)", (mr'mr)[vp][vp]);
println("Note that mp[0][] contains P':", vp);
println("The pivots on A (where AP=QR) are:",
sortcindex(vp') ');
}
A=
2.0000 1.0000 4.0000
5.0000 1.0000 7.0000
8.0000 1.0000 9.0000
11.000 1.0000 12.000
A'A
214.00 26.000 247.00
26.000 4.0000 32.000
247.00 32.000 290.00
R'R (ignoring pivoting)
290.00 247.00 32.000
247.00 214.00 26.000
32.000 26.000 4.0000
R'R (after undoing pivoting)
214.00 26.000 247.00
26.000 4.0000 32.000
247.00 32.000 290.00
Note that mp[0][] contains P':
1.0000 2.0000 0.00000
The pivots on A (where AP=QR) are:
2.0000 0.00000 1.0000
Definition
The example shows how to obtain Q', reconstructs
the original matrix, and implements regression using
the QR decomposition (note that olsc is also
QR based).
Because the input matrix is singular, the
solution is not unique. Different versions of Ox may find
different solutions depending on differences in accumulation
of rounding errors.
#include
main()
{
decl iret, ma, maa, mht, mr, mp, mq, mb, vy;
ma = <1,2,3;1,5,6;1,8,9;1,11,12>;
iret = decqr(ma, &mht, &mr, &mp);
if (iret < 0)
println("Input matrix is singular");
print("H\'=", mht', "R1=", mr, "pivots", mp);
mq = decqrmul(mht);
maa = mq' * (mr | <0,0,0>);
print("Q\'=", mq', "ma (pivoted)=", maa,
"ma=", maa[][mp[0][]]);
vy = <2;1;2;4>;
olsc(vy, ma, &mb);
print("regression coefficients (transposed)", mb');
decl rank = sumr(fabs(diagonal(mr)) .> 1e-14);
println("rank=", rank);
mr[rank:][] = 0;
mb = solvelu(0, mr, 0, decqrmul(mht, vy)[:2][]);
print("from QR", mb', "in correct order", mb[mp[0][]][]');
}
Input matrix is singular
H'=
1.0000 0.00000 0.00000
0.30877 1.0000 0.00000
0.46316 -0.32710 1.0000
0.61755 -0.78925 0.46524
R1=
-16.432 -1.8257 -14.606
0.00000 -0.81650 0.81650
0.00000 0.00000 2.7577e-015
pivots
1.0000 2.0000 0.00000
2.0000 2.0000 2.0000
Q'=
-0.18257 -0.81650 0.54384 0.065078
-0.36515 -0.40825 -0.77363 0.31859
-0.54772 5.5511e-017 -0.084268 -0.83241
-0.73030 0.40825 0.31406 0.44874
ma (pivoted)=
3.0000 1.0000 2.0000
6.0000 1.0000 5.0000
9.0000 1.0000 8.0000
12.000 1.0000 11.000
ma=
1.0000 2.0000 3.0000
1.0000 5.0000 6.0000
1.0000 8.0000 9.0000
1.0000 11.000 12.000
regression coefficients (transposed)
0.50000 0.00000 0.23333
rank=
2.0000
from QR
0.23333 0.50000 0.00000
in correct order
0.50000 0.00000 0.23333
Definition
The example shows first how the QR decomposition of an
upper Hessenberg matrix (a matrix with zeros below the subdiagonal)
can be computed, and then updates
after appending a column to a lower triangular matrix.
#include
main()
{
decl ma, maa, mht, mr, mp, mq, mb, vy;
ma = <1,2,3,4,5;1,5,6,7,8;0,1,8,9,10;0,0,1,11,12>;
println("Upper Hessenberg matrix A", ma);
mr = ma;
mq = unit(sizer(ma));
decqrupdate(&mq, &mr, 1);
println("triangular R:", mr);
println("original:", mq*mr);
mr[1:][0] = 1;
mq = unit(sizer(ma));
println("Column 0 changed:", mr);
decqrupdate(&mq, &mr, 0, sizer(mr));
println("Made triangular:", mr);
println("original:", mq*mr);
}
Upper Hessenberg matrix A
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 5.0000 6.0000 7.0000 8.0000
0.00000 1.0000 8.0000 9.0000 10.000
0.00000 0.00000 1.0000 11.000 12.000
triangular R:
1.4142 4.9497 6.3640 7.7782 9.1924
0.00000 2.3452 5.3300 5.7564 6.1828
0.00000 0.00000 6.4102 8.8637 9.9131
0.00000 0.00000 0.00000 9.7365 10.583
original:
1.0000 2.0000 3.0000 4.0000 5.0000
1.0000 5.0000 6.0000 7.0000 8.0000
0.00000 1.0000 8.0000 9.0000 10.000
0.00000 0.00000 1.0000 11.000 12.000
Column 0 changed:
1.4142 4.9497 6.3640 7.7782 9.1924
1.0000 2.3452 5.3300 5.7564 6.1828
1.0000 0.00000 6.4102 8.8637 9.9131
1.0000 0.00000 0.00000 9.7365 10.583
Made triangular:
2.2361 4.1793 9.2753 15.812 17.745
0.00000 3.5403 1.4789 -3.9779 -4.0002
0.00000 0.00000 4.6671 -0.80946 -0.78739
0.00000 0.00000 0.00000 -0.70954 -1.2216
original:
1.4142 4.9497 6.3640 7.7782 9.1924
1.0000 2.3452 5.3300 5.7564 6.1828
1.0000 3.8760e-016 6.4102 8.8637 9.9131
1.0000 3.8760e-016 8.6736e-018 9.7365 10.583
Definition
#include
main()
{
decl a, b, ev, t, s, v, i, alpha, beta, vl, vr;
a = rann(4,4); b = rann(4,4);
print("a", a);
i = decschur(a, &ev, &s);
print("eigenvalues", ev);
print("s", s);
i = decschur(a, &ev, &s, &v);
print("v*s*v'", v*s*v');
i = decschur(a, &ev, &s, &v, 0, 1);
print("cabs(eigenvalues) between 0 and 1 first, S=", s);
i = decschurgen(a, b, &alpha, &beta, &s, &t, &vl, &vr);
print("b", b);
println("decschurgen i=", i);
print("alpha", alpha);
print("beta", beta);
// print("s", s, "vl*s*vr'", vl*s*vr');
print("t", t, "vl*t*vr'", vl*t*vr');
decschurgen(a, unit(rows(a)), &alpha, &beta, &s, &t, &vl, &vr,0,1);
println("selecting gen. eigenvalues between 0 and 1 first");
print("generalized eigenvalues", alpha ./ beta);
}
produces
a
0.22489 1.7400 -0.20426 -0.91760
-0.67417 -0.34353 0.22335 -0.14139
-0.18338 0.68035 0.090558 -0.83328
0.81350 1.1174 0.31499 -0.50031
eigenvalues
-0.25959 -0.25959 -0.0046060 -0.0046060
1.3775 -1.3775 0.32694 -0.32694
s
-0.25959 -2.1654 -1.2665 -0.37296
0.87631 -0.25959 -0.51481 0.18777
0.00000 0.00000 -0.0046060 0.16910
0.00000 0.00000 -0.63214 -0.0046060
v*s*v'
0.22489 1.7400 -0.20426 -0.91760
-0.67417 -0.34353 0.22335 -0.14139
-0.18338 0.68035 0.090558 -0.83328
0.81350 1.1174 0.31499 -0.50031
cabs(eigenvalues) between 0 and 1 first, S=
-0.0046060 -0.20780 0.49340 0.64443
0.51441 -0.0046060 0.66321 0.24688
0.00000 0.00000 -0.25959 0.78487
0.00000 0.00000 -2.4177 -0.25959
b
-1.6268 0.61943 -1.4574 -1.8035
2.0016 0.57912 -0.70797 0.59336
-0.58939 1.4674 -0.020230 0.73706
1.4795 -0.26881 1.2282 1.5784
decschurgen i=0
alpha
1.9293 0.70758 -0.68938 -0.22323
beta
0.089639 3.2454 2.0066 1.7759
t
0.089639 0.68167 -0.46602 -0.52514
0.00000 3.2454 1.6897 -0.89339
0.00000 0.00000 2.0066 -0.75847
0.00000 0.00000 0.00000 1.7759
vl*t*vr'
-1.6268 0.61943 -1.4574 -1.8035
2.0016 0.57912 -0.70797 0.59336
-0.58939 1.4674 -0.020230 0.73706
1.4795 -0.26881 1.2282 1.5784
selecting gen. eigenvalues between 0 and 1 first
generalized eigenvalues
-0.0046060 -0.0046060 -0.25959 -0.25959
0.32694 -0.32694 1.3775 -1.3775
Definition
#include
main()
{
decl x=<1,2;3,4;5,6>, mu, mv, mw;
print("singular values: ", decsvd(x));
print("result = ", decsvd(x, &mu, &mw, &mv));
print(" A =", mu * diag(mw) * mv');
decsvd(x', &mu, &mw, &mv);
print(" A =", mu * diag(mw) * mv');
}
produces
singular values:
9.5255 0.51430
result = 0 A =
1.0000 2.0000
3.0000 4.0000
5.0000 6.0000
A =
1.0000 3.0000 5.0000
2.0000 4.0000 6.0000
Definition
#include
main()
{
decl m = <.,1,2,3;4:7;8,9,.,11>;
print(m, "Rows with .NaN deleted", deleter(m));
print("%r", {"deleter","deleteifr"},
deleter(m, <1,.NaN>) | deleteifr(m, m .< 6 .|| m .>= 14));
}
produces:
.NaN 1.0000 2.0000 3.0000
4.0000 5.0000 6.0000 7.0000
8.0000 9.0000 .NaN 11.000
Rows with .NaN deleted
4.0000 5.0000 6.0000 7.0000
deleter 4.0000 5.0000 6.0000 7.0000
deleteifr 8.0000 9.0000 .NaN 11.000
Definition
#include
main()
{
print( determinant(<2,1;1,4>) );
}
produces: 7
Definition
#include
main()
{
print( "dfft", dfft(<1,0,1>), "fft1d", fft1d(<1,0,1>),
"inverse dfft(dfft))", dfft(dfft(<1,0,1>), 2) );
}
produces
dfft
2.0000 0.50000 0.50000
0.00000 0.86603 -0.86603
fft1d
2.0000 0.50000 0.50000
0.00000 0.86603 -0.86603
inverse dfft(dfft))
1.0000 -1.4599e-016 1.0000
Definition
#include
main()
{
print( diag(<1,1>), diag(<1;1>) );
}
produces
1.0000 0.00000
0.00000 1.0000
1.0000 0.00000
0.00000 1.0000
Definition
#include
main()
{
print( diagcat(<2,2>, unit(2)) );
}
produces
2.0000 2.0000 0.00000 0.00000
0.00000 0.00000 1.0000 0.00000
0.00000 0.00000 0.00000 1.0000
Definition
#include
main()
{
decl x = <1:5;11:15;21:25>;
print( "%6.0f", diagonal(x) );
print( "%6.0f", diagonal(x, 1, -1) );
}
produces
1 12 23
0 2 13 24
1 12 23 0
11 22 0 0
Definition
#include
main()
{
print( diagonalize( constant(2, 3, 4) ) );
}
produces
2.0000 0.00000 0.00000 0.00000
0.00000 2.0000 0.00000 0.00000
0.00000 0.00000 2.0000 0.00000
Definition
#include
main()
{
print( diff0(<1:5>',2) );
}
produces
0.00000
0.00000
2.0000
2.0000
2.0000
Definition
In this example, the three intervals are [-3,-1),
[-1,1) and [1,3). So the last observation of x
will be ignored. The raw discretization simply counts the numbers
in each interval, giving the first line of output.
The weighted version looks at the distance to the points -2,0,2
(also printed as the last output line): -3 is to the left of the
minimum, so fully assigned to the first interval. Apart from
-1, all observations are exactly on a point, so fully assigned;
-1 falls halfway between -2 and 0, so half is assigned to
the first interval, and half to the second (if the value
would have been -1.5, 0.75 would go to the first interval, 0.25
to the second.
#include
main()
{
decl a = -2, b = 2, m = 3, t;
decl x = <-3,-2,-1,0,2,3>;
t = a + (b - a) * range(0, m - 1) / (m - 1);
print( discretize(x, a, b, m, 0)
| discretize(x, a, b, m, 1) | t);
}
produces
2.0000 2.0000 1.0000
2.5000 1.5000 1.0000
-2.0000 0.00000 2.0000
Definition
#include
main()
{
decl x = <1,2,3;4,5,6>;
print( dropc(x, 1), dropr(x, 1) );
print( insertc(x, 0, 1) );
decl a = {{"A","B"},{1,2},{<1>,<2>}};
println("dropr(a, <1,2>)", dropr(a, <1,2>));
println("a[0]=", a[0], "dropr(a[0], <1>)", dropr(a[0], <1>));
println("insertr(a[0], 0, 2)", insertr(a[0], 0, 2));
}
produces
1.0000 3.0000
4.0000 6.0000
1.0000 2.0000 3.0000
0.00000 1.0000 2.0000 3.0000
0.00000 4.0000 5.0000 6.0000
dropr(a, <1,2>)
[0][0] = A
[0][1] = B
a[0]=
[0] = A
[1] = B
dropr(a[0], <1>)
[0] = A
insertr(a[0], 0, 2)
[0] = .Null
[1] = .Null
[2] = A
[3] = B
Definition
#include
main()
{
decl meval, mevec;
print("result=", eigensym(<2,1;1,3>, &meval, &mevec));
print(" eigenvalues:", meval, "eigenvectors:", mevec);
print("result=", eigen(<2,1;-3,1>, &meval));
print(" eigenvalues:", "%r",
{"real", "imaginary"}, meval);
}
produces
result=0 eigenvalues:
3.6180 1.3820
eigenvectors:
-0.52573 0.85065
-0.85065 -0.52573
result=0 eigenvalues:
real 1.5000 1.5000
imaginary 1.6583 -1.6583
Definition
#include
main()
{
decl meval, mevec;
print("result = ",
eigensymgen(<2,1;1,3>,<1,0;0,1>, &meval, &mevec));
print(" generalized eigenvectors:", mevec);
}
produces
result = 0 generalized eigenvectors:
-0.52573 0.85065
-0.85065 -0.52573
Definition
#include
main()
{
eprint( "\nerror message\n" );
}
prints error message to the console (even when the output
is redirected to a file).
Definition
#include
main()
{
decl x = <-1,1,.,-2,-2,.,4>, y = <3,3,.,-2,1>;
format("%5.1g");
print("exclusion", exclusion(x, y) );
print("intersection", intersection(x, y) );
print("union", union(x, y) );
print("union using unique", unique(x ~ y) );
}
produces
exclusion
-1 4
intersection
-2 1
union
-2 -1 1 3 4
union using unique
-2 -1 1 3 4
Definition
#include
main()
{
print( exp(<0,1>) );
}
produces
1.0000 2.7183
Definition
#include
main()
{
print( fabs(<-1.1,1.1>) );
}
produces
1.1000 1.1000
Definition
#include
main()
{
print( fft(<1,0,1>), fft(fft(<1,0,1>), 2) );
}
produces
2.0000 0.00000 2.0000 0.00000
0.00000 -0.00000 0.00000 0.00000
1.0000 0.00000 1.0000 -0.00000
Definition
#include
main()
{
decl x1 = <4;0;3> ~ <0;4;1>, xm = <4;3;2;1;0> ~ <.;.;2;3;.>, x2;
x2 = xm;
println("before, x1=", x1, "x2=", x2);
println("vecindex - sorted indices (column):",
vecindex(x2[][0], x1[][0]));
x2 = xm;
println("find returns the locations (column):",
find(x2[][0], x1[][0]));
// no find failures:
decl sel = find(x2[][0], x1[][0]);
x2[sel][1] = x1[][1];
println("can be used to insert the missing values in x2:", x2);
// not all found:
x2 = xm;
sel = find(x2[][0], x1[][0] | 5);
decl selfound = vecindex(sel .>= 0);
x2[sel[selfound]][1] = x1[selfound][1];
println("redo, but now with a value that is not found:", x2);
}
produces:
before, x1=
4.0000 0.00000
0.00000 4.0000
3.0000 1.0000
x2=
4.0000 .NaN
3.0000 .NaN
2.0000 2.0000
1.0000 3.0000
0.00000 .NaN
vecindex - sorted indices (column):
0.00000
1.0000
4.0000
find returns the locations (column):
0.0000
4.0000
1.0000
can be used to insert the missing values in x2:
4.0000 0.00000
3.0000 1.0000
2.0000 2.0000
1.0000 3.0000
0.00000 4.0000
redo, but now with a value that is not found:
4.0000 0.00000
3.0000 1.0000
2.0000 2.0000
1.0000 3.0000
0.00000 4.0000
Definition
#include
main()
{
decl x = range(0,5)' ~ range(10,15)', t1, t2;
x[2][1] = x[5][1] = .NaN; x[4][] = .NaN;
println(x);
findsample(x, <>, <>, 0, -1, SAM_ALLVALID, &t1, &t2);
println("SAM_ALLVALID: t1=", t1, " t2=", t2);
findsample(x, <>, <>, 0, -1, SAM_ENDSVALID, &t1, &t2);
println("SAM_ENDSVALID:t1=", t1, " t2=", t2);
findsample(x, <>, <>, 0, -1, SAM_ANYVALID, &t1, &t2);
println("SAM_ANYVALID: t1=", t1, " t2=", t2);
findsample(x, <0,0>, <0,1>, 0, -1, SAM_ALLVALID, &t1, &t2);
println("SAM_ALLVALID: t1=", t1, " t2=", t2, " column 0,lags 0-1");
}
%produces
0.00000 10.000
1.0000 11.000
2.0000 .NaN
3.0000 13.000
.NaN .NaN
5.0000 .NaN
SAM_ALLVALID: t1=0 t2=1
SAM_ENDSVALID: t1=0 t2=3
SAM_ANYVALID: t1=0 t2=5
SAM_ALLVALID: t1=1 t2=3 column 0, lags 0-1
Definition
#include
main()
{
print( fmod(3,2), " ", fmod(-3,2), " ",
fmod(3,-2), " ", fmod(-3,-2) );
}
produces: 1 -1 1 -1
Definition
#include
main()
{
decl file = fopen("test.tmp", "w");
if (isfile(file))
{
fprintln(file, "some text" );
fclose(file);
}
}
produces a file test.tmp with the specified text.
Definition
A number of input/output examples is in the samples/inout
directory. Below is samples/inout/inout7.ox. The programs inout10
and inout11 show how data can be read and written in blocks
when the file is not a .fmt file.
This example writes a matrix as a .fmt file using savemat.
Then the matrix is written using fread, in such a way
that the same format is used.
Note that under Windows and MS-DOS these files are identical,
but that on some platforms (such as the Sun)
the files differ: iotest7.ox is little endian, but
reading here assumes the platform ordering (which
is big endian on a Sun).
#include
main()
{
decl file, x;
decl s, r, c, rc8;
x = rann(2,3);
x[0][] = double("tinker");
savemat("iotest7.fmt", x);
// open mode: read, binary, little-endian
file = fopen("iotest7.fmt", "rbe");
fread(file, &s, 'c', 4);
if (s == "\xDD\xEE\x86")
println("signature OK");
else
{ println("signature NOT OK!");
exit(1);
}
fread(file, &r, 'i');
fread(file, &c, 'i');
println("rows=", r, " columns=", c);
fread(file, &rc8, 'i');
fread(file, &x, 'f', r, c);
println("-1 indicates eof: ", fread(file, &s, 'c', 1));
if (feof(file))
println("Was indeed end of file.");
fclose(file);
println(string(x[0][0]), x[1:][]);
}
produces:
signature OK
rows=2 columns=3
-1 indicates eof: -1
Was indeed end of file.
tinker
-0.91760 -0.67417 -0.34353
Definition
The example (samples/inout/iotest2.ox) writes a file, and reads it twice.
The first time, the string read is tinker123,
but then reading gets stuck, because the word
tailor can not be read is an integer, double or matrix.
Failure to read the matrix dimension generates an error message.
The second time, the file is read properly.
#include
main()
{
decl file;
file = fopen("iotest2.txt", "w");
fprint(file, "tinker123\ntailor456.78\n 2 2 1 0 0 1\n");
fclose(file);
decl c = -2, s, i = 0, d = 0, m = 0;
file = fopen("iotest2.txt");
println("Next statement will print message: "
"\"load matrix: no matrix elements\"");
c = fscan(file, "%s", &s, // stops after &s
"%d", &i, "%f", &d, "%m", &m);
fclose(file);
print("\nitems read=", c, " s=", s, " int=", i,
" dbl=", d, " mat=", m);
file = fopen("iotest2.txt");
c = fscan(file, "tinker%d", &i, " tailor%f", &d, "%m", &m);
fclose(file);
print("\nitems read=", c, " int=", i, " dbl=", d,
" mat=", m);
// token example:
decl str = "GMM(\"a\", 1.5, -3);";
decl func, arg0, arg1, arg2, arg3;
println("\ntoken string: ", str);
sscan(str, "%t", &func, "( %t", &arg0, ", %f", &arg1,
", %d", &arg2);
println("scanned using \"%t\": ", func, " ", arg0,
" ", arg1, " ", arg2);
sscan(str, "%T", &func, "(%T", &arg0, ", %T", &arg1,
", %T", &arg2, "%T", &arg3);
println("scanned using \"%T\":", func, arg0, arg1, arg2, arg3);
}
produces
Next statement will print message: "load matrix: no matrix elements"
load matrix: no matrix elements
items read=1 s=tinker123 int=0 dbl=0 mat=0
items read=3 int=123 dbl=456.78 mat=
1.0000 0.00000
0.00000 1.0000
token string: GMM("a", 1.5, -3);
scanned using "%t": GMM a 1.5 -3
scanned using "%T":
[0] = GMM
[1] = GMM
[2] = 0
[0] = a
[1] = "a"
[2] = 1
[0] = 1.5
[1] = 1.5
[2] = 1
[0] = -
[1] = -
[2] = 2
[0] = 3
[1] = 3
[2] = 1
Definition
This example (samples/inout/iotest9.ox) reads and writes to a matrix opened with the f format.
In that case, the number of columns applies to the whole file,
and seeking is by row. Once the file file holds data, each subsequent
write must match the number of columns already in the file.
#include
main()
{
decl file, x, i;
file = fopen("iotest9.fmt", "wbf"); // write
fwrite(file, ones(1, 4));
fwrite(file, 1 + ones(1, 4));
fwrite(file, zeros(27, 4));
fclose(file);
file = fopen("iotest9.fmt", "abf"); // append
println("file is ", rows(file), " by ", columns(file));
fwrite(file, 2 + ones(1, 4));
fclose(file);
file = fopen("iotest9.fmt", "rbf"); // read
println("file is ", rows(file), " by ", columns(file));
fseek(file, 'f', 1); // second row
fread(file, &x, 'f', 1); // read it
print("row of twos:", x);
fseek(file, 'f', rows(file)-1); // second row
fread(file, &x, 'f', 1); // read it
print("row of threes:", x);
}
produces:
file is 29 by 4
file is 30 by 4
row of twos:
2.0000 2.0000 2.0000 2.0000
row of threes:
3.0000 3.0000 3.0000 3.0000
Definition
A number of input/output examples is in the samples/inout
directory. Below is samples/inout/inout6.ox,
which saves a matrix as a .ftm file using savemat.
Then the matrix is written using fwrite, in such a way
that the same format is used. See under fread for a read example.
Note that under Windows and MS-DOS these files are identical,
but that on some platforms (such as the Sun)
the files differ: iotest6a.fmt is little endian, but
iotest6b.fmt big endian. So on a Sun, using loadmat on
iotest6b.fmt fails to read the matrix correctly.
The example also shows how a short string can be stores in matrix,
and retrieved from it.
newpage
#include
main()
{
decl file, x = rann(2,3);
x[0][] = double("tinker");
savemat("iotest6a.fmt", x);
// force little-endian mode
file = fopen("iotest6b.fmt", "wbe");
// two ways if writing signature, first:
// decl s = new string[4]; // need four bytes
// s[0:2] = "\xDD\xEE\x86"; // signature is DDEE8600
// fwrite(file, s);
//
// and second way:
fprint(file, "%c", 0xdd, "%c", 0xee, "%c", 0x86, "%c", 0x00);
fwrite(file, rows(x));
fwrite(file, columns(x));
fwrite(file, rows(x) * columns(x) * 8);
fwrite(file, x);
fclose(file);
decl y = loadmat("iotest6b.fmt");
println(string(x[0][0]), string(y[0][0]), x[1][1]-y[1][1]);
}
produces: tinkertinker0
Definition
#include
#include // required for probgamma
main()
{
print(probgamma(5.99, 1, 0.5), " ",
gammafunc(5.99 * 0.5, 1), "\n");
print(probgamma(5.99, 0.5, 1), " ",
gammafunc(5.99, 0.5) );
}
produces
0.949963 0.949963
0.999462 0.999462
Definition
#include
main()
{
println("Current folder = ", getcwd());
chdir("D:\\OxMetrics6\\ox\\include");
//default:chdir("C:\\Program Files\\OxMetrics6\\ox\\include");
println("Current folder = ", getcwd());
println("Files in folder: ", getfiles("*.ox"));
}
produces
Current folder = D:\Waste
Current folder = D:\OxMetrics6\ox\include
Files in folder:
[0] = g2ox.ox
[1] = oxgauss.ox
[2] = ox_init.ox
Definition
#include
main()
{
print( idiv(3,2), " ", idiv(-4,2), " ",
idiv(3,-2), " ", idiv(-4,-2), " ");
print( imod(3,2), " ", imod(-3,2), " ",
imod(3,-2), " ", imod(-3,-2) );
}
produces: 1 -2 -1 2 1 -1 1 -1
Definition
#include
main()
{
decl mp = <4,1;1,3>;
print(invert(mp)*mp ~ invertsym(mp)*mp);
}
produces (note that the both matrices are the identity
matrix: whether it has zeros, or nearly zeros, could
dependent on which Ox version was used):
1.0000 0.00000 1.0000 0.00000
0.00000 1.0000 0.00000 1.0000
Definition
#include
main()
{
decl x, xx;
x = rann(20,2);
x = x ~ x[][0];
xx = x'x;
println("\nAA^A=A:");
print(xx * invertgen(xx, 30) * xx - xx);
print(xx * invertgen(x, 40) * xx - xx);
println("These generalized inverses are different:");
print("Choleski failed, so use SVD", invertgen(xx, 3));
print("Using QR", invertgen(x, 4));
}
produces (note that the exact value of the zeros
can depend on the computer platform and the version of Ox):
AA^A=A:
Warning: invertgen: invertsym failed, proceeding with
generalized p.s.d. inverse
invertgen.ox (10): main
-1.4211e-014 -4.4409e-016 -1.4211e-014
-2.2204e-016 1.4211e-014 -2.2204e-016
-1.4211e-014 -4.4409e-016 -1.4211e-014
Warning: invertgen: matrix has reduced rank
invertgen.ox (11): main
-7.1054e-015 -6.6613e-016 -7.1054e-015
-8.8818e-016 3.5527e-015 -8.8818e-016
-7.1054e-015 -6.6613e-016 -7.1054e-015
These generalized inverses are different:
Choleski failed, so use SVD
0.014260 -0.0023020 0.014260
-0.0023020 0.049276 -0.0023020
0.014260 -0.0023020 0.014260
Using QR
0.057041 -0.0046039 0.00000
-0.0046039 0.049276 0.00000
0.00000 0.00000 0.00000
Definition
#include
main()
{
decl m1 = <1+1e-17,1-1e-17;1+1e-17,1-1e-17 >;
decl m2 = <1+1e-17,1-1e-10;1+1e-17,1-1e-17 >;
print( "m1 is ", isfeq(m1,1) ? "" : "*** not *** ",
"fuzzy equal to 1\n");
print( "m2 is ", isfeq(m2,1) ? "" : "*** not *** ",
"fuzzy equal to 1\n");
print(isdotfeq(m1,1));
}
produces
m1 is fuzzy equal to 1
m2 is *** not *** fuzzy equal to 1
1.0000 1.0000
1.0000 1.0000
Definition
#include
main()
{
decl m1 = <1,2,3;4,5,6;7,8,9 >;
decl m2 = <1,.,3;4,5,.;7,8,9 >;
print( "m1 has ", isnan(m1) ? "" : "*** no *** ",
"missing values\n");
print( "m2 has ", isnan(m2) ? "" : "*** no *** ",
"missing values\n");
print(isdotnan(m2));
print("m2", m2, "rows with NaN deleted",
deleter(m2), deleteifr(m2, isdotnan(m2)));
}
produces
m1 has *** no *** missing values
m2 has missing values
0.00000 1.0000 0.00000
0.00000 0.00000 1.0000
0.00000 0.00000 0.00000
m2
1.0000 .NaN 3.0000
4.0000 5.0000 .NaN
7.0000 8.0000 9.0000
rows with NaN deleted
7.0000 8.0000 9.0000
7.0000 8.0000 9.0000
Definition
#include
#include // reguired for M_NAN
main()
{
print( lag0(<1:5>', 2) ~ lag(<1:5>', 2) );
}
produces
0.00000 .NaN
0.00000 .NaN
1.0000 1.0000
2.0000 2.0000
3.0000 3.0000
Definition
#include
main()
{
decl m = rann(7,2);
print( range(0, rows(m)-1)' ~ m,
"%r", {"column min","column max",
"row index of min","row index of max"}, limits(m) );
}
produces
0.00000 0.22489 1.7400
1.0000 -0.20426 -0.91760
2.0000 -0.67417 -0.34353
3.0000 0.22335 -0.14139
4.0000 -0.18338 0.68035
5.0000 0.090558 -0.83328
6.0000 0.81350 1.1174
column min -0.67417 -0.91760
column max 0.81350 1.7400
row index of min 2.0000 1.0000
row index of max 6.0000 0.00000
Definition
#include
main()
{
decl m = unit(2), as;
savemat("t.mat", m);
print(m, loadmat("t.mat"));
savemat("t.in7", m, {"AA", "BB"});
loadmat("t.in7", &as);
println("names", as);
}
produces
1.0000 0.00000
0.00000 1.0000
1.0000 0.00000
0.00000 1.0000
names
[0] = AA
[1] = BB
and a file called t.mat:
2 2
1.0000000000000000e+000 0.0000000000000000e+000
0.0000000000000000e+000 1.0000000000000000e+000
Definition
#include
main()
{
decl convertdates = 1;
decl as1 = loadsheet("nodata.xlsx", 0, convertdates);
decl as2 = loadsheet("nodata.xlsx", 1, convertdates);
println("xlsx sheet 1:\n", "%v", as1);
if (convertdates)
{
println("date/time elements in sheet 1:");
println("[1][3]=", "%C", as1[1][3]);
println("[2][0]=", "%C", as1[2][0]);
println("[3][3]=", "%C", as1[3][3]);
}
println("ismissing on cell 0,2: ", ismissing(as1[0][2]));
println("xlsx sheet 2:\n", "%v", as2);
decl as3 = loadsheet("nodata.csv", 0, convertdates);
println("csv sheet:\n", "%v", as3);
}
produces (after inserting some additional line breaks):
xlsx sheet 1:
{ {"some text,","and text",.Null,.Null},
{.Null,"12bb",.Null,0.5},
{2455628.25,.Null,.NaN,.Null},
{.Null,15.16,.Null,2455628}
}
date/time elements in sheet 1:
[1][3]=12:00:00
[2][0]=2011-03-07T06:00:00
[3][3]=2011-03-07
ismissing on cell 0,2: 1
xlsx sheet 2:
{ {"some more",.Null},
{.Null,99.900000000000006},
{"in second sheet",.Null}
}
csv sheet:
{ {"some text,","and text",.Null,.Null},
{.Null,"12bb",.Null,0.5},
{2455628.25,.Null,.NaN,.Null},
{.Null,15.16,.Null,2455628}
}
Definition
#include
main()
{
print( log(<1,10>) );
print( log10(<1,10>) );
// the following shows how to prevent log(0)
// in the computation of y*log(y) using the
// dot-conditional operator:
decl y = range(0,4);
print(y .* log(y .> 0 .? y .: 1));
}
produces
0.00000 2.3026
0.00000 1.0000
0.00000 0.00000 1.3863 3.2958 5.5452
Definition
#include
main()
{
print( loggamma(<0.5,1,10>) );
}
produces
0.57236 0.00000 12.802
Definition
#include
main()
{
print( lower(ones(3,3)) );
print( upper(ones(3,3)) );
}
produces
1.0000 0.00000 0.00000
1.0000 1.0000 0.00000
1.0000 1.0000 1.0000
1.0000 1.0000 1.0000
0.00000 1.0000 1.0000
0.00000 0.00000 1.0000
Definition
#include
main()
{
print( min(<1.5,12.5>, 1, 6), " ", max(<1.5,12.5>, 1, 6) );
}
produces: 1 12.5
Definition
#include
main()
{
decl x = <11,12;10,15>;
print("x = ", x);
println("maxc and maxcindex", maxc(x) ~ maxcindex(x));
println("minc and mincindex", minc(x) ~ mincindex(x));
}
produces
x =
11.000 12.000
10.000 15.000
maxc and maxcindex
11.000 15.000 0.00000 1.0000
minc and mincindex
10.000 12.000 1.0000 0.00000
Definition
The normal distribution N[mu,sigma^2] has central moments:
vspace1ex
[
mu_r=sf Eleft[X-sf EXright]^r=left
beginarrayll
0 & textif r is odd,
fracr!(r/2)!fracsigma^r2^r/2 & textif r is even.
endarray
right.
]
So the standard normal distribution has skewness
[
sqrtbeta_1=mu_3/mu_2^3/2=0,
]
and kurtosis
[
beta_2=mu_4/mu_2^2=3.
]
The exponential distribution exp(lambda) has moments about zero:
[
mu_r'=sf EX^r=fracr!lambda^r.
]
Therefore, when lambda=2, the mean is 1/2, the variance
1/2-1/4=1/4, etc.
#include
#include
main()
{
decl m1 = rann(10000,1) ~ ranexp(10000,1, 2);
print("moment ratios",
"%r", {"T","mean","std.dev.","skewness","kurtosis"},
"%c", {"normal", "exp(2)"}, moments(m1));
print("first 6 central moments",
"%r", {"mean", "variance", "m3", "m4", "m5", "m6"},
moments(m1, 6, 0)[1:][]);
}
produces
moment ratios
normal exp(2)
T 10000. 10000.
mean -0.011605 0.49592
std.dev. 1.0033 0.50088
skewness 0.010556 1.9876
kurtosis 3.0314 8.4267
first 6 central moments
mean -0.011605 0.49592
variance 1.0066 0.25088
m3 0.010660 0.24976
m4 3.0713 0.53039
m5 0.13868 1.1581
m6 15.774 2.9434
Definition
#include
main()
{
print( nans(2, 2) );
}
produces
.NaN .NaN
.NaN .NaN
Definition
#include
main()
{
decl x = <1,2;3,4;5,6>;
print( norm(x), " " );
print( norm(x, 1), " " );
print( norm(x, 2), " " );
print( norm(x, 'F') );
}
produces: 11 12 9.52552 9.53939
Definition
#include
main()
{
decl ma = zeros(4,2);
ma[0][0] = ma[0][1] = 1;
print(ma, nullspace(ma));
}
produces
1.0000 1.0000
0.00000 0.00000
0.00000 0.00000
0.00000 0.00000
0.00000 0.00000 0.00000
0.00000 0.00000 -1.0000
0.00000 1.0000 -0.00000
1.0000 0.00000 -0.00000
Definition
#include
main()
{
decl mx, my, cy = 2, ct = 50, ck = 3, mb, mxtx, mxtxi;
mx = ranu(ct,ck);
my = rann(ct,cy) / 10 + mx * ones(ck,1);
olsc(my, mx, &mb);
print(mb);
olsr(my', mx', &mb, &mxtxi, &mxtx);
print(mb, mxtx ~ mxtxi);
print((1/mx)*my, mx'mx ~ invert(mx'mx));
}
produces:
1.0992 0.98022
1.1068 0.95734
0.78966 1.0401
1.0992 1.1068 0.78966
0.98022 0.95734 1.0401
16.842 13.139 12.740 0.23380 -0.11726 -0.10967
13.139 15.095 11.872 -0.11726 0.24566 -0.098336
12.740 11.872 14.467 -0.10967 -0.098336 0.24639
1.0992 0.98022
1.1068 0.95734
0.78966 1.0401
16.842 13.139 12.740 0.23380 -0.11726 -0.10967
13.139 15.095 11.872 -0.11726 0.24566 -0.098336
12.740 11.872 14.467 -0.10967 -0.098336 0.24639
Definition
#include
main()
{
print( ones(2, 2) );
}
produces
1.0000 1.0000
1.0000 1.0000
Definition
#include
main()
{
decl x = rann(2,3), y = ranu(3,3), s = y'y;
print( outer(x, s, 'd') | diagonal(outer(x, s))
| diagonal(x * s * x') );
}
produces
3.7646 4.2561
3.7646 4.2561
3.7646 4.2561
Definition
#include
test()
{
oxprintlevel(0); // output off
// do some simulations which otherwise have output
for (decl i = 0; i < 1000; ++i)
println("i=", i);
oxprintlevel(1); // output on
// do some simulations which has output and warning
oxprintlevel(-1); // output and warnings off
for (decl i = 0; i < 1000; ++i)
println("i=", i, " invert(0):", invert(0));
oxprintlevel(1); // output on
// do some simulations which have warnings
decl oldwarnings = oxwarning(0); // all warnings off
for (decl i = 0; i < 1000; ++i)
invert(0);
oxwarning(oldwarnings); // reset warning levels
}
main()
{
// comment the next line in to overrule oxprintlevel calls
// oxprintlevel(2);
test();
}
Prints nothing unless the oxprintlevel(2) statement is
commented in.
Definition
#include
#include // required for M_2PI
main()
{
decl ct = 2^3 + 7, x, y, yzt, p1, p2;
y = cumulate(rann(ct,1), 0.9);
p1 = periodogram(y) / ct;
x = M_2PI * range(0, int(ct/2))' / ct;
yzt = (y - meanc(y))';// FFT expects data in row
p2 = sqr(cabs(fft1d(yzt))') / (ct * M_2PI );
print("%c", {"periodogram", "frequencies", "FFT"},
p1 ~ x ~ p2);
}
produces (the zeros at the end of the periodogram
and frequencies are added in the concatenation with fft):
periodogram frequencies FFT
0.00000 0.00000 1.1253e-033
0.49542 0.41888 0.49542
0.060270 0.83776 0.060270
0.024741 1.2566 0.024741
0.16432 1.6755 0.16432
0.036133 2.0944 0.036133
0.019385 2.5133 0.019385
0.023846 2.9322 0.023846
0.00000 0.00000 0.023846
0.00000 0.00000 0.019385
0.00000 0.00000 0.036133
0.00000 0.00000 0.16432
0.00000 0.00000 0.024741
0.00000 0.00000 0.060270
0.00000 0.00000 0.49542
Definition
#include
main()
{
decl a = <1,-0.8,-0.1>;
println("a(x)=a[0]+a[1]*x+a[2]*x^2; a(3)=", polyeval(a, 3));
}
produces
a(x)=a[0]+a[1]*x+a[2]*x^2; a(3)=-2.3
Definition
#include
#include // required for M_EULER
main()
{
print(polygamma(<0.5,1>, 0), -M_EULER - 2*log(2) ~ -M_EULER);
print("%12.7g", polygamma(0.5, <0,1,2,3>));
}
produces
-1.9635 -0.57722
-1.9635 -0.57722
-1.96351 4.934802 -16.8288 97.40909
Definition
#include
main()
{
decl a, b, c, ff;
format("%10.4f");
a = <1,-0.9>; b = <1,-0.8,-0.1>;
print(polymul(a, b));
c = polymul(b, a);
print(polydiv(c, a, 5));
// multiply the two FFTs, padded with zeros
ff = cmul( fft(a~zeros(b)), fft(b~zeros(a)) );
ff = fft(ff, 2); // apply inverse real FFT
print( ff[][:columns(a)+columns(b)-2] );
// divide the two FFTs, padded with zeros
ff = cdiv( fft(c~zeros(a)), fft(a~zeros(c)) );
ff = fft(ff, 2); // apply inverse real FFT
print( ff[][:4] );
}
produces
1.0000 -1.7000 0.6200 0.0900
1.0000 -0.8000 -0.1000 -0.0000 -0.0000
1.0000 -1.7000 0.6200 0.0900
1.0000 -0.8000 -0.1000 0.0000 0.0000
Definition
#include
main()
{
decl v1 = <-1, 1.2274, -0.017197, -0.28369, -0.01028>, roots;
polyroots(v1, &roots);
print(v1, "roots", roots, "inverse roots", cdiv(ones(roots),roots),
"polynomial", polymake(roots) );
}
%produces
-1.0000 1.2274 -0.017197 -0.28369 -0.010280
roots
0.82865 0.82865 -0.39337 -0.036535
0.16923 -0.16923 0.00000 0.00000
inverse roots
1.1585 1.1585 -2.5422 -27.371
-0.23659 0.23659 0.00000 0.00000
polynomial
1.0000 -1.2274 0.017197 0.28369 0.010280
0.00000 0.00000 0.00000 0.00000 0.00000
Definition
#include
main()
{
print( "%r", {"row 1", "row 2"},
"%c", {"col 1", "col 2"}, "%6.1g", unit(2) );
decl xp = 9*rann(2,1)~ranu(2,1);
print( "%c", {"x ", "p "},
"%cf",{"%8.4g", " [%4.2f]"}, xp);
decl x = rann(10,2);
print("\nLower diagonal:", "%lwr", x'x);
}
produces
col 1 col 2
row 1 1 0
row 2 0 1
x p
2.024 [0.42]
15.66 [0.16]
Lower diagonal:
10.585
3.1110 7.1178
In the second example we show the output from the
"%v" format.
#include
class VClass
{
decl m_mMatrix;
decl m_aArray;
VClass();
}
VClass::VClass()
{
m_mMatrix = range(1,3);
m_aArray = {"a", "b", "c"};
}
main()
{
decl vc = new VClass();
print("\nobject using %v:\n", "%v", vc);
}
produces
object using %v:
::VClass
{
.m_mMatrix = <1,2,3>;
.m_aArray = {"a","b","c"};
}
Definition
#include
main()
{
decl m = <0,4.61,5.99>;
print("%r", {"chi: "}, probchi(m, 2));
print("%r", {"normal:"}, probn(<-1.96, 0, 1.96>) );
print("%r", {"t: "}, probt(<-1.96, 0, 1.96>, 4) );
/* additional argument types: */
print("%r", {"chi: "}, probchi(5.99, <2,3,4>),
"%r", {"chi: "}, probchi(<6,7,8>, <2,3,4>) );
print("%r", {"nc chi:"}, probchi(m, 2, 5));
print("%r", {"nc t: "}, probt(<-1.96, 0, 1.96>, 4, 5));
}
produces
chi: 0.00000 0.90024 0.94996
normal: 0.024998 0.50000 0.97500
t: 0.060777 0.50000 0.93922
chi: 0.94996 0.88790 0.80010
chi: 0.95021 0.92810 0.90842
nc chi: 0.00000 0.37210 0.49621
nc t: 7.3581e-010 2.8665e-007 0.0052148
Definition
#include
main()
{
print( prodc(<0:3;1:4;2:5>) );
print( prodr(<0:3;1:4;2:5>) );
}
produces
0.00000 6.0000 24.000 60.000
0.00000
24.000
120.00
Definition
#include
main()
{ decl t = range(1,10), tt = (t - 5) / 5;
print("%14.10g", probf(t,10,10)' ~ quanf(probf(t,10,10),10,10)'
~ probt(tt,2)' ~ quant(probt(tt,2),2)' );
}
%produces
0.5 1 0.253817018 -0.8
0.855154194 2 0.3047166335 -0.6
0.9510726929 3 0.3639172365 -0.4
0.98041856 4 0.4299859958 -0.2
0.9910499384 5 0.5 0
0.9954702686 6 0.5700140042 0.2
0.9975177199 7 0.6360827635 0.4
0.9985507194 8 0.6952833665 0.6
0.99910908 9 0.746182982 0.8
0.9994284475 10 0.7886751346 1
Definition
#include
main()
{
print( quantilec(<3;2;1;4>, <1/4,2/4,3/4>) );
print( quantilec(<3;2;1;4>) );
decl m = rann(2,10000); /* generate m */
print( quantiler(m, <0.8,0.9,0.95,0.975>) );
print( quantilec(m', <0.8,0.9,0.95,0.975>) );
m = sortr(m); /* sort m */
print( m[][columns(m) * <0.8,0.9,0.95,0.975> ] );
}
produces:
1.7500
2.5000
3.2500
2.5000
0.83516 1.2728 1.6457 1.9635
0.84842 1.2740 1.6248 1.9570
0.83516 0.84842
1.2728 1.2740
1.6457 1.6248
1.9635 1.9570
0.83536 1.2734 1.6459 1.9638
0.84871 1.2744 1.6255 1.9585
Definition
#include
main()
{
print( range(1,4), range(4,1), range(1,6,2));
print( range(1.2,4), range(1,6,2.1));
}
produces
1.0000 2.0000 3.0000 4.0000
4.0000 3.0000 2.0000 1.0000
1.0000 3.0000 5.0000
1.2000 2.2000 3.2000
1.0000 3.1000 5.2000
Definition
#include
main()
{
print( rank(<1,0;1,0>), " " );
print( rank(<1e-200>), " " );
print( rank(0), " " );
print( rank(<1e-200>, inverteps(0)) );
}
produces: 1 1 0 0
Definition
#include
main()
{
print( sumc( rann(1000,1) ) / 1000 );
ranseed(-1);
print(rann(1,5));
ranseed(-1);
print(rann(1,3) ~ rann(1,2));
}
produces
-0.035817
0.22489 1.7400 -0.20426 -0.91760 -0.67417
0.22489 1.7400 -0.20426 -0.91760 -0.67417
Definition
#include
main()
{
decl seed = ranseed(0);
print("RNG=", ranseed(""), " initial seeds: ",
seed[0], " ... ", seed[sizeof(seed) - 1]);
print( meanc(rann(10000,2)) | meanc(rann(10000,2)) );
seed = ranseed(0);
print("current seed: ",
seed[0], " ... ", seed[sizeof(seed) - 1]);
ranseed(-1);
print( meanc(rann(10000,2)) );
ranseed("GM");
print("RNG=", ranseed(""), " initial seed: ", ranseed(0) );
print( meanc(rann(10000,2)) | meanc(rann(10000,2)) );
ranseed(-1);
print( meanc(rann(10000,2)) );
}
produces
RNG=MWC_52 initial seeds: 1013904223 ... 362436
0.0011722 -0.0070313
-0.0024659 -0.0065795
current seed: 866497328 ... 759508397
0.0011722 -0.0070313
RNG=GM initial seed:
[0] = 362436069
[1] = 521288629
-0.0046842 0.015912
0.0037562 0.017064
-0.0046842 0.015912
Definition
#include
main()
{
print( ranu(2,3) );
}
produces
0.56444 0.76994 0.41641
0.15881 0.098209 0.37477
Definition
#include
main()
{
print( reflect(<2,1;1,4>) );
}
produces
4.0000 1.0000
1.0000 2.0000
Definition
#include
main()
{
decl sarr = {"Aa", "BbAaAa", "Aa", "Cc"};
println(replace("aAaAbBaAa", "bB", "xx"));
println(replace("aAaAbBaAa", "bB", "" ));
println(replace("aAaAbBaAa", "aAa", "1zzz"));
println(replace("aAaAbBaAa", "AAA", "1zzz", "i"));
println(replace(sarr, "AA", "1zzz", "i1"));
println(replace(sarr, "AA", "1zzz", "i.1"));
println(replace(unit(3), <1,0>, <2,5>));
println(unit(3) .== 0 .? 5 .: 2);
println(replace(unit(3), 0, 2 ));
println(replace({0,1,2,0}, 0, 2 ));
}
produces:
aAaAxxaAa
aAaAaAa
1zzzAbB1zzz
1zzzAbB1zzz
[0] = 1zzz
[1] = BbAaAa
[2] = Aa
[3] = Cc
[0] = 1zzz
[1] = Bb1zzzAa
[2] = 1zzz
[3] = Cc
2.0000 5.0000 5.0000
5.0000 2.0000 5.0000
5.0000 5.0000 2.0000
2.0000 5.0000 5.0000
5.0000 2.0000 5.0000
5.0000 5.0000 2.0000
1.0000 2.0000 2.0000
2.0000 1.0000 2.0000
2.0000 2.0000 1.0000
[0] = 2
[1] = 1
[2] = 2
[3] = 2
Definition
#include
main()
{
print( reshape(<1:3>, 4, 3)' );
}
%produces
1.0000 1.0000 1.0000 1.0000
2.0000 2.0000 2.0000 2.0000
3.0000 3.0000 3.0000 3.0000
Definition
#include
main()
{
decl m = <0:3;4:7;8:11;12:15>;
print( reversec(m), reverser(m) );
}
%produces:
12.000 13.000 14.000 15.000
8.0000 9.0000 10.000 11.000
4.0000 5.0000 6.0000 7.0000
0.00000 1.0000 2.0000 3.0000
3.0000 2.0000 1.0000 0.00000
7.0000 6.0000 5.0000 4.0000
11.000 10.000 9.0000 8.0000
15.000 14.000 13.000 12.000
Definition
The following example reads one input line at a time (leading
spaces in each line are skipped, because of the starting space
in " %z", and reads from that string using scan.
The * in "%*d" suppresses assignment, so the integer
is skipped in the file.
#include
main()
{
decl c, i, d, m;
c = scan("Enter an integer: %d", &i,
"Enter a double: %f", &d);
print("items read=", c, " int=", i, " dbl=", d, "\n");
c = scan("Enter a 2 x 2 matrix: %#m", 2, 2, &m);
print("items read=", c, " mat=", m);
c = scan("Enter a matrix with dimensions: %m", &m);
print("items read=", c, " mat=", m);
}
This program produces (keyboard input is written in italics):
Enter an integer: 24
Enter a double: 25
items read=2 int=24 dbl=25
Enter a 2 x 2 matrix: 1 0 0 1
items read=1 mat=
1.0000 0.00000
0.00000 1.0000
Enter a matrix with dimensions: 2 2 1 0 0 1
items read=1 mat=
1.0000 0.00000
0.00000 1.0000
Definition
#include
main()
{
decl m = <0:3;4:7;8:11;12:15>, sel = <1,9,10,14>;
print(m, "select", selectc(m, sel), selectr(m, sel));
print("selectif", selectifr(m, m .< 0 || m .> 14));
print("selectrc", selectrc(m, <2,3,4>, <2,3,4>));
}
produces:
0.00000 1.0000 2.0000 3.0000
4.0000 5.0000 6.0000 7.0000
8.0000 9.0000 10.000 11.000
12.000 13.000 14.000 15.000
select
1.0000 2.0000
5.0000 6.0000
9.0000 10.000
13.000 14.000
0.00000 1.0000 2.0000 3.0000
8.0000 9.0000 10.000 11.000
12.000 13.000 14.000 15.000
selectif
12.000 13.000 14.000 15.000
selectrc
10.000 15.000 .NaN
Definition
#include
main()
{
decl x = <1,2,3;4,5,6>;
print( setbounds(x, 3, 4) );
print( setbounds(x, -.Inf, 4) );
print( setbounds(x, 2, .Inf) );
}
produces
3.0000 3.0000 3.0000
4.0000 4.0000 4.0000
1.0000 2.0000 3.0000
4.0000 4.0000 4.0000
2.0000 2.0000 3.0000
4.0000 5.0000 6.0000
Definition
#include
main()
{
decl ma = ones(2,2), mb = rann(3,3);
print(setdiagonal(ma, zeros(2,1)), setdiagonal(ma, 0),
setdiagonal(ma, zeros(2,2)) );
ma = ones(3,3);
print(setlower(ma, mb, mb), setupper(ma, 0), setupper(ma, 0, 2));
}
%produces
0.00000 1.0000
1.0000 0.00000
0.00000 1.0000
1.0000 0.00000
0.00000 1.0000
1.0000 0.00000
0.22489 1.0000 1.0000
-0.91760 -0.67417 1.0000
0.22335 -0.14139 -0.18338
1.0000 0.00000 0.00000
1.0000 1.0000 0.00000
1.0000 1.0000 1.0000
2.0000 0.00000 0.00000
1.0000 2.0000 0.00000
1.0000 1.0000 2.0000
Definition
#include
main()
{
print( shape(<0:5>, 2, 4) );
print( shape(<0:5>, 4, 2)' );
}
produces
0.00000 2.0000 4.0000 0.00000
1.0000 3.0000 5.0000 0.00000
0.00000 1.0000 2.0000 3.0000
4.0000 5.0000 0.00000 0.00000
Definition
#include
main()
{
decl i, d, m, s, a, res;
i = 0; d = 0.0;
m = unit(3,2);
s = "aap", a = {"a", "b"};
res = columns(i)~rows(i)~sizec(i)~sizer(i)~sizerc(i)
| columns(d)~rows(d)~sizec(d)~sizer(d)~sizerc(d)
| columns(m)~rows(m)~sizec(m)~sizer(m)~sizerc(m)
| columns(s)~rows(s)~sizec(s)~sizer(s)~sizerc(s)
| columns(a)~rows(a)~sizec(a)~sizer(a)~sizerc(a);
print("%r",
{"int","double","matrix[3][2]","string[3]","array[2]"},
"%c",
{"columns","rows","sizec","sizer","sizerc"},
"%8.1g", res);
}
produces:
columns rows sizec sizer sizerc
int 0 0 1 1 1
double 0 0 1 1 1
matrix[3][2] 2 3 2 3 6
string[3] 3 3 3 1 3
array[2] 2 2 2 1 2
Definition
#include
main()
{
decl ct = 10, mb, mt, mx;
mb = <2;3;4;5;6>;
mx = solvetoeplitz(<3,.5,.2,.1>, 5, mb);
print(mx');
mx = invertsym( toeplitz(<3,.5,.2,.1>,5) ) * mb;
print(mx');
}
produces
0.46189 0.63974 0.88536 1.1737 1.7240
0.46189 0.63974 0.88536 1.1737 1.7240
Definition
#include
main()
{
decl m = <1,0,3;0,4,4;4,3,0>;
print( sortbyc(m,0), sortbyr(m,0) );
m = <1,3;1,2;3,4;3,5;2,3;2,2>;
print("%4.1g", m ~ sortbyc(m, 0) ~ sortbyc(m, 0~1));
}
produces
0.00000 4.0000 4.0000
1.0000 0.00000 3.0000
4.0000 3.0000 0.00000
0.00000 1.0000 3.0000
4.0000 0.00000 4.0000
3.0000 4.0000 0.00000
1 3 1 3 1 2
1 2 1 2 1 3
3 4 2 2 2 2
3 5 2 3 2 3
2 3 3 5 3 4
2 2 3 4 3 5
Definition
#include
main()
{
decl m = <1,0,3;0,4,4;4,3,0>;
print( sortc(m), sortr(m) );
print( sortcindex(m[0][]) );
print( sortc( {"x", "", 2, "aa", 1} ) );
}
produces
0.00000 0.00000 0.00000
1.0000 3.0000 3.0000
4.0000 4.0000 4.0000
0.00000 1.0000 3.0000
0.00000 4.0000 4.0000
0.00000 3.0000 4.0000
1.0000
0.00000
2.0000
[0] =
[1] = aa
[2] = x
[3] = 1
[4] = 2
Definition
The following example first smoothes the four
variables in the variable my using time as the X variable, and
automatic bandwidth selection. The second observation of the first
variable is set to a missing value.
The second spline smoothes the
cross plot of the last three variables against the first,
choosing the bandwidth as 12 equivalent parameters.
#include
#include
main()
{ decl my, ms, gcv;
my = loadmat("data/data.in7");
my[1][0] = M_NAN;
ms = spline(my, 0, 0);
print( "%c", {"CONS", "smooth"}, my[:4][0] ~ ms[:4][0]);
ms = spline(my[][1:], my[][0], 12, &gcv);
print( "%r", {"GCV", "k_e"}, gcv);
}
produces
CONS smooth
890.45 890.01
.NaN 888.19
886.33 886.58
884.88 885.38
885.25 884.66
GCV 13.932 1.4645 24.309
k_e 12.000 11.999 11.999
Definition
#include
main()
{
decl s = sprint("a", "_", "%0X", 10);
print( s );
}
produces: a_A
Definition
#include
main()
{
print( sqrt(<2,3>), <2,3> .^ 0.5 );
print( sqr(<2,3>), <2,3> .^ 2 );
println( sqr(2^14), isint(sqr(2^14)) ? " int" : " double");
println( sqr(2^15), isint(sqr(2^15)) ? " int" : " double");
println( pow(2,15), isint(pow(2,15)) ? " int" : " double");
}
produces
1.4142 1.7321
1.4142 1.7321
4.0000 9.0000
4.0000 9.0000
268435456 int
1.07374e+009 double
32768 double
Definition
The following example (samples/inout/inout5.ox) reads one input line at a time (leading
spaces in each line are skipped, because of the starting space
in " %z"), and reads from that string using sscan.
The * in "%*d" suppresses assignment, so the integer
is skipped in the file.
#include
main()
{
decl file, s, c;
decl svar, address;
file = fopen("data/data.in7");
if (!isfile(file))
{
print("failed to open file\n");
exit(1);
}
do
{ c = fscan(file, " %z", &s);
if (c > 0 && s[0] == '>')
{
sscan(&s, ">%s", &svar, "%*d", "%*d", "%*d",
"%*d", "%*d", "%d", &address, " ");
println("variable : ", svar, " address:", address);
println("remainder: ", s);
}
} while (c > 0);
fclose(file);
}
If the .in7 file can be found, this program produces:
variable : CONS address:32
remainder: data 10-04-1992 13:20:38.33
variable : INC address:1336
remainder: data 10-04-1992 13:20:38.33
variable : INFLAT address:2640
remainder: data 10-04-1992 13:20:38.33
variable : OUTPUT address:3944
remainder: data 10-04-1992 13:20:38.33
Definition
#include
main()
{
decl as1 = {"aa", "bb", "cc", "cc"};
decl as2 = {"cc", "dd", "aa"};
print("index = ", strfind(as1, "cc"), "\n",
"index = ", strfindr(as1, "cc"), "\n",
"index = ", strfind(as1, "ee"), "\n",
"index = ", strfind(as1, as2));
println("first ox is at position ", strfind("ooxox", "ox"),
" in \"ooxox\"");
println("last ox is at position ", strifindr("oOXoX", "ox"),
" in \"oOXoX\" (no case)");
println("x is at position ", strfind("ox", 'x'), " in \"ox\"");
println("x is at position ", strfind("OX", 'x'), " in \"OX\"");
println("x is at position ", strifind("OX", 'x'),
" in \"OX\" (no case)");
println("index of x,o in \"OX\" (no case):",
strifind("OX", 'x'~'o'));
}
produces (remember that the first entry has index 0):
index = 2
index = 3
index = -1
index =
2.0000 -1.0000 0.00000
first ox is at position 1 in "ooxox"
last ox is at position 3 in "oOXoX" (no case)
x is at position 1 in "ox"
x is at position -1 in "OX"
x is at position 1 in "OX" (no case)
index of x,o in "OX" (no case):
1.0000 0.00000
Definition
#include
main()
{
decl s = "A StrinG\n";
print( strlwr(s), strupr(s), s);
s = " aa bb \t\n";
print( "{", strtrim(s), "}");
}
produces
a string
A STRING
A StrinG
{aa bb}
Definition
#include
main()
{
print( sumc(<0:3;1:4;2:5>) | sumsqrc(<0:3;1:4;2:5>));
print( sumr(<0:3;1:4;2:5>) ~ sumsqrr(<0:3;1:4;2:5>));
}
produces
3.0000 6.0000 9.0000 12.000
5.0000 14.000 29.000 50.000
6.0000 14.000
10.000 30.000
14.000 54.000
Definition
#include
main()
{
print("%r", {"chi(2):"}, tailchi(<0,4.61,5.99>, 2));
print("%r", {"normal:"}, tailn(<-1.96, 0, 1.96>) );
print("%r", {"t(4): "}, tailt(<-1.96, 0, 1.96>, 4) );
print("%r", {"t(50): "}, tailt(<-1.96, 0, 1.96>, 50) );
}
produces
chi(2): 1.0000 0.099759 0.050037
normal: 0.97500 0.50000 0.024998
t(4): 0.93922 0.50000 0.060777
t(50): 0.97221 0.50000 0.027790
Definition
Note in the example that, strictly speaking, it is not necessary to
truncate the random indices in idx, as this is done automatically when
using a matrix to index another matrix.
#include
main()
{
decl m = rann(1000, 2), idx;
print( thinr(m, 3) ~ m[<0,499,998>][] );
print( thinc(m', 3)' ~ m[<0,499,998>][] );
/* get three random indices in idx */
idx = trunc(ranu(1,3) * rows(m));
print(idx, m[idx][] ~ m[sortr(idx)][] );
}
produces
0.22489 1.7400 0.22489 1.7400
-0.21417 -1.0037 -0.21417 -1.0037
0.084549 0.83591 0.084549 0.83591
0.22489 1.7400 0.22489 1.7400
-0.21417 -1.0037 -0.21417 -1.0037
0.084549 0.83591 0.084549 0.83591
408.00 852.00 877.00
1.9639 0.073371 1.9639 0.073371
0.25375 -1.2006 0.25375 -1.2006
-1.1932 -0.52929 -1.1932 -0.52929
Definition
#include
main()
{
decl timeidx = range(0,4)' / 6 + range(0,4)' / 360;
println("%cf", {"%5.0f","%5.0f","%5.0f","%5.0f","; %20C"},
timeofday(timeidx) ~ timeidx + dayofcalendar(2005,1,1) );
println("time today ", "%C", timeofday());
}
produces
0 0 0 0; 2005-01-01
4 4 0 0; 2005-01-01T04:04:00
8 8 0 0; 2005-01-01T08:08:00
12 12 0 0; 2005-01-01T12:12:00
16 16 0 0; 2005-01-01T16:16:00
time today 22:11
Definition
#include
main()
{
decl i, time, m = rann(100,10), m2;
time = timer();
for (i = 0; i < 1000; ++i)
m2 = m'm;
print("time lapsed: ", timespan(time), "\n");
print("or in seconds: ", (timer() - time) / 100, "\n");
print("time lapsed: ", timespan(time, timer()), "\n");
}
prints the time it took to do the for loop.
Definition
#include
main()
{
decl time1, time2;
time1 = timing(<1990, 12, 1; 1991, 1, 1>);
time2 = timing(<1990, 12, 1, 12, 0, 1>);
println("time1[0]: ", timestr(time1[0]));
println("time1[1]: ", timestr(time1[1]));
println("time2: ", timestr(time2));
println("today: ", timestr(today()));
println("today: ", "%6.0f", timing(today(), 1));
println("today: ", "%C", timing(today(), 2));
}
which produces as output:
time1[0]: 1990-12-01
time1[1]: 1991-01-01
time2: 1990-12-01 12:00:01
today: 2012-06-26 14:27:44
today:
2012 6 26 14 27 44
today: 2012-06-26T14:27:44
Definition
#include
main()
{
print( trace(<2,1;1,4>) );
}
produces: 6
Definition
#include
main()
{
print( trunc(<-2.0-1e-15, -2.0+1e-15, 2.0-1e-15, 2.0+1e-15>));
print(truncf(<-2.0-1e-15, -2.0+1e-15, 2.0-1e-15, 2.0+1e-15>));
}
produces
-2.0000 -1.0000 1.0000 2.0000
-1.0000 -1.0000 2.0000 2.0000
Definition
#include
main()
{
print( unit(2) );
}
produces
1.0000 0.00000
0.00000 1.0000
Definition
#include
test(const a, ...)
{
decl i, args = va_arglist();
println("number of extra arguments: ", sizeof(args));
for (i = 0; i < sizeof(args); i++)
println("vararg [", i, "] = ", args[i]);
}
main()
{
test("tinker", "tailor", "soldier");
}
which prints
number of extra arguments: 2
vararg [0] = tailor
vararg [1] = soldier
Definition
#include
main()
{
decl m1 = rann(100,2), m2;
print( variance(m1), varc(m1) | varr(m1') ' );
}
%produces
1.0356 -0.037133
-0.037133 0.86569
1.0356 0.86569
1.0356 0.86569
Definition
#include
main()
{
decl m1 = rann(100,2), m2 = m1 - meanc(m1);
print( variance(m1), m2'm2/rows(m2) );
}
%produces
1.0356 -0.037133
-0.037133 0.86569
1.0356 -0.037133
-0.037133 0.86569
Definition
#include
main()
{
print( vec(<0,1;2,3>) );
}
produces
0.00000
2.0000
1.0000
3.0000
Definition
#include
main()
{
decl m = <0,1;2,3>;
print( vech(m), unvech(vech(m)) );
}
produces
0.00000
2.0000
3.0000
0.00000 2.0000
2.0000 3.0000
Definition
#include
main()
{
decl x = <0,1,2;0,2,0>;
print(vec(x), vecindex(x)', vecindex(x, 0)' );
}
produces
0.00000
0.00000
1.0000
2.0000
2.0000
0.00000
2.0000 3.0000 4.0000
0.00000 1.0000 5.0000
Definition
#include
main()
{
decl x = <0,1;2,3>;
print( vecr(x) ~ x[] );
}
produces
0.00000 0.00000
1.0000 1.0000
2.0000 2.0000
3.0000 3.0000
Definition
#include
main()
{
decl x = <0,1,2;0,2,0>;
print(vecr(x), "1 argument:", vecrindex(x)',
"2 arguments:", vecrindex(x, 0)',
"3 arguments:", vecrindex(x, <0,2>, 1)');
print("non-zeros:", vecr(x)[vecrindex(x)]',
"zeros:", vecr(x)[vecrindex(x, 0)]' );
}
%produces
0.00000
1.0000
2.0000
0.00000
2.0000
0.00000
1 argument:
1.0000 2.0000 4.0000
2 arguments:
0.00000 3.0000 5.0000
3 arguments:
0.00000 2.0000
non-zeros:
1.0000 2.0000 2.0000
zeros:
0.00000 0.00000 0.00000
Definition
#include
main()
{
print( zeros(2, 2) );
}
produces
0.00000 0.00000
0.00000 0.00000
Definition
Ox version 7.04.
©
JA Doornik
This file last changed .