(Arne Babenhauserheide)
2017-03-16: added matrix-times-vector function for power-iteration stable added matrix-times-vector function for power-iteration
diff --git a/examples/power-iteration.w b/examples/power-iteration.w
new file mode 100755
--- /dev/null
+++ b/examples/power-iteration.w
@@ -0,0 +1,37 @@
+#!/usr/bin/env sh
+# -*- wisp -*-
+exec guile -L $(dirname $(dirname $(realpath "$0"))) --language=wisp -e '(@@ (examples power-iteration) main)' -s "$0" "$@"
+; !#
+
+;; Power iteration, following https://en.wikipedia.org/wiki/Power_iteration#The_method
+
+define-module : examples power-iteration
+ . #:export : step
+
+import : srfi srfi-1
+
+define A '((1 2 3) (1 2 3) (1 2 4))
+define b '(1 1 1)
+
+
+define : M*v A b
+ . "Matrix by vector product"
+ if : = 0 : length A
+ . '()
+ let lp : (res '()) (head 0) (i 0) (j 0)
+ cond
+ {i >= (length A)}
+ reverse res
+ {j >= (length (list-ref A 0))}
+ lp (cons head res) 0 (+ 1 i) 0
+ else
+ lp res
+ + head
+ * : list-ref (list-ref A i) j
+ list-ref b j
+ . i
+ + 1 j
+
+define : main args
+ write : M*v A b
+ newline