|
Groovy example source code file (spectralnorm.groovy)
The Groovy spectralnorm.groovy source code
/*
The Computer Language Shootout
http://shootout.alioth.debian.org/
contributed by Jochen Hinrichsen
*/
def approximate(n) {
// create unit vector
def u = [1.0D] * n
// 20 steps of the power method
def v = [0.0D] * n
for (i in 1..10) {
MultiplyAtAv(n,u,v)
MultiplyAtAv(n,v,u)
}
// B=AtA A multiplied by A transposed
// v.Bv /(v.v) eigenvalue of v
double vBv = vv = 0.0D
for (i in 0..<n) {
vBv += u[i]*v[i]
vv += v[i]*v[i]
}
return Math.sqrt(vBv/vv)
}
/* return element i,j of infinite matrix A */
def A(i, j) {
return (1.0D) / ((i+j)*(i+j+(1.0D))/(2.0D) +i+(1.0D))
}
/* multiply vector v by matrix A */
def MultiplyAv(n, v, Av){
for (i in 0..<n) {
Av[i] = 0.0D
for (j in 0..<n) Av[i] += A(i,j)*v[j]
}
}
/* multiply vector v by matrix A transposed */
def MultiplyAtv(n, v, Atv){
for (i in 0..<n) {
Atv[i] = 0.0D
for (j in 0..<n) Atv[i] += A(j,i)*v[j]
}
}
/* multiply vector v by matrix A and then by matrix A transposed */
def MultiplyAtAv(n, v, AtAv){
double[] u = new double[n]
MultiplyAv(n, v, u)
MultiplyAtv(n, u, AtAv)
}
def n = (args.length == 0 ? 100 : args[0].toInteger())
def nf = java.text.NumberFormat.getInstance()
nf.setMaximumFractionDigits(9)
nf.setMinimumFractionDigits(9)
nf.setGroupingUsed(false)
println(nf.format(approximate(n)))
// EOF
Other Groovy examples (source code examples)Here is a short list of links related to this Groovy spectralnorm.groovy source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.