RosettaCodeData/Task/Matrix-arithmetic/Stata/matrix-arithmetic-1.stata

29 lines
543 B
Plaintext

real vector range1(real scalar n, real scalar i) {
if (i < 1 | i > n) {
return(1::n)
} else if (i == 1) {
return(2::n)
} else if (i == n) {
return(1::n-1)
} else {
return(1::i-1\i+1::n)
}
}
real matrix submat(real matrix a, real scalar i, real scalar j) {
return(a[range1(rows(a), i), range1(cols(a), j)])
}
real scalar sumrec(real matrix a, real scalar x) {
real scalar n, s, p
n = rows(a)
if (n==1) return(a[1,1])
s = 0
p = 1
for (i=1; i<=n; i++) {
s = s+p*a[i,1]*sumrec(submat(a, i, 1), x)
p = p*x
}
return(s)
}