Hi,

I've got a simple implementation of the Jacobi-method for
approximating the solution of a linear system of equations, maybe your
interested in this.

(defn jacobi-x-step [m b x i]
  "Calculate a part of the solution of a jacobi-method step"
  ;;       1
  ;; xi = --- (bi - (  sum       aij * xij)
  ;;      mij        (not= i j)
  (* (/ 1 (get-in m [i i])) (- (b i) (reduce + (map #(* (get-in m [i
%]) (x %)) (remove #(= i %) (range (count x))))))))

(defn jacobi-method-step
  "Calculate one step of the jacobi-method given a matrix m, a vector
b, and a former solution x."
  ([m b]
     ;; first step of the jacobi method, init x with nullvector
     (jacobi-method-step m b (vec (repeat (count b) 0))))
  ([m b x] (vec (map #(jacobi-x-step m b x %) (range (count x))))))

(defn jacobi-method
  "Return a lazy sequence of solutions to the equation of
  matrix m and vector b and x: M*b = x. To obtain a convergent
sequence,
  m should be diagonally dominant."
  [m b]
  (iterate (partial jacobi-method-step m b) (jacobi-method-step m b)))

;; example:
(last (take 30
            (jacobi-method
             [[3 1 1]
              [1 3 1]
              [1 1 3]]
             [11.0 10.0 8.0]
             )))


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to