wisp
 
(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