summaryrefslogtreecommitdiffstats
path: root/ext/bigdecimal/lib/linear.rb
diff options
context:
space:
mode:
authorshigek <shigek@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-03-28 05:00:21 +0000
committershigek <shigek@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-03-28 05:00:21 +0000
commitd2d2fed4e484b5c2caea652838becd884a8225d5 (patch)
tree89e28877c7faa0402135f784553db6a1578eeb3a /ext/bigdecimal/lib/linear.rb
parent785fba71f8447ac1b43fad35e7db97dc5b72e65f (diff)
downloadruby-d2d2fed4e484b5c2caea652838becd884a8225d5.tar.gz
ruby-d2d2fed4e484b5c2caea652838becd884a8225d5.tar.xz
ruby-d2d2fed4e484b5c2caea652838becd884a8225d5.zip
Copied from rough/bigdecimal,documents & some sample programs added.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@3625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/bigdecimal/lib/linear.rb')
-rw-r--r--ext/bigdecimal/lib/linear.rb46
1 files changed, 46 insertions, 0 deletions
diff --git a/ext/bigdecimal/lib/linear.rb b/ext/bigdecimal/lib/linear.rb
new file mode 100644
index 000000000..f93404fb6
--- /dev/null
+++ b/ext/bigdecimal/lib/linear.rb
@@ -0,0 +1,46 @@
+#!/usr/local/bin/ruby
+
+#
+# linear.rb
+#
+# Solves linear equation system(A*x = b) by LU decomposition method.
+# where A is a coefficient matrix,x is an answer vector,b is a constant vector.
+#
+require "bigdecimal"
+require "ludcmp"
+
+include LUSolve
+
+def rd_order
+ printf("Number of equations ?")
+ n = gets().chomp.to_i
+end
+
+zero = BigDecimal::new("0.0")
+one = BigDecimal::new("1.0")
+
+while (n=rd_order())>0
+ a = []
+ as= []
+ b = []
+ printf("\nEnter coefficient matrix element A[i,j]\n");
+ for i in 0...n do
+ for j in 0...n do
+ printf("A[%d,%d]? ",i,j); s = gets
+ a <<=BigDecimal::new(s);
+ as<<=BigDecimal::new(s);
+ end
+ printf("Contatant vector element b[%d] ? ",i);b<<=BigDecimal::new(gets);
+ end
+ printf "ANS="
+ x = lusolve(a,b,ludecomp(a,n,zero,one),zero)
+ p x
+ printf "A*x-b\n"
+ for i in 0...n do
+ s = zero
+ for j in 0...n do
+ s = s + as[i*n+j]*x[j]
+ end
+ p s-b[i]
+ end
+end